Perché konsole sta leggendo / etc / passwd?


8

In relazione a questa domanda:

Mentre osservo il comportamento di Fatrace, noto qualcosa che mi riguarda. Ecco le prime righe di output del comando "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
...

Il fatto è che lsof | grep passwd mostra che passwd non è aperto da nessun processo.

Qualche idea su cosa stia succedendo?


Perché dovrebbe essere un problema di sicurezza che Konsole legge /etc/passwd? Questo file contiene tutte le informazioni sugli account utente, inclusi home directory e shell.
Gilles 'SO- smetti di essere malvagio' il

@Gilles: hai risposto alla tua domanda. :)
Evi1M4chine,

Problemi di sicurezza: No. Problemi di prestazioni: in qualche modo. C'è un bug di KDE segnalato a lungo (2013) e recentemente risolto (upstream, agosto 2016) su questo: bugs.kde.org/show_bug.cgi?id=325442
circa

Risposte:


9

Puoi leggere il codice sorgente; parlando di ... l'ho fatto per te; sembra che provenga dal ProcessInfo.cppfile. Sta ottenendo i nomi utente. Non solo /etc/passwdnon è un problema per te, chiunque può leggerlo. Potresti essere preoccupato però se stesse cercando di leggere /etc/shadow.


2
Penso che le domande più grandi siano: perché lsof non lo sta registrando? Perché Konsole non legge / etc / paswd una volta? Inoltre, perché Konsole ha bisogno di un elenco di nomi utente?
Mouse.The.Lucky.Dog

8

Usando stracepuoi vedere cosa konsolesta facendo.

$ 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 sta leggendo il contenuto di /etc/passwdabbastanza rapidamente e non lo stai vedendo lsof. Questo è un problema tipico quando un file viene aperto, letto rapidamente e quindi chiuso.

Dovrei essere preoccupato?

Questo, a proposito, non è preoccupante. Il mio gnome-terminalfa la stessa cosa. Il flusso di cose può essere un po 'confuso ma Konsole sta interrogando il sistema per ottenere un'informazione. In questo caso qualcosa come la home directory dell'utente.

Quindi il sistema effettua una chiamata a NSS (file di configurazione dello switch del nome del servizio):

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

C'è una linea in questo file, in particolare questa linea:

passwd:     files

Questa riga indica a NSS dove si trova il "database" "passwd". Questa riga indica a NSS che la risorsa si trova nei file. Quindi il sistema apre quindi il /etc/passwdfile per cercare la home directory dell'utente.

NOTA: approfondire questo comportamento sembra essere causato da Bash. Fare uno stracedei soli Bash mostra la stessa cosa.

$ strace -s 2000 -o bash.log bash

Ulteriori letture

Se sei veramente interessato a come funziona NSS, consulta le pagine man nsswitch.confe nss. NSS è modulare e può utilizzare diverse tecnologie di backend per i suoi "database".

Per esempio:

       /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.

1
Non è /etc/nsswitch.confquesto a innescare il caricamento di /etc/passwd, piuttosto il contrario. Konsole vuole ottenere alcune informazioni sugli account utente, quindi si apre /etc/nsswitch.conf, il che dice (all'interno del codice libc, non all'interno del codice dall'origine Konsole) che si trovano gli account utente /etc/passwd.
Gilles 'SO- smetti di essere malvagio' il

@Gilles - OK, riformulerò quella parte, grazie.
slm

@Gilles - aggiornato.
slm

7

Per lo stesso motivo ls -llegge / etc / passwd, sono i dati che associano gli UID ai nomi. Quando lschiama stat(2)un file ottiene un UID numerico per il proprietario del file. Al fine di visualizzazione che come un nome leggibile, ha bisogno di guardare in su in unico posto che ha queste associazioni, /etc/passwd. Ad esempio una tipica prima riga /etc/passwdè

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

Quando è ls -l /etc/hostsnecessario produrre l'output

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

deve tradurre l'UID 0 in "root", quindi chiama una routine di libreria come getpwuid che legge /etc/passwdper fornire la traduzione. Questa è una grande parte del motivo /etc/passwdesistente: fornire tali traduzioni per scopi completamente banali.

Ricerca di nomi utente presenta più di un problema di sicurezza che chiamare localtime in modo che lsposso dirvi "14 gennaio 2013" per la data di modifica del file. Come notato da slm , non c'è motivo di tenere aperto il file, quindi viene chiuso non appena viene letto il suo contenuto.

Il file /etc/passwdconteneva originariamente password con hash in tempi più semplici. Gli hash delle password sono stati spostati su /etc/shadowcui gli utenti normali non possono leggere perché era un buco nella sicurezza. Il nome è /etc/passwdrimasto lo stesso ma ora contiene xnel campo hash della password precedente che non è un hash valido per alcuna password.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.