Wenn Sie sich die ausführbare Datei ansehen sudo
:
$ which sudo
/usr/bin/sudo
$ ls -la /usr/bin/sudo
---s--x--x 2 root root 208808 Jun 3 2011 /usr/bin/sudo
Sie werden feststellen, dass es die Berechtigungsbits enthält ---s--x--x
. Diese lassen sich wie folgt aufteilen:
-|--s|--x|--x
- - first dash denotes if a directory or a file ("d" = dir, "-" = file)
--s - only the setuid bit is enabled for user who owns file
--x - only the group execute bit is enabled
--x - only the other execute bit is enabled
Wenn für ein Programm das Setuid-Bit aktiviert ist (auch als SUID bezeichnet), bedeutet dies, dass es beim Ausführen dieses Programms mit den Anmeldeinformationen des Benutzers ausgeführt wird, dem die Datei gehört, auch bekannt als. root in diesem Fall.
Beispiel
Wenn ich den folgenden Befehl als Benutzer saml ausführen:
$ whoami
saml
$ sudo su -
[sudo] password for saml:
Sie werden feststellen, dass die Ausführung von sudo
tatsächlich als root ausgeführt wird:
$ ps -eaf|grep sudo
root 20399 2353 0 05:07 pts/13 00:00:00 sudo su -
Setuid-Mechanismus
Wenn Sie neugierig sind, wie SUID funktioniert, schauen Sie sich das an man setuid
. Hier ist ein Auszug aus der Manpage, der es besser erklärt, als ich konnte:
setuid () legt die effektive Benutzer-ID des aufrufenden Prozesses fest. Wenn die effektive UID des Anrufers root ist, werden auch die reale UID und die gespeicherte Set-User-ID festgelegt. Unter Linux wird setuid () wie die POSIX-Version mit der Funktion _POSIX_SAVED_IDS implementiert. Auf diese Weise kann ein Set-User-ID-Programm (außer root) alle seine Benutzerrechte löschen, einige nicht privilegierte Arbeiten ausführen und dann die ursprüngliche effektive Benutzer-ID auf sichere Weise wiederherstellen.
Wenn der Benutzer root ist oder das Programm set-user-ID-root ist, muss besondere Sorgfalt angewendet werden. Die Funktion setuid () überprüft die effektive Benutzer-ID des Anrufers. Wenn es sich um den Superuser handelt, werden alle prozessbezogenen Benutzer-IDs auf uid gesetzt. Nachdem dies geschehen ist, kann das Programm keine Root-Rechte mehr erlangen.
Das Schlüsselkonzept hier ist, dass Programme eine echte Benutzer-ID (UID) und eine effektive (EUID) haben. Setuid setzt die effektive Benutzer-ID (EUID), wenn dieses Bit aktiviert ist.
Aus Sicht des Kernels ist es also bekannt, dass in unserem Beispiel saml
immer noch der ursprüngliche Eigentümer (UID) ist, die EUID jedoch mit dem Eigentümer der ausführbaren Datei festgelegt wurde.
setgid
Ich sollte auch erwähnen, dass die zweite Gruppe von Bits für Gruppenberechtigungen war, wenn wir die Berechtigungen für den Befehl sudo aufschlüsseln. Das Gruppenbit hat auch etwas Ähnliches wie setuid, das set group id (auch bekannt als setgid, SGID) genannt wird. Dies entspricht der SUID, mit der Ausnahme, dass der Prozess mit den Gruppenanmeldeinformationen anstelle der Eigentümeranmeldeinformationen ausgeführt wird.
Verweise
sudo -s
statt verwenden,sudo su
weil es eine nutzlose Verwendung von istsu
. :)Die echte
sudo
Binärdatei heißt setuid root , und Sie können nicht einfach Dateien erstellen, die auf diese Weise festgelegt wurden.quelle
Um den Teil über Syscalls zu beantworten, den scheinbar niemand berührt hat, ist einer der wichtigen Syscalls entweder setresuid () oder setresgid (). Ich bin mir sicher, dass es andere gibt, aber diese beiden scheinen ziemlich spezifisch für setuid / sudo zu sein.
quelle