Tutoriel Linux

Getent unter Linux: ein Konto finden, selbst wenn es nicht aus /etc/passwd stammt

Débutant3 min de lecture

Sie führen id alice auf einem Server aus, das Konto existiert im Unternehmensverzeichnis, aber grep alice /etc/passwd liefert nichts zurück. Bevor Sie zu dem Schluss kommen, dass ein Konto fehlt, schauen Sie sich an, welche Ansicht Linux tatsächlich verwendet.

getent befragt die Datenquellen, die in NSS definiert sind, dem Mechanismus, der lokale Dateien, SSSD, LDAP oder einen anderen Identitätsdienst kombinieren kann. So können Sie feststellen, ob das System das Konto, die Gruppe und deren numerische ID auflöst, ohne die Konfiguration zu ändern.

Tux verbindet ein Linux-Konto mit lokalen Dateien und einem Netzwerkverzeichnis
Getent befragt die durch NSS konfigurierten Identitätsquellen.

Warum /etc/passwd nicht immer die Antwort gibt

Auf einer lokalen Maschine enthält /etc/passwd oft alle erwarteten Konten. Auf einem mit LDAP oder Active Directory über SSSD verbundenen Server behält diese Datei die lokalen Konten, während entfernte Konten über NSS kommen.

Der Befehl getent passwd nutzt NSS, um die Datenquelle passwd mit den in /etc/nsswitch.conf definierten Quellen und der Reihenfolge aufzulösen.

grep '^passwd:' /etc/nsswitch.conf
grep '^group:' /etc/nsswitch.conf

Eine Zeile wie passwd: files systemd sss zeigt an, dass Linux zuerst die lokalen Dateien, dann den Systemdienst und schließlich SSSD abfragt. Kopieren Sie diese Reihenfolge nicht in Ihre Konfiguration: Sie hängt von der Distribution und der bereits bestehenden Integration ab.

Ein Konto mit getent suchen

Verwenden Sie den genauen Benutzernamen, ohne die gesamte Datenbank anzuzeigen. In einem großen Verzeichnis kann getent passwd allein eine lange und unnötige Ausgabe erzeugen.

getent passwd alice
getent passwd 10542

Wenn das Konto aufgelöst wird, folgt die Ausgabe dem gewohnten Format: Name, Passwortmarker, UID, GID, beschreibendes Feld, Home-Verzeichnis und Shell. Ein LDAP- oder SSSD-Konto kann also hier erscheinen, während es in /etc/passwd fehlt.

Keine Ausgabe bedeutet nur, dass NSS diesen Eintrag mit der aktuellen Konfiguration nicht findet. Dieses Ergebnis behebt weder einen LDAP-Ausfall noch einen SSSD-Cache oder einen Fehler im angeforderten Namen.

Die Gruppe und die effektive Identität überprüfen

Ein sichtbares Konto garantiert nicht, dass seine Gruppen korrekt sind. Überprüfen Sie die Datenquelle group, und lassen Sie dann id die für diesen Benutzer berechneten Gruppen anzeigen.

getent group projekt-admin
id alice

id alice sollte die UID, die Haupt-GID und die erwarteten zusätzlichen Gruppen anzeigen. Wenn das Konto mit getent passwd alice angezeigt wird, aber nicht mit id alice, bewahren Sie beide Ausgaben auf und überprüfen Sie die Protokolle von SSSD oder dem betreffenden Identitätsdienst.

Diese Ablesung unterstützt die Tools, die NSS anfragen, um eine Identität aufzulösen, wie id oder einen Dienst, der mit einem Verzeichnis konfiguriert ist.

Der Leitfaden zum Auflisten von Benutzern unter Linux ist nützlich, um lokale Konten zu inventarisieren. Hier ist die Frage eine andere: Erkennt das System die Identität zu dem Zeitpunkt, an dem ein Dienst sie verwenden muss?

Zuerst suchen, dann reparieren

Ich würde getent als ersten Kontrollschritt verwenden, bevor ich SSSD neu starte, einen Cache leere oder nsswitch.conf bearbeite. Der Befehl ist nur lesend und gibt den gleichen Blickwinkel wie viele Linux-Programme.

  • Vergleichen Sie das angeforderte Konto mit der Zeile passwd: in /etc/nsswitch.conf.
  • Führen Sie getent passwd benutzer und getent group gruppe aus.
  • Überprüfen Sie die berechneten Gruppen mit id benutzer.
  • Wenn ein Eintrag fehlt, überprüfen Sie das Protokoll des Identitätsdienstes, bevor Sie seine Konfiguration ändern.

Auf einem rein lokalen Arbeitsplatz wird getent oft den Inhalt von /etc/passwd bestätigen. Auf einem Server, der mit einem Verzeichnis verbunden ist, vermeidet dieser Unterschied das Löschen oder die Neuerstellung eines Kontos, das bereits auf NSS-Seite existiert.

Die Seite getent(1) von man7 beschreibt die verfügbaren Datenquellen und die Schlüsselsuche. Wenn das Konto lokal erstellt werden soll, verwenden Sie lieber die Useradd unter Linux-Prozedur, nachdem Sie eine entfernte Identität ausgeschlossen haben.

sudo apt update && sudo apt upgrade