Linux: getent
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 Gruppengroups username
– Nur Gruppen-Mitgliedschaftennslookup
/dig
– DNS-spezifische Lookupsldapsearch
– 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üfengetent group groupname
– Gruppe prüfengetent hosts hostname
– Hostname auflösengetent services servicename
– Service-Port finden