Warum liest konsole / etc / passwd?

8

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?

Mouse.The.Lucky.Dog
quelle
Warum sollte Konsole Sicherheitsbedenken haben /etc/passwd? Diese Datei enthält alle Informationen zu Benutzerkonten, einschließlich des Basisverzeichnisses und der Shell.
Gilles 'SO - hör auf böse zu sein'
@ Gilles: Du hast deine eigene Frage beantwortet. :)
Evi1M4chine
Sicherheitsbedenken: Nein. Leistungsbedenken: etwas. Es gibt einen lange gemeldeten (2013) und kürzlich behobenen
arielf

Antworten:

9

Sie können den Quellcode lesen. Apropos ... ich habe es für dich getan; es sieht aus wie es aus der ProcessInfo.cppDatei ist. Es bekommt die Benutzernamen. Nicht nur, dass Sie /etc/passwdsich darum kümmern, jeder kann es lesen. Sie könnten jedoch besorgt sein, wenn es versucht zu lesen /etc/shadow.


quelle
2
Ich denke, die größeren Fragen sind: Warum registriert ich es nicht? Warum liest konsole / etc / paswd nicht nur einmal? Auch warum braucht konsole eine Liste von Benutzernamen?
Mouse.The.Lucky.Dog
8

Mit können straceSie sehen, was los konsoleist.

$ strace -s 2000 -o konsole.log
...
...
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2655, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f316d8fc000
read(3, "root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nologin\nadm:x:3:4:adm:/var/adm:/sbin/nologin\nlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\nsync:x:5:0:sync:/sbin:/bin/sy
nc\nshutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\nhalt:x:7:0:halt:/sbin:/sbin/halt\nmail:x:8:12:mail:/var/spool/mail:/sbin/nologin\noperator:x:11:0:operator:/root:/sbin/nologin\ngames:x:12:100:games:/usr/games:/sbin/nologin\nf
tp:x:14:50:FTP User:/var/ftp:/sbin/nologin\nnobody:x:99:99:Nobody:/:/sbin/nologin\ndbus:x:81:81:System message bus:/:/sbin/nologin\nsystemd-journal-gateway:x:191:191:Journal Gateway:/var/log/journal:/usr/sbin/nologin\npolkitd:
x:999:999:User for polkitd:/:/sbin/nologin\nusbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin\ncolord:x:998:997:User for colord:/var/lib/colord:/sbin/nologin\nrpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin\nqemu:x:107:
107:qemu user:/:/sbin/nologin\nrtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin\ntss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin\nradvd:x:75:75:radvd user:/:/sbin/nologin\nabr
t:x:173:173::/etc/abrt:/sbin/nologin\nopenvpn:x:997:996:OpenVPN:/etc/openvpn:/sbin/nologin\nunbound:x:996:995:Unbound DNS resolver:/etc/unbound:/sbin/nologin\nsaslauth:x:995:76:\"Saslauthd user\":/run/saslauthd:/sbin/nologin\n
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin\navahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin\nrpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin\nnfsnobody
:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin\nnm-openconnect:x:994:994:NetworkManager user for OpenConnect:/:/sbin/nologin\nmailnull:x:47:47::/var/spool/mqueue:/sbin/nologin\nsmmsp:x:51:51::/var/spool/mqueue:/s
bin/nologin\nsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin\ntcpdump:x:72:72::/:/sbin/nologin\npulse:x:993:993:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin\ngdm:x:42:42::/var/lib/gdm:/sbin/nologin\
ngnome-initial-"..., 4096) = 2655
close(3)                                = 0
...

Konsole liest den Inhalt von /etc/passwdziemlich schnell und Sie sehen ihn einfach nicht mit lsof. 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-terminalmacht 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:

open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3

Diese Datei enthält eine Zeile, insbesondere diese Zeile:

passwd:     files

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/passwdDatei, um nach dem Ausgangsverzeichnis des Benutzers zu suchen.

HINWEIS: Wenn Sie weiter graben, scheint dieses Verhalten durch Bash verursacht zu werden. Ein Tun stracevon nur Bash zeigt das Gleiche.

$ strace -s 2000 -o bash.log bash

Weitere Lesungen

Wenn Sie wirklich daran interessiert sind, wie NSS funktioniert, konsultieren Sie die Manpages nsswitch.confund nss. NSS ist modular aufgebaut und kann für seine "Datenbanken" verschiedene Backend-Technologien verwenden.

Zum Beispiel:

       /etc/nsswitch.conf       NSS configuration file.
       /lib/libnss_compat.so.X  implements "compat" source.
       /lib/libnss_db.so.X      implements "db" source.
       /lib/libnss_dns.so.X     implements "dns" source.
       /lib/libnss_files.so.X   implements "files" source.
       /lib/libnss_hesiod.so.X  implements "hesiod" source.
       /lib/libnss_nis.so.X     implements "nis" source.
       /lib/libnss_nisplus.so.X implements "nisplus" source.
slm
quelle
1
Es ist nicht so, /etc/nsswitch.confdass 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.
Gilles 'SO - hör auf böse zu sein'
@ Gilles - OK, ich werde diesen Teil umformulieren, danke.
slm
@ Gilles - aktualisiert.
slm
7

Aus dem gleichen Grund ls -llautet / etc / passwd. Es sind die Daten, die UIDs mit Namen verknüpfen. Beim lsAufrufen stat(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/passwdist

root:x:0:0:root:/root:/bin/bash

Wann ls -l /etc/hostsmuss die Ausgabe erzeugt werden?

-rw-r--r-- 1 root root 222 Jan 14  2013 /etc/hosts

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 lsSie "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/passwdenthielt ursprünglich in einfacheren Zeiten gehashte Passwörter. Die Kennwort-Hashes wurden verschoben, in /etc/shadowdie normale Benutzer nicht lesen können, da es sich um eine Sicherheitslücke handelt. Der Name ist /etc/passwdgleich geblieben, enthält aber jetzt xim vorherigen Passwort-Hash-Feld keinen gültigen Hash für ein Passwort.

msw
quelle