In Bezug auf diese Frage:
Während ich das Verhalten von Fatrace beobachte, bemerke ich etwas, das mich betrifft. Hier sind die ersten Ausgabezeilen des Befehls "fatrace | grep konsole"
konsole(4112): O /etc/passwd
konsole(4112): CO /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
konsole(4112): C /etc/passwd
konsole(4112): O /etc/passwd
...
Die Sache ist, dass lsof | grep passwd zeigt, dass passwd von keinem Prozess geöffnet wird.
Also eine Idee, was los ist?
/etc/passwd
? Diese Datei enthält alle Informationen zu Benutzerkonten, einschließlich des Basisverzeichnisses und der Shell.Antworten:
Sie können den Quellcode lesen. Apropos ... ich habe es für dich getan; es sieht aus wie es aus der
ProcessInfo.cpp
Datei ist. Es bekommt die Benutzernamen. Nicht nur, dass Sie/etc/passwd
sich darum kümmern, jeder kann es lesen. Sie könnten jedoch besorgt sein, wenn es versucht zu lesen/etc/shadow
.quelle
Mit können
strace
Sie sehen, was loskonsole
ist.Konsole liest den Inhalt von
/etc/passwd
ziemlich schnell und Sie sehen ihn einfach nicht mitlsof
. Dies ist ein typisches Problem, wenn eine Datei geöffnet, schnell gelesen und dann geschlossen wird.Sollte ich besorgt sein?
Dies ist übrigens nicht von Belang. Mein
gnome-terminal
macht das Gleiche. Der Fluss der Dinge kann etwas verwirrend sein, aber Konsole fragt das System nach Informationen ab. In diesem Fall so etwas wie das Home-Verzeichnis des Benutzers.Das System ruft also NSS (Name Service Switch-Konfigurationsdatei) auf:
Diese Datei enthält eine Zeile, insbesondere diese Zeile:
Diese Zeile teilt NSS mit, wo sich die "Datenbank" 'passwd' befindet. Diese Zeile teilt NSS mit, dass sich die Ressource in Dateien befindet. Das System öffnet dann die
/etc/passwd
Datei, um nach dem Ausgangsverzeichnis des Benutzers zu suchen.HINWEIS: Wenn Sie weiter graben, scheint dieses Verhalten durch Bash verursacht zu werden. Ein Tun
strace
von nur Bash zeigt das Gleiche.Weitere Lesungen
Wenn Sie wirklich daran interessiert sind, wie NSS funktioniert, konsultieren Sie die Manpages
nsswitch.conf
undnss
. NSS ist modular aufgebaut und kann für seine "Datenbanken" verschiedene Backend-Technologien verwenden.Zum Beispiel:
quelle
/etc/nsswitch.conf
dass das Laden ausgelöst wird/etc/passwd
, sondern das Gegenteil. Konsole möchte einige Informationen zu Benutzerkonten erhalten, daher wird es geöffnet/etc/nsswitch.conf
, wodurch mitgeteilt wird (innerhalb des libc-Codes, nicht innerhalb des Codes aus der Konsole-Quelle), dass sich die Benutzerkonten befinden/etc/passwd
.Aus dem gleichen Grund
ls -l
lautet / etc / passwd. Es sind die Daten, die UIDs mit Namen verknüpfen. Beimls
Aufrufenstat(2)
einer Datei wird eine numerische UID für den Eigentümer der Datei abgerufen. Um dies als lesbaren Namen anzuzeigen, muss er an der einzigen Stelle nachgeschlagen werden, an der diese Assoziationen bestehen/etc/passwd
. Zum Beispiel in einer typische erste Zeile/etc/passwd
istWann
ls -l /etc/hosts
muss die Ausgabe erzeugt werden?Es muss die UID 0 in "root" übersetzen, damit es eine Bibliotheksroutine wie getpwuid aufruft, die liest
/etc/passwd
, um die Übersetzung bereitzustellen. Das ist ein großer Teil des Grundes/etc/passwd
: solche Übersetzungen für völlig weltliche Zwecke bereitzustellen.Das Nachschlagen von Benutzernamen stellt kein größeres Sicherheitsproblem dar als das Aufrufen von localtime, sodass
ls
Sie "Jan 14 2013" für die Änderungszeit der Datei erhalten. Wie slm feststellte, gibt es keinen Grund, die Datei offen zu halten, sodass sie geschlossen wird, sobald ihr Inhalt gelesen wird.Die Datei
/etc/passwd
enthielt ursprünglich in einfacheren Zeiten gehashte Passwörter. Die Kennwort-Hashes wurden verschoben, in/etc/shadow
die normale Benutzer nicht lesen können, da es sich um eine Sicherheitslücke handelt. Der Name ist/etc/passwd
gleich geblieben, enthält aber jetztx
im vorherigen Passwort-Hash-Feld keinen gültigen Hash für ein Passwort.quelle