Ich bin relativ neu in den in der Frage erwähnten Konzepten und das Lesen aus verschiedenen Quellen macht sie nur noch verwirrender. Also das habe ich bisher verstanden:
Wenn wir Berechtigungen für eine Datei erhalten, sehen sie so aus:
-rwsr-xr-- 1 user1 users 190 Oct 12 14:23 file.bin
Wir gehen davon aus, dass ein Benutzer user2 wer ist in der Gruppe users versucht, file.bin auszuführen . Wenn das Setuid-Bit nicht gesetzt wäre, würde dies bedeuten, dass sowohl die RUID als auch die EUID von file.bin waren gleich der UID von user2 . Aber da das Setuid-Bit gesetzt ist, bedeutet dies, dass die RUID jetzt gleich der UID von user2 ist , während EUID die UID des Eigentümers der Datei ist, user1 .
Meine Fragen sind:
- Was ist der Unterschied zwischen dem Eigentümer der Datei und
root? Hatroothaben die gleichen Berechtigungen wie der Besitzer? Oder bräuchten wir einen separaten Eintrag in der Berechtigungsliste fürroot? - Unterschied zwischen RUID und EUID?
- Nach meinem Verständnis werden RUID und EUID nur auf Prozesse angewendet. Wenn das 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 derzeit ausführt, dann ergibt der erste Satz der ersten Antwort auf diese Frage für mich keinen Sinn.
- Habe ich richtig verstanden, was das setuid-Bit tut?
Akzeptierte Antwort:
Hier sind die Antworten:
-
rootist immer voll Zugriff auf Dateien und Verzeichnisse. Der Besitzer der Datei hat sie normalerweise auch, aber das ist nicht immer der Fall. Zum Beispiel:-r-xr----- 1 user1 users 199 Oct 14 18:42 otherfile.binuser1ist der Eigentümer; sie können jedoch nur lesen und ausführen , aberroothat immer noch vollen Zugriff (rwx ) in die Datei. -
RUID ist die echte Benutzer-ID und es ändert sich (fast) nie. Wenn
user2sich beim System anmeldet, wird die Shell dann gestartet, wobei ihre echte ID aufuser2gesetzt ist . Alle Prozesse, die sie von der Shell starten, erben die echte IDuser2als ihre echte ID.EUID ist die Effektive Benutzer-ID , ändert es sich für Prozesse (nicht für den Benutzer), die der Benutzer ausführt und die das setuid-Bit gesetzt haben .
Wenn
user2führtfile.binaus , ist die RUIDuser2und die EUID des gestarteten Prozesses istuser1.
Nehmen wir den Fall von passwd :
-rwsr-xr-x 1 root root 45396 may 25 2012 /usr/bin/passwd
-
Wenn
user2ihr Passwort ändern möchte , führen sie/usr/bin/passwdaus . -
Die RUID ist
user2aber die EUID dieses Prozesses wirdrootsein . -
user2kannpasswdverwenden nur zu ändern ihr eigenes Passwort, weil internpasswdprüft die RUID und, wenn sie nichtrootist , sind seine Aktionen auf das Passwort des echten Benutzers beschränkt. -
Es ist notwendig, dass die EUID zu
rootwird im Fall vonpasswdweil der Prozess schreiben muss nach/etc/passwdund/oder/etc/shadow.