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
? Hatroot
haben 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:
-
root
ist 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.bin
user1
ist der Eigentümer; sie können jedoch nur lesen und ausführen , aberroot
hat immer noch vollen Zugriff (rwx ) in die Datei. -
RUID ist die echte Benutzer-ID und es ändert sich (fast) nie. Wenn
user2
sich beim System anmeldet, wird die Shell dann gestartet, wobei ihre echte ID aufuser2
gesetzt ist . Alle Prozesse, die sie von der Shell starten, erben die echte IDuser2
als 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
user2
führtfile.bin
aus , ist die RUIDuser2
und 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
user2
ihr Passwort ändern möchte , führen sie/usr/bin/passwd
aus . -
Die RUID ist
user2
aber die EUID dieses Prozesses wirdroot
sein . -
user2
kannpasswd
verwenden nur zu ändern ihr eigenes Passwort, weil internpasswd
prüft die RUID und, wenn sie nichtroot
ist , sind seine Aktionen auf das Passwort des echten Benutzers beschränkt. -
Es ist notwendig, dass die EUID zu
root
wird im Fall vonpasswd
weil der Prozess schreiben muss nach/etc/passwd
und/oder/etc/shadow
.