Linux: getent

8. Juli 2025

getent ist ein Tool, das oft übersehen wird, aber richtig nützlich ist. Es holt Einträge aus verschiedenen Name Service Datenbanken und nutzt dabei die gleichen Mechanismen wie alle anderen System-Services. Das bedeutet: Was getent zeigt, ist das, was das System wirklich sieht.

Was sind Name Service Switch Datenbanken?

Name Service Switch (NSS) ist das System unter Linux, das bestimmt, wo verschiedene Arten von Informationen gefunden werden. Statt nur in lokalen Dateien wie /etc/passwd zu schauen, kann NSS mehrere Quellen abfragen:

  • Lokale Dateien (/etc/passwd, /etc/group, /etc/hosts)
  • LDAP-Verzeichnisse
  • Active Directory
  • NIS (Network Information Service)
  • DNS für Hostname-Auflösung
  • Weitere externe Quellen

NSS macht das transparent für Programme. Ein getent passwd zeigt alle User, egal ob sie lokal oder in LDAP gespeichert sind. Das ist der entscheidende Unterschied zu einem cat /etc/passwd.

Die wichtigsten Datenbanken

Die häufigsten NSS-Datenbanken:

  • passwd – User-Informationen (Username, UID, Home-Directory, Shell)
  • group – Gruppen und ihre Mitglieder
  • hosts – Hostname-zu-IP-Auflösung
  • services – Service-zu-Port-Mappings
  • shadow – Passwort-Hashes (nur als root lesbar)

User-Verwaltung

# Alle User im System
getent passwd

# Bestimmten User finden
getent passwd john
getent passwd 1000  # Nach UID suchen

# User-Existenz prüfen
if getent passwd "$username" >/dev/null 2>&1; then
    echo "User existiert"
else
    echo "User nicht gefunden"
fi

Das ist besonders in LDAP-Umgebungen wichtig. Ein cat /etc/passwd zeigt nur lokale User, aber getent passwd zeigt alle verfügbaren User.

Gruppen-Management

# Alle Gruppen
getent group

# Bestimmte Gruppe
getent group sudo
getent group 27  # Nach GID suchen

# Gruppen-Mitgliedschaften finden
getent group | grep john

Hostname-Auflösung

# Hostname auflösen
getent hosts google.com
getent hosts 192.168.1.100

# Lokale Hosts-Einträge testen
getent hosts myserver

Das berücksichtigt /etc/hosts, DNS und alle anderen konfigurierten Resolver. Wenn ein Programm einen Hostname auflöst, nutzt es die gleichen Mechanismen.

Service-Port-Mappings

Hier wird es interessant. Viele Programme nutzen Service-Namen statt Port-Nummern:

# Port für SSH-Service
getent services ssh
# Ausgabe: ssh  22/tcp

# Service für Port 443
getent services 443
# Ausgabe: https  443/tcp

# Alle TCP-Services
getent services | grep tcp

Warum ist das relevant? Programme können konfiguriert werden mit Service-Namen statt Ports (bspw. ufw):

# UFW versteht Service-Namen
ufw allow ssh
ufw allow https

Das System schlägt diese Namen über NSS nach. Wenn ein Service nicht definiert ist, schlägt die Konfiguration fehl.

Verwandte Tools

  • id username – Zeigt UID, GID und Gruppen
  • groups username – Nur Gruppen-Mitgliedschaften
  • nslookup/dig – DNS-spezifische Lookups
  • ldapsearch – Direkter LDAP-Zugriff

Fazit

getent zeigt die Realität des Systems. Es nutzt die gleichen NSS-Mechanismen wie alle anderen Programme und berücksichtigt alle konfigurierten Datenquellen.

Die wichtigsten Kommandos:

  • getent passwd username – User prüfen
  • getent group groupname – Gruppe prüfen
  • getent hosts hostname – Hostname auflösen
  • getent services servicename – Service-Port finden