Zu Ihrer Information, ich versuche es strace ls -lspäter, ich sehe eine openat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4Aussage.
Rick
7
Natürlich ist die Realität heutzutage komplexer. Es liegt nicht /etc/passwdan den BSDs. Ein Aktiver nscdwird Dinge verändern; wie wird die NSS. Beachten Sie also, dass diese Frage auf einer Weltanschauung der 7. Ausgabe basiert.
JdeBP
4
@JdeBP Alte Programmierung in der Unix-Umgebung ?
Andrew Henle
@JdeBP Ist es nicht? Ich war überrascht, als Sie das sagten, weil ich denke, dass viele Programme (Skripte und Binärdateien) kaputt gehen würden, die (vielleicht falsch, aber immer noch) auf die Anwesenheit von / etc / passwd angewiesen sind.
Peter - Setzen Sie Monica
Dies ist nicht der Fall, da das ordnungsgemäße Lesen dieser Handbuchseite, einschließlich des Abschnitts DATEIEN, Aufschluss geben wird. (-:
JdeBP
Antworten:
50
Das Dateisystem ordnet der Datei direkt die numerischen Werte für UID (Benutzer-ID) und GID (Gruppen-ID) zu, nicht den Benutzernamen und den Gruppennamen (die Zeichenfolgen sind). Der ls -lBefehl (und jeder andere Befehl, der den Benutzer und den Gruppeneigentümer einer Datei anzeigt) muss also die Benutzer- und Gruppennamen von irgendwoher abrufen. Die /etc/passwdDatei ist eine solche Quelle (wahrscheinlich die ursprüngliche und häufigste Quelle). Das Handbuch zeigt dies - aus PASSWD (5) (dh die Manpage für die /etc/passwdDatei):
Viele Dienstprogramme wie ls (1) verwenden es, um Benutzernamen Benutzer-IDs zuzuordnen
Zur Ergänzung der Antwort: POSIX gibt die Option -nfür an ls. Dies verhindert die Übersetzung von UIDs und GIDs in Benutzernamen und Gruppennamen. Ich habe ls -nmit GNU-Kern-Utils getestet lsund die Option hat den Zugriff auf beide /etc/passwdund /etc/groupwie erwartet verhindert.
strace ls -l
später, ich sehe eineopenat(AT_FDCWD, "/etc/passwd", O_RDONLY|O_CLOEXEC) = 4
Aussage./etc/passwd
an den BSDs. Ein Aktivernscd
wird Dinge verändern; wie wird die NSS. Beachten Sie also, dass diese Frage auf einer Weltanschauung der 7. Ausgabe basiert.Antworten:
Das Dateisystem ordnet der Datei direkt die numerischen Werte für UID (Benutzer-ID) und GID (Gruppen-ID) zu, nicht den Benutzernamen und den Gruppennamen (die Zeichenfolgen sind). Der
ls -l
Befehl (und jeder andere Befehl, der den Benutzer und den Gruppeneigentümer einer Datei anzeigt) muss also die Benutzer- und Gruppennamen von irgendwoher abrufen. Die/etc/passwd
Datei ist eine solche Quelle (wahrscheinlich die ursprüngliche und häufigste Quelle). Das Handbuch zeigt dies - aus PASSWD (5) (dh die Manpage für die/etc/passwd
Datei):quelle
-n
für anls
. Dies verhindert die Übersetzung von UIDs und GIDs in Benutzernamen und Gruppennamen. Ich habels -n
mit GNU-Kern-Utils getestetls
und die Option hat den Zugriff auf beide/etc/passwd
und/etc/group
wie erwartet verhindert.