UID des Prozesses nicht in /etc/passwd

UID des Prozesses nicht in /etc/passwd

Ich baue einen Spielzeug-Systemmonitor, für den ich mehrere Dateien aus analysiere /proc. Unter anderem analysiere ich die uidfür jeden Prozess aus /proc/$pid/status. Später ordnet ich die UID des Prozesses dem Benutzernamen zu, den ich aus analysiert habe /etc/passwd. Aber in einigen seltenen Fällen stürzt mein Programm ab, weil es den Benutzernamen nicht finden kann. Muss ich auch andere Dateien analysieren, um eine vollständige Zuordnung von UID zu Benutzername zu erhalten?

Antwort1

Linux unterstützt modulare Kontodatenbanken. Zusätzlich zur „files“-Datenbank (/etc/passwd) können Benutzerkonten in SSSD, in BDB, in einer Netzwerkdatenbank (LDAP, YP, NIS, Hesiod, Active Directory, SQL) gespeichert oder sogar dynamisch vom Datenbankmodul selbst generiert werden (systemd DynamicUsers).

Damit dies funktioniert, sollten SieniemalsAnalysieren Sie /etc/passwd und andere Dateien direkt (es sei denn, Sie erstellen speziell ein Tool zur lokalen Benutzerverwaltung).

Sie sollten die von libc bereitgestellten Funktionen verwenden, wiegetpwuid()odergetgrgid()um Benutzernamen und UIDs nachzuschlagen. Von Shellskripten aus sollten Sie die getent- oder idCLI-Tools verwenden, um Nachschlagevorgänge durchzuführen.

Generell sollte es auch nie zu einem Absturz kommen, wenn die Zuordnung fehlschlägt, da es möglich ist, dass das Konto gelöscht wurde oder dass der Prozess zu einem Container gehört, der einen eigenen UID-Bereich hat. Zeigen Sie in diesem Fall einfach die UID an.

verwandte Informationen