Von APUE
Die reale Benutzer-ID und die reale Gruppen-ID eines Prozesses identifizieren, wer wir wirklich sind. Diese beiden Felder werden bei der Anmeldung aus unserem Eintrag in der Kennwortdatei übernommen. Normalerweise ändern sich diese Werte während einer Anmeldesitzung nicht, obwohl es für einen Superuser-Prozess Möglichkeiten gibt , sie zu ändern
Kann ein Superuser-Prozess die reale Benutzer-ID und die reale Gruppen-ID eines Prozesses ändern, sodass die Beziehung zwischen der realen Benutzer-ID und der realen Gruppen-ID nicht mit denen in der Kennwortdatei übereinstimmt? Zum Beispiel, wenn der Benutzer Tim
kein Mitglied der Gruppe ist ocean
per der Passwort - Datei, kann den realen Benutzer - ID und die realen Gruppen - ID eines Prozesses ein Superuser - Prozess sein ändern Tim
und ocean
jeweils?
Antworten:
Ja, ein Superuser-Prozess kann seine reale Benutzer-ID und die reale Gruppen-ID in einen beliebigen Wert ändern. Die Werte in
/etc/passwd
und/etc/shadow
sind die Konfiguration für die Werte, die festgelegt werden sollen, jedoch keine Einschränkung möglicher Werte.Bearbeiten Sie # 1
Dies bedeutet, dass Programme wie
login
die Werte aus den Dateien lesen, sodass die Dateien Konfigurationsdateien oder Eingabedateien sind. Sie sind keine Einschränkungen für die Leistung eines Programms. Ein Superuser-Prozess kann einen beliebigen Wert an den Kernel übergeben, und der Kernel überprüft keine Dateien.Ein Programm könnte aufrufen
und dies würde funktionieren, selbst wenn keine der IDs in einer Datei erwähnt wird.
quelle
Die Kennwortdatei und die Gruppendatei werden nicht gelesen, sondern nur vom Anmeldevorgang, um die tatsächliche Benutzer-ID und die tatsächliche Gruppen-ID festzulegen.
Es gibt nichts im Kernel, was diese Dateien erwähnt. Login muss die Dateien öffnen, verarbeiten und die beiden IDs festlegen. Es könnte anders geschrieben werden, um diese IDs von einem anderen Ort zu erhalten. ZB aus einer vernetzten Datenbank.
Jeder Prozess mit der Funktion CAP_SETUID kann diese IDs festlegen. Root verfügt über diese Funktion.
Das Sicherheitsmodell in Unix ist teilweise im Kernel implementiert und teilweise in Prozessen implementiert, die mit erhöhten Funktionen ausgeführt werden (z. B. als Root).
Beachten Sie, dass
/etc/passwd
und/etc/group
auch von und jedem anderen Programm gelesen werdenls
,ps
das Benutzer- / Gruppennamen in / von Benutzer- / Gruppen-IDs übersetzen muss. (Sie können dies über eine Bibliothek tun, als über alternative Methoden zum Speichern dieser Details Bescheid weiß.)quelle
/etc/passwd
,/etc/groups
) werden auch von Prozessen gelesen, die Benutzernamen anstelle der internen numerischen IDs anzeigen oder verarbeiten möchten, z . B.ps
undls
.Der Zweck von
/etc/passwd
besteht unter anderem darin, den Namen eines Benutzers in die UID eines Benutzers zu übersetzen . Wenn es Ihnen egal ist, wie die UID von Bob lautet, benötigen Sie diese Datei nicht. Wenn Sie nur zu einer beliebigen UID / GID wechseln möchten, verwenden Sie die entsprechenden Systemaufrufe:Beachten Sie, dass ein privilegierter Prozess mit den Funktionen
CAP_SETUID
und (über die ein Root-Prozess im Allgemeinen verfügt) nur seine eigene UID und GID ändern kann, nicht die eines anderen laufenden Prozesses.CAP_SETGID
quelle