2015-09-08 7 views
50

Ich kenne bereits eine echte Benutzer-ID. Dies ist die eindeutige Nummer für einen Benutzer im System. In meinem System ist My uidUnterschied zwischen echter Benutzer-ID, effektiver Benutzer-ID und gespeicherter Benutzer-ID

$ echo $UID 
1014 
$     

Wofür stehen die beiden anderen IDs? Und was ist eine effektive Benutzer-ID und gespeicherte Benutzer-ID und wo wir sie im System verwenden?

+0

FYI - es gibt auch die Benutzer-ID des Dateisystems, wie auf der Wikipedia-Seite beschrieben: https://en.wikipedia.org/wiki/User_identifier –

Antwort

75

Der Unterschied zwischen einer echten und einer effektiven Benutzer-ID besteht darin, dass Sie möglicherweise die Identität eines anderen Benutzers vorübergehend übernehmen müssen (meistens root, aber es könnte ein beliebiger Benutzer sein). Wenn Sie nur eine Benutzer-ID hätten, dann gäbe es keine Möglichkeit, später zu Ihrer ursprünglichen Benutzer-ID zurückzukehren (außer, dass Sie es für selbstverständlich halten, und falls Sie root sind, die Privilegien von root an jeden Benutzer zu ändern) .

Also, die wahre Benutzer-ID ist, wer Sie wirklich sind (derjenige, der den Prozess besitzt), und die effektive Benutzer-ID ist, was das Betriebssystem anschaut, um eine Entscheidung zu treffen, ob Sie etwas tun dürfen die meiste Zeit, gibt es einige Ausnahmen).

Wenn Sie sich anmelden, setzt die Login-Shell sowohl die echte als auch die effektive Benutzer-ID auf denselben Wert (Ihre echte Benutzer-ID), wie er von der Passwort-Datei geliefert wird.

Jetzt kommt es auch vor, dass Sie ein setuid-Programm auszuführen, und außerdem als einen anderen Benutzer ausgeführt wird (beispielsweise root) das setuid-Programm ist auch sollte etwas in Ihrem Namen tun. Wie funktioniert das?
Nach dem Ausführen des setuid-Programms wird es Ihre echte ID (da Sie der Prozesseigner sind) und die effektive Benutzer-ID des Dateieigentümers (zum Beispiel root) seit es setuid ist.

Das Programm macht alles, was es mit Superuser-Privilegien zu tun hat und möchte dann etwas für Sie tun. Das bedeutet, dass Sie versuchen sollten, etwas zu tun, was Sie nicht tun können sollte fehlschlagen. Wie macht es das? Nun, natürlich, indem Sie die effektive Benutzer-ID in die echte Benutzer-ID ändern!

Nun, dass setuid Programm keine Möglichkeit hat, zurück zu schalten, da der ganze Kernel weiß, ist Ihre ID und ... Ihre ID. Bang, du bist tot.

Dies ist, was die gespeicherte Set-Benutzer-ID ist.

+0

Für mehr Klarheit über den letzten Punkt über Benutzer-ID gespeichert, set, siehe [Wikipedia.] (Https://en.wikipedia.org/wiki/User_identifier#Saved_user_ID) – GDP2

+0

Kannst du mich auf einige Lesungen hinweisen, bei denen ich herausfinden kann, welcher Systemaufruf stattdessen die echte UID prüft? danke – mik1904

+0

@ mik1904: Die wichtigste, die Sie wahrscheinlich verwenden, die wirklich _checks_ echte UID ist 'Zugriff'. Das sind 99,9% davon. Auch 'setfsuid' (aber selten benötigt), und einige sehr Low-Level-Funktionen, und Sie brauchen (aber nicht überprüft) die echte Benutzer-ID zum Abrufen/Setzen von Prioritäten oder Scheduler, und die IDs an Signalhandler übergeben oder von zurückgegeben 'wait' et al. _are_ echte IDs. 'execve' überprüft nicht, aber _can fail_, wenn Sie die echte Benutzer-ID geändert haben. Auch 'fork' überprüft nicht, aber _can fail_, wenn Sie die maximale Prozessquote auf der realen UID erreichen. Google mit 'site: man7.org' ist dein Freund hier. – Damon