uid do processo não está em /etc/passwd

uid do processo não está em /etc/passwd

Estou construindo um monitor de sistema de brinquedo para o qual analiso vários arquivos do /proc. Entre outros valores, analiso o uidpara cada processo de /proc/$pid/status. Mais tarde, mapeio o uid do processo para o nome de usuário do qual analisei /etc/passwd. Mas, em alguns casos raros, meu programa trava porque não consegue encontrar o nome de usuário. Preciso analisar outros arquivos também para obter um mapeamento completo de uid -> nome de usuário?

Responder1

Linux oferece suporte a bancos de dados de contas modulares. Além do banco de dados de 'arquivos' (/etc/passwd), as contas de usuário podem ser armazenadas em SSSD, em BDB, em um banco de dados de rede (LDAP, YP, NIS, Hesiod, Active Directory, SQL), ou podem até mesmo ser gerado dinamicamente pelo próprio módulo de banco de dados (systemd DynamicUsers).

Para fazer isso funcionar, você devenuncaanalise /etc/passwd e outros arquivos diretamente (bem, a menos que você esteja criando especificamente uma ferramenta de gerenciamento de usuário local).

Você deve usar as funções fornecidas pela libc, comogetpwuid()ougetgrgid()para procurar nomes de usuários e UIDs, e a partir de shellscripts você deve usar as ferramentas CLI getentou idpara realizar pesquisas.

Em geral, você também nunca deve travar se o mapeamento falhar, pois é possível que a conta tenha sido excluída ou que o processo pertença a um contêiner que possui seu próprio intervalo de UID. Basta mostrar o UID quando isso acontecer.

informação relacionada