Mir ist bereits die echte Benutzer-ID bekannt . Dies ist die eindeutige Nummer für einen Benutzer im System.
In meinem System Mein uid
ist
$ echo $UID
1014
$
Wofür stehen die beiden anderen IDs?
Und wozu dienen die effektive Benutzer-ID und die gespeicherte Benutzer-ID und wo verwenden wir sie im System?
Antworten:
Die Unterscheidung zwischen einer realen und einer effektiven Benutzer-ID erfolgt, weil Sie möglicherweise vorübergehend die Identität eines anderen Benutzers übernehmen müssen (meistens also
root
, aber es kann sich um einen beliebigen Benutzer handeln). Wenn Sie nur eine Benutzer-ID hätten, gäbe es keine Möglichkeit, danach zu Ihrer ursprünglichen Benutzer-ID zurückzukehren (außer Ihr Wort als selbstverständlich zu betrachten und, falls Sie dies tunroot
, dieroot
Berechtigungen zu verwenden, um zu einem Benutzer zu wechseln).Die tatsächliche Benutzer-ID ist also, wer Sie wirklich sind (derjenige, dem der Prozess gehört), und die effektive Benutzer-ID ist das, was das Betriebssystem betrachtet, um eine Entscheidung zu treffen, ob Sie (meistens) etwas tun dürfen oder nicht gibt es einige Ausnahmen).
Wenn Sie sich anmelden, setzt die Anmeldeshell sowohl die tatsächliche als auch die effektive Benutzer-ID auf denselben Wert (Ihre tatsächliche Benutzer-ID), der von der Kennwortdatei angegeben wird.
Nun, es kommt auch vor, dass Sie ein setuid - Programm auszuführen, und außerdem als einen anderen Benutzer ausgeführt wird (zB
root
) das setuid - Programm wird auch etwas in Ihrem Namen tun soll. Wie funktioniert das?Nach dem Ausführen des setuid-Programms hat es Ihre echte ID (da Sie der Prozessverantwortliche sind) und die effektive Benutzer-ID des Dateieigentümers (zum Beispiel
root
), da es setuid ist.Das Programm macht alles, was es braucht, um mit Superuser-Berechtigungen umzugehen, und möchte dann etwas für Sie tun. Das heißt, der Versuch, etwas zu tun, was Sie nicht können sollten, sollte fehlschlagen . Wie macht es das? Nun, offensichtlich durch Ändern der effektiven Benutzer-ID in die echte Benutzer-ID!
Jetzt kann dieses setuid-Programm nicht mehr zurückschalten, da der Kernel nur noch Ihre ID und ... Ihre ID kennt . Bang, du bist tot.
Dafür ist die gespeicherte Set-User-ID gedacht.
quelle
access
. Das sind 99,9% davon. Außerdemsetfsuid
(aber selten benötigt) und einige Funktionen auf sehr niedriger Ebene, und Sie benötigen (werden aber nicht überprüft) die tatsächliche Benutzer-ID zum Abrufen / Festlegen von Prioritäten oder Scheduler sowie die IDs, die an Signalhandler übergeben oder vonwait
et al. Zurückgegeben wurden . sind echte IDs.execve
wird nicht überprüft, kann jedoch fehlschlagen, wenn Sie die tatsächliche Benutzer-ID geändert haben. Wirdfork
auch nicht überprüft, kann aber fehlschlagen, wenn Sie das maximale Prozesskontingent für die reale UID erreichen. Google mitsite:man7.org
ist dein Freund hier.ping
braucht eine rohe Steckdose. Jeder Benutzer kann (normalerweise) eine Steckdose öffnen und über 1024 hören.Ich werde versuchen, dies anhand einiger Beispiele Schritt für Schritt zu erklären.
Kurzer Hintergrund
Jedes Verfahren hat seine eigenen ‚Prozess - Anmeldeinformationen‘ , die Attribute wie beinhaltet
PID
, diePPID
,PGID
,session ID
und auch die tatsächliche und Benutzer- und Gruppen - IDs:RUID
,EUID
,RGID
,EGID
.Wir werden uns auf diese konzentrieren.
Teil 1: UID und GID verstehen
Jetzt logge ich mich mit meinen Anmeldeinformationen in eine Shell ein und führe Folgendes aus:
Sie können meinen Lognamen (Rotem), die UID und die GID, die beide 1000 sind, und andere Details wie die Shell sehen, bei der ich angemeldet bin.
Teil 2: RUID und RGID verstehen
Jeder Prozess hat einen Eigentümer und gehört zu einer Gruppe .
In unserer Shell erbt jeder Prozess, den wir jetzt ausführen, die Berechtigungen meines Benutzerkontos und wird mit derselben UID und GID ausgeführt.
Führen Sie einen einfachen Befehl aus, um ihn zu überprüfen:
Und überprüfen Sie die Prozess-UID und GID:
Dies sind die reale Benutzer-ID (
RUID
) und die reale Gruppen-ID (RGID
) des Prozesses .(*) Überprüfen Sie andere Optionen , um die UID und GID zu sehen und Möglichkeiten , dies in in Einzeiler zu bekommen .
Akzeptieren Sie vorerst die Tatsache, dass die Attribute
EUID
undEGID
"redundant" sind und nur gleichRUID
undRGID
hinter den Kulissen sind.Teil 3: EUID und EGID verstehen
Nehmen wir den
ping
Befehl als Beispiel.Suchen Sie mit dem
which
Befehl nach dem binären Speicherort und führen Sie dann Folgendes ausls -la
:Sie können sehen, dass Eigentümer und Gruppe der Datei sind
root
. Dies liegt daran, dass derping
Befehl einen Socket öffnen muss und der Linux-Kernel dafürroot
Berechtigungen verlangt .Aber wie kann ich verwenden,
ping
wenn ich keinroot
Privileg habe?Beachten Sie den Buchstaben 's' anstelle von 'x' im Eigentümerteil der Dateiberechtigung.
Dies ist ein spezielles Berechtigungsbit für bestimmte ausführbare Binärdateien (wie
ping
undsudo
), das als setuid bezeichnet wird .Hier kommt
EUID
undEGID
kommt ins Spiel.Wenn eine setuid- Binärdatei wie
ping
ausgeführt wird, ändert der Prozess seine effektive Benutzer-ID (EUID
) vom StandardwertRUID
in den Eigentümer dieser speziellen ausführbaren Binärdatei, die in diesem Fall - lautetroot
.Dies alles geschieht durch die einfache Tatsache, dass diese Datei das
setuid
Bit hat.Der Kernel trifft die Entscheidung, ob dieser Prozess das Privileg hat, indem er sich
EUID
den Prozess ansieht . Da jetzt dieEUID
Punkte aufroot
, wird die Operation vom Kernel nicht abgelehnt.Beachten : In den neuesten Linux-Versionen
ping
sieht die Ausgabe des Befehls anders aus, da anstelle dieses Setuid- Ansatzes der Linux Capabilities- Ansatz verwendet wurde - für diejenigen, die nicht vertraut sind - lesen Sie hier .Teil 4: Was ist mit SUID und SGID?
Die gespeicherte Benutzer-ID (
SUID
) wird verwendet, wenn ein privilegierter Prozess ausgeführt wird (wieroot
zum Beispiel) und einige nicht privilegierte Aufgaben ausgeführt werden müssen.In diesem Fall wird die effektive UID (
EUID
) von zuvor darin gespeichertSUID
und dann in eine nicht privilegierte Aufgabe geändert. Wenn die nichtprivilegierte Aufgabe abgeschlossen ist,EUID
wird die vom Wert von genommenSUID
und zum privilegierten Konto zurückgeschaltet.quelle