uid del proceso no está en /etc/passwd

uid del proceso no está en /etc/passwd

Estoy construyendo un monitor de sistema de juguete para el cual analizo varios archivos de /proc. Entre otros valores, analizo el uidde cada proceso de /proc/$pid/status. Luego asigno el uid del proceso al nombre de usuario que analicé /etc/passwd. Pero en algunos casos raros mi programa falla porque no puede encontrar el nombre de usuario. ¿Necesito analizar otros archivos también para obtener un uid completo -> mapeo de nombre de usuario?

Respuesta1

Linux admite bases de datos de cuentas modulares. Además de la base de datos de 'archivos' (/etc/passwd), las cuentas de usuario se pueden almacenar en SSSD, en BDB, en una base de datos de red (LDAP, YP, NIS, Hesiod, Active Directory, SQL), o incluso pueden ser generado dinámicamente por el propio módulo de base de datos (systemd DynamicUsers).

Para que esto funcione, debesnuncaanaliza /etc/passwd y otros archivos directamente (bueno, a menos que estés creando específicamente una herramienta de administración de usuarios local).

Debe utilizar las funciones proporcionadas por libc, comoobtenerpwuid()oobtenergrgid()para buscar nombres de usuario y UID, y desde shellscripts debe usar las herramientas CLI getento idpara realizar búsquedas.

En general, nunca deberías fallar si el mapeo falla, ya que es posible que la cuenta haya sido eliminada o que el proceso pertenezca a un contenedor que tenga su propio rango UID. Simplemente muestra el UID cuando eso suceda.

información relacionada