Por que o Konsole está lendo / etc / passwd?

8

Em relação a esta questão:

Enquanto observo o comportamento do fatrace, percebo algo que me preocupa. Aqui estão as primeiras linhas de saída do 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
...

A questão é que o lsof | grep passwd mostra que o passwd não está aberto por nenhum processo.

Então, alguma ideia do que está acontecendo?

    
por Mouse.The.Lucky.Dog 19.04.2014 / 04:44

3 respostas

9

Você pode ler o código-fonte; falando de ... eu fiz isso por você; parece que é do arquivo ProcessInfo.cpp . Está recebendo os nomes de usuários. Não só isso /etc/passwd não é uma preocupação para você, qualquer um pode lê-lo. Você pode estar preocupado se estivesse tentando ler /etc/shadow .

    
por 19.04.2014 / 05:19
8

Usando strace , você pode ver o que o konsole está fazendo.

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

O Konsole está lendo o conteúdo de /etc/passwd com bastante rapidez e você simplesmente não o vê com lsof . Esse é um problema típico quando um arquivo é aberto, lido rapidamente e depois fechado.

Devo estar preocupado?

Isso, a propósito, não é uma preocupação. Meu gnome-terminal faz a mesma coisa. O fluxo de coisas pode ser um pouco confuso, mas o Konsole está consultando o sistema por uma informação. Neste caso, algo como o diretório pessoal do usuário.

Assim, o sistema faz uma chamada para o NSS (arquivo de configuração do Switch de Serviço de Nome):

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

Há uma linha neste arquivo, especificamente nesta linha:

passwd:     files

Esta linha diz ao NSS onde o "banco de dados" 'passwd' pode ser encontrado. Esta linha está dizendo ao NSS que o recurso está localizado em arquivos. Portanto, o sistema abre o arquivo /etc/passwd para procurar o diretório pessoal do usuário.

OBSERVAÇÃO: Ainda mais este comportamento parece ser causado pelo Bash. Fazer um strace de apenas Bash mostra a mesma coisa.

$ strace -s 2000 -o bash.log bash

Outras leituras

Se você estiver genuinamente interessado em como o NSS funciona, consulte as páginas de manual nsswitch.conf e nss . O NSS é modular e pode usar diferentes tecnologias de back-end para seus "bancos de dados".

Por exemplo:

       /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.
    
por 19.04.2014 / 07:09
7

Pelo mesmo motivo ls -l lê / etc / passwd, são os dados que associam UIDs a nomes. Quando ls chama stat(2) em um arquivo, ele recebe um UID numérico para o proprietário do arquivo. Para exibir isso como um nome legível para humanos, ele precisa procurar no único local que tenha essas associações, /etc/passwd . Por exemplo, uma típica primeira linha em /etc/passwd é

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

Quando ls -l /etc/hosts precisa produzir a saída

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

ele precisa traduzir o UID 0 em "root" para que ele chame uma rotina de biblioteca como getpwuid que lê /etc/passwd para fornecer a tradução. Essa é uma grande parte da razão pela qual /etc/passwd existe: para fornecer tais traduções para finalidades completamente mundanas.

Pesquisar nomes de usuários não apresenta mais problemas de segurança do que chamar horário local para que ls possa informar you "Jan 14 2013" para a hora da modificação do arquivo. Como slm observou, não há motivos para manter o arquivo aberto, por isso ele é fechado assim que seu conteúdo é lido .

O arquivo /etc/passwd originalmente continha senhas com hash em tempos mais simples. Os hashes de senha foram movidos para /etc/shadow , o que usuários normais não podem ler porque era uma falha de segurança. O nome /etc/passwd permaneceu o mesmo, mas agora contém x no campo de hash da antiga senha que não é um hash válido para qualquer senha.

    
por 19.04.2014 / 07:38