Unterschied zwischen Eigentümer / Wurzel und RUID / EUID

24

Ich bin relativ neu in den in der Frage erwähnten Konzepten, und wenn ich sie aus verschiedenen Quellen lese, sind sie nur verwirrender. Das habe ich bisher verstanden:

Wenn wir Berechtigungen für eine Datei erhalten, sehen sie folgendermaßen aus:

-rwsr-xr-- 1 user1 users 190 Oct 12 14:23 file.bin

Wir gehen davon aus, dass ein Benutzer user2in der Gruppe usersversucht, auszuführen file.bin. Wenn das setuid-Bit nicht gesetzt wäre, würde dies bedeuten, dass sowohl die RUID als auch die EUID file.bingleich der UID von sind user2. Da jedoch das setuid-Bit gesetzt ist, entspricht die RUID jetzt der UID von user2, während EUID die UID des Eigentümers der Datei ist user1.

Meine Fragen sind:

  1. Was ist der Unterschied zwischen dem Eigentümer der Datei und root? Hat rootdie gleichen Berechtigungen wie der Besitzer? Oder benötigen wir einen separaten Eintrag in der Berechtigungsliste für root?
  2. Unterschied zwischen RUID und EUID?
    • Soweit ich weiß, werden RUID und EUID nur auf Prozesse angewendet. Wenn dies der Fall ist, warum haben sie den Wert von Benutzer-IDs?
    • Wenn RUID der Benutzer ist, der den Prozess erstellt, und EUID der Benutzer ist, der den Prozess gerade ausführt, ergibt der erste Satz der ersten Antwort in dieser Frage für mich keinen Sinn.
    • Habe ich richtig verstanden, was das setuid-Bit bewirkt?
user1956190
quelle

Antworten:

35

Hier sind die Antworten:

  1. roothat immer vollen Zugriff auf Dateien und Verzeichnisse. Der Besitzer der Datei hat sie normalerweise auch, aber das ist nicht immer wahr. Beispielsweise:

    -r-xr----- 1 user1 users 199 Oct 14 18:42 otherfile.bin
    

    user1ist der Besitzer ; Sie können jedoch nur lesen und ausführen , haben aber rootdennoch vollen Zugriff ( rwx ) auf die Datei.

  2. RUID ist die echte Benutzer-ID und ändert sich (fast) nie. Wenn Sie user2sich beim System anmelden, wird die Shell mit der tatsächlichen ID gestartet, die auf festgelegt ist user2. Alle Prozesse, die sie von der Shell aus starten, erben die reale ID user2als ihre reale ID.

    EUID ist die effektive Benutzer-ID . Sie ändert sich für Prozesse (nicht für den Benutzer), die der Benutzer ausführt, der das setuid-Bit gesetzt hat .

    Wenn user2ausgeführt file.bin, wird die RUID user2und die EUID des gestarteten Prozesses sein user1.

Verwenden wir den Fall von passwd:

-rwsr-xr-x 1 root root 45396 may 25  2012 /usr/bin/passwd
  • Wenn user2sie ihr Passwort ändern möchten , führen sie aus /usr/bin/passwd.

  • Die RUID wird user2aber die EUID dieses Prozesses sein root.

  • user2kann verwendet werden passwd, um nur das eigene Kennwort zu ändern, da passwddie RUID intern überprüft wird. Andernfalls rootsind die Aktionen auf das Kennwort des tatsächlichen Benutzers beschränkt.

  • Es ist notwendig, dass die EUID rootfür den Fall, passwddass der Prozess schreiben muss , /etc/passwdund / oder wird /etc/shadow.

jcbermu
quelle
Vielen Dank! Jetzt ist alles klarer. Ich habe jedoch noch eine Frage. Die EUID ändert sich nur, wenn ein Benutzer einen Prozess ausführt, für den das setuid-Bit gesetzt ist. Oder kann es sich auch in einer anderen Situation ändern? Und wenn ja, wie ist die Situation?
user1956190
1
Ich denke, es gibt keinen anderen Weg als Prozesse auszuführen, bei denen das setuidBit gesetzt ist.
JCBERMU
3
Ein Prozess, der von einem "setuid" -Programm ausgeführt wird (dh ein Prozess mit der effektiven UID ≠ realen UID), kann die EUID auf die RUID zurücksetzen. In einigen Fällen kann die EUID zwischen ihrem Anfangswert (dh dem Eigentümer der Programmdatei) und der RUID hin- und hergeschaltet werden. Möglicherweise kann die RUID auch mit der EUID gleichgesetzt werden. … (Fortsetzung)
Scott
2
(Fortsetzung) ... Privilegierte Prozesse (die mit EUID = 0, aka root) kann EUID und RUID auf beliebige Werte eingestellt (beispielsweise die login, suund sudoProgramme tun). Sobald ein privilegierter Prozess seine UIDs in Werte ungleich Null ändert, ist er im Allgemeinen nicht mehr privilegiert und kann nicht rooterneut ausgeführt werden. Siehe die Manpages setuid (2) , seteuid (2) und setreuid (2) .
Scott
1
(Fortsetzung)… Es wurde als Hack eingeführt, um ein Problem zu lösen, das anschließend auf eine breitere Basis gelöst wurde. Es könnte von Linux entfernt worden sein, außer dass eine solche Bereinigung die Programme, die es verwenden, beschädigen würde. Michael Kerrisk, Autor von The Linux Programming Interface , sagt in seiner Version der Manpage setfsuid (2) , " setfsuid()ist heutzutage nicht mehr nötig und sollte in neuen Anwendungen vermieden werden."
Scott