Em relação a esta pergunta:
Ao observar o comportamento da fadrace, noto 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
...
O problema é que lsof | grep passwd mostra que o passwd não está aberto por nenhum processo.
Alguma idéia do que está acontecendo?
/etc/passwd
? Este arquivo contém todas as informações sobre contas de usuário, incluindo o diretório inicial e o shell.Respostas:
Você pode ler o código fonte; falando de ... eu fiz isso por você; parece que é do
ProcessInfo.cpp
arquivo. Está recebendo os nomes de usuário. Não só isso/etc/passwd
não é uma preocupação para você, qualquer um pode lê-lo. Você pode estar preocupado se estiver tentando ler/etc/shadow
.fonte
Usando
strace
você pode ver o quekonsole
está acontecendo .O Konsole está lendo o conteúdo do site
/etc/passwd
rapidamente e você não o vêlsof
. Esse é um problema típico quando um arquivo é aberto, lido rapidamente e depois fechado.Devo me preocupar?
A propósito, isso não é motivo de 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 em busca de informações. Nesse caso, algo como o diretório inicial do usuário.Portanto, o sistema faz uma chamada para o NSS (arquivo de configuração do Name Service Switch):
Há uma linha neste arquivo, especificamente esta linha:
Essa linha informa ao NSS onde o "banco de dados" 'passwd' pode ser encontrado. Esta linha está informando ao NSS que o recurso está localizado nos arquivos. Portanto, o sistema abre o
/etc/passwd
arquivo para procurar o diretório inicial do usuário.Observação: cavando mais esse comportamento parece ser causado por Bash. Fazer
strace
apenas Bash mostra a mesma coisa.Leituras adicionais
Se você está realmente interessado em saber como o NSS funciona, consulte as páginas de manual
nsswitch.conf
enss
. O NSS é modular e pode usar diferentes tecnologias de back-end para seus "bancos de dados".Por exemplo:
fonte
/etc/nsswitch.conf
que desencadeia o carregamento de/etc/passwd
, pelo contrário, o oposto. O Konsole deseja obter algumas informações sobre contas de usuário, para que seja aberto/etc/nsswitch.conf
, o que informa (dentro do código libc, não dentro do código da fonte do Konsole) que as contas do usuário estão/etc/passwd
.Pelo mesmo motivo,
ls -l
lê / etc / passwd, são os dados que associam UIDs aos nomes. Quandols
chamastat(2)
um arquivo, ele recebe um UID numérico para o proprietário do arquivo. Para exibir isso como um nome legível por humanos, ele precisa procurá-lo no único local que possui essas associações/etc/passwd
. Por exemplo, uma primeira linha típica/etc/passwd
éQuando
ls -l /etc/hosts
precisa produzir a saídaele precisa converter o UID 0 em "raiz", para chamar uma rotina de biblioteca como getpwuid, que lê
/etc/passwd
para fornecer a tradução. Essa é uma grande parte da razão da/etc/passwd
existência: fornecer essas traduções para propósitos completamente mundanos.Procurar nomes de usuário não representa mais um problema de segurança do que chamar a hora local, para que
ls
você possa indicar "14 de janeiro de 2013" para a hora da modificação do arquivo. Como slm observou, não há razão para manter o arquivo aberto, por isso é 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 os/etc/shadow
quais os usuários normais não podem ler porque era uma falha de segurança. O nome/etc/passwd
permaneceu o mesmo, mas agora contémx
o campo de hash da senha anterior, que não é válido para nenhuma senha.fonte