Tutoriel Linux

Getent onder Linux: een account terugvinden, zelfs als het niet uit /etc/passwd komt

Débutant3 min de lecture

U voert id alice uit op een server, het account bestaat in de bedrijfsdirectory, maar grep alice /etc/passwd geeft niets terug. Voordat u concludeert dat het account ontbreekt, kijk naar de weergave die Linux daadwerkelijk gebruikt.

getent vraagt de databases die in NSS zijn gedefinieerd, het mechanisme dat lokale bestanden, SSSD, LDAP of een andere identiteitsdienst kan combineren. Zo kunt u zien of het systeem het account, de groep en de bijbehorende numerieke identificatie oplost, zonder de configuratie te wijzigen.

Tux verbindt een Linux-account met lokale bestanden en een netwerkkatalogus
Getent raadpleegt de identiteitsbronnen die door NSS zijn geconfigureerd.

Waarom /etc/passwd niet altijd het antwoord geeft

Op een lokale machine bevat /etc/passwd vaak alle verwachte accounts. Op een server die via SSSD met LDAP of Active Directory is verbonden, behoudt dit bestand de lokale accounts, terwijl de externe accounts via NSS binnenkomen.

De opdracht getent passwd gebruikt NSS om de database passwd op te lossen met de bronnen en volgorde die zijn gedefinieerd in /etc/nsswitch.conf.

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

Een regel zoals passwd: files systemd sss geeft aan dat Linux eerst de lokale bestanden raadpleegt, dan de systeemdienst en uiteindelijk SSSD. Kopieer deze volgorde niet naar uw configuratie: deze is afhankelijk van de distributie en de al bestaande integratie.

Zoek een account met getent

Gebruik de exacte inlognaam, zonder de hele database weer te geven. Op een grote directory kan getent passwd alleen een lange en nutteloze uitvoer produceren.

getent passwd alice
getent passwd 10542

Als het account is opgelost, volgt de uitvoer het gebruikelijke formaat: naam, wachtwoordmarkering, UID, GID, beschrijvingsveld, persoonlijke map en shell. Een LDAP- of SSSD-account kan hier dus verschijnen terwijl het afwezig blijft in /etc/passwd.

Geen uitvoer betekent alleen dat NSS deze invoer niet vindt met de huidige configuratie. Dit resultaat verhelpt geen LDAP-storing, geen SSSD-cache en geen fout in de gevraagde naam.

Controleer de groep en de effectieve identiteit

Een zichtbaar account garandeert niet dat zijn groepen correct zijn. Controleer de database group, en laat id de berekende groepen voor deze gebruiker weergeven.

getent group projet-admin
id alice

id alice moet de UID, de primaire GID en de verwachte extra groepen weergeven. Als het account terugkomt met getent passwd alice maar niet met id alice, bewaar dan beide uitvoer en raadpleeg de logboeken van SSSD of de betreffende identiteitsdienst.

Deze lezing helpt de tools die NSS vragen om een identiteit op te lossen, zoals id of een dienst die is geconfigureerd met een directory.

De gids om gebruikers in Linux te lijsten blijft nuttig voor het inventariseren van lokale accounts. Hier is de vraag anders: herkent het systeem de identiteit op het moment dat een dienst deze moet gebruiken?

Eerst zoeken, dan repareren

Ik zou getent als eerste controle aanhouden voordat ik SSSD herstart, een cache leegmaak of nsswitch.conf wijzig. De opdracht is alleen-lezen en biedt hetzelfde perspectief als veel Linux-programma’s.

  • Vergelijk het gevraagde account met de regel passwd: van /etc/nsswitch.conf.
  • Voer getent passwd gebruiker en getent group groep uit.
  • Controleer de berekende groepen met id gebruiker.
  • Als een invoer ontbreekt, noteer dan het logboek van de identiteitsdienst voordat u de configuratie wijzigt.

Op een alleen lokale computer bevestigt getent vaak de inhoud van /etc/passwd. Op een server die met een directory is verbonden, voorkomt dit verschil dat u een account verwijdert of opnieuw aanmaakt dat al bestaat aan de NSS-zijde.

De pagina getent(1) van man7 geeft details over de beschikbare databases en de zoekopdracht op sleutel. Als het account lokaal moet worden aangemaakt, gebruik dan liever de procedure Useradd onder Linux nadat u een externe identiteit hebt uitgesloten.

sudo apt update && sudo apt upgrade