VMware ESXi and vSphere Cluster Management
Die Datei /etc/passwd unter Linux verstehen
Lerne Aufbau, sieben Felder, UID, GID, Systemkonten, /etc/shadow, NSS sowie sichere Befehle zum Prüfen und Verwalten von /etc/passwd kennen.
/etc/passwd ist eine lokale, textbasierte Benutzerkontendatenbank auf Unix- und Linux-Systemen. Sie beschreibt, welche lokalen Konten existieren und welche numerischen Kennungen, Gruppen, Verzeichnisse und Anmeldeprogramme ihnen zugeordnet sind.
Der Dateiname stammt aus einer Zeit, in der Passwortinformationen direkt in dieser Datei gespeichert wurden. Auf modernen Linux-Systemen enthält /etc/passwd normalerweise jedoch keine Passwort-Hashes. Stattdessen verweist das Passwortfeld meist mit x auf /etc/shadow.
Zweck und Rolle von /etc/passwd
Programme benötigen häufig eine Zuordnung zwischen einem Benutzernamen und einer numerischen Benutzerkennung. Der Kernel arbeitet bei Eigentümern und Berechtigungen vor allem mit der UID, also der User ID. Menschen und viele Werkzeuge verwenden dagegen Namen. /etc/passwd stellt für lokale Konten grundlegende Informationen bereit, darunter:
- den eindeutigen Benutzernamen,
- die numerische UID,
- die primäre Gruppenkennung, also die GID,
- optionale beschreibende Angaben,
- das Home-Verzeichnis und
- die Login-Shell.
Die Datei muss typischerweise für alle lokalen Benutzer lesbar sein. Dadurch können Programme Dateibesitzer, Benutzer-IDs und Kontonamen auflösen, ohne dass jeder Prozess Zugriff auf geschützte Passwortdaten benötigt. Das Leserecht bedeutet nicht, dass die Datei Passwort-Hashes preisgibt.
Aufbau und Dateiformat
Jedes Benutzerkonto wird normalerweise durch genau eine Zeile dargestellt. Die sieben Felder dieser Zeile sind durch Doppelpunkte getrennt:
Benutzername:Passwortfeld:UID:GID:GECOS:Home-Verzeichnis:Login-Shell
Ein Doppelpunkt innerhalb eines Feldwerts würde als neuer Feldtrenner interpretiert und damit das Format stören. Leere Felder können je nach Feld und System vorkommen; ihre Bedeutung muss im jeweiligen Kontext geprüft werden. Eine gültige normale Zeile besitzt grundsätzlich sieben durch Doppelpunkte getrennte Positionen.
| Position | Feld | Beispielwert | Bedeutung | Wichtige Hinweise |
|---|---|---|---|---|
| 1 | Benutzername | alice | Textbasierter Name des Kontos | Zur Anmeldung und Namensauflösung verwendet; lokal eindeutig |
| 2 | Passwortfeld | x | Verweis beziehungsweise Status der Passwortanmeldung | Passwort-Hashes liegen normalerweise in /etc/shadow |
| 3 | UID | 1001 | Numerische Benutzerkennung | Maßgeblich für Eigentum und Berechtigungsprüfung |
| 4 | GID | 1001 | Numerische Kennung der primären Gruppe | Weitere Gruppen werden meist über /etc/group aufgelöst |
| 5 | GECOS/Kommentar | Alice Beispiel | Optionale beschreibende Kontodaten | Kann vollständigen Namen, Büro oder Kontaktangaben enthalten |
| 6 | Home-Verzeichnis | /home/alice | Standardarbeitsverzeichnis | Üblicher Speicherort persönlicher Dateien und Konfigurationen |
| 7 | Login-Shell | /bin/bash | Programm für eine interaktive Anmeldung | Kann bei Dienstkonten auf /usr/sbin/nologin oder /bin/false zeigen |
Die sieben Felder im Detail
1. Benutzername
Der Benutzername ist der textbasierte Kontoname, beispielsweise alice. Er wird bei Anmeldungen eingegeben und von Programmen zur lesbaren Darstellung einer UID genutzt. Für lokale Konten muss der Name innerhalb der lokalen Kontendatenbank eindeutig sein.
2. Passwortfeld
Das zweite Feld heißt historisch Passwortfeld. Auf modernen Systemen steht dort meist x. Dieses Zeichen bedeutet üblicherweise, dass die eigentlichen Passwortinformationen in /etc/shadow ausgelagert sind.
| Wert | Übliche Bedeutung | Sicherheits- und Praxisnotiz |
|---|---|---|
x | Passwort-Hash wird aus /etc/passwd ausgelagert und in /etc/shadow erwartet. | Der normale Zustand bei modernen Linux-Installationen. |
! | Passwortanmeldung ist üblicherweise gesperrt oder der Passwortwert markiert das Konto als nicht nutzbar. | Die genaue Wirkung kann vom Authentifizierungsverfahren und der Distribution abhängen. |
* | Passwortanmeldung ist üblicherweise nicht verwendbar. | Typisch bei Konten, die nicht für eine Passwortanmeldung vorgesehen sind; Details sind kontospezifisch. |
| Historischer Hash direkt im Feld | Ältere Systeme konnten einen Passwort-Hash direkt in diesem Feld speichern. | Heute aus Sicherheitsgründen nicht der übliche Aufbau. Passwort-Hashes nicht manuell in /etc/passwd eintragen. |
3. UID
Die UID ist die numerische Benutzerkennung. Der Kernel verwendet sie, um Dateibesitz und Berechtigungen zu prüfen. Wenn eine Datei beispielsweise der UID 1001 gehört, wird ihr Besitzer nur dann als alice angezeigt, wenn eine passende Namensauflösung vorhanden ist.
4. GID und primäre Gruppe
Die GID im vierten Feld ist die primäre Gruppe des Kontos. Sie wird bei der Anmeldung beziehungsweise beim Start eines Prozesses als dessen Standardgruppe verwendet. Ergänzende Gruppenzugehörigkeiten stehen üblicherweise nicht in /etc/passwd, sondern werden über Gruppenquellen wie /etc/group aufgelöst.
Neu erzeugte Dateien erhalten normalerweise die primäre Gruppe des erzeugenden Prozesses. Diese Regel kann beispielsweise durch ein setgid-Verzeichnis beeinflusst werden, in dem neue Dateien die Gruppe des Verzeichnisses übernehmen.
5. GECOS- oder Kommentarfeld
Das GECOS-Feld enthält optionale beschreibende Informationen. Häufig steht dort der vollständige Name. Je nach System und Verwaltungsrichtlinie können auch Büro, Raum oder Kontaktinformationen enthalten sein. Das Feld ist nicht für die technische Berechtigungsprüfung zuständig.
6. Home-Verzeichnis
Das Home-Verzeichnis ist das Standardarbeitsverzeichnis nach einer erfolgreichen Anmeldung. Persönliche Dateien und benutzerspezifische Konfigurationen liegen häufig dort, etwa unter /home/alice. Der Eintrag allein garantiert nicht, dass das Verzeichnis existiert oder die richtigen Eigentümer und Berechtigungen besitzt.
7. Login-Shell
Die Login-Shell ist das Programm, das bei einer interaktiven Anmeldung gestartet wird. Bei einem regulären Konto kann das beispielsweise /bin/bash sein. Ein Konto kann aber auch absichtlich eine nicht interaktive Shell besitzen:
/usr/sbin/nologinverweigert normalerweise eine interaktive Sitzung mit einer erklärenden Meldung./bin/falsebeendet den Anmeldeversuch normalerweise sofort mit einem Fehlerstatus.
Solche Shells sind bei Dienstkonten üblich. Die Shell muss außerdem auf dem System existieren und je nach Anmeldedienst als zulässige Shell akzeptiert werden.
Beispiel: Ein reguläres Benutzerkonto lesen
alice:x:1001:1001:Alice Beispiel:/home/alice:/bin/bash
alice: Benutzername des Kontos.x: Passwortinformationen werden üblicherweise aus/etc/shadowbezogen.1001: UID von Alice.1001: GID der primären Gruppe.Alice Beispiel: möglicher Wert im GECOS-Feld./home/alice: Home-Verzeichnis./bin/bash: Login-Shell.
Die Werte für UID und primäre GID eines neu angelegten normalen Benutzers sind nicht überall gleich. Sie hängen unter anderem von Distribution, Konfiguration, Richtlinie und bereits vorhandenen Konten ab.
Systemkonten und Dienstkonten
Ein interaktives Benutzerkonto dient einer Person, die sich anmeldet und Programme startet. Ein Systemkonto oder Dienstkonto gehört dagegen meist einem Betriebssystembestandteil oder einem Netzwerkdienst. Der Dienst kann dadurch mit einer eigenen UID und eingeschränkten Rechten laufen, statt als root.
Typische Eigenschaften von Dienstkonten sind:
- eine niedrige oder anderweitig distributionsspezifisch reservierte UID,
- kein reguläres Home-Verzeichnis oder ein absichtlich nicht vorhandenes Verzeichnis,
- eine nicht interaktive Shell wie
/usr/sbin/nologinoder/bin/false, - eine nur für einen bestimmten Dienst vorgesehene Identität.
UID-Bereiche sind nicht auf allen Linux-Distributionen identisch. Deshalb darf eine feste Grenze nicht als allgemeingültige Regel verwendet werden. Prüfe bei Zweifeln die Richtlinien und die Kontoverwaltung des konkreten Systems.
| Merkmal | Reguläres Benutzerkonto | Dienst- oder Systemkonto |
|---|---|---|
| Home-Verzeichnis | Meist vorhandenes Verzeichnis wie /home/alice | Oft kein reguläres Home-Verzeichnis; manchmal ein spezielles Dienstverzeichnis |
| Login-Shell | Interaktive Shell wie /bin/bash oder eine andere Benutzer-Shell | Häufig /usr/sbin/nologin oder /bin/false |
| Interaktive Anmeldung | Normalerweise vorgesehen | Normalerweise nicht vorgesehen |
| Typischer Einsatzzweck | Arbeit einer Person | Ausführung eines Dienstes oder einer Systemfunktion |
| UID-Vergabe | Gemäß Benutzerbereich und lokaler Richtlinie | Häufig niedrige oder reservierte UID; Bereich ist distributionsabhängig |
Beispiel eines Dienstkontos
websvc:x:995:995:Webdienst:/nonexistent:/usr/sbin/nologin
websvcbezeichnet das Dienstkonto./nonexistentzeigt, dass kein nutzbares Home-Verzeichnis vorgesehen sein kann./usr/sbin/nologinverhindert normalerweise eine interaktive Anmeldung.- UID, GID und Pfade unterscheiden sich je nach Distribution und lokaler Konfiguration.
Zusammenspiel mit /etc/shadow
/etc/shadow enthält üblicherweise Passwort-Hashes sowie Angaben zur Passwortalterung und zum Ablauf. Diese Datei ist restriktiver geschützt als /etc/passwd, weil ein Hash zwar kein Klartextpasswort ist, aber für Offline-Angriffe genutzt werden kann.
Das x im zweiten Feld von /etc/passwd signalisiert die Auslagerung der Passwortinformationen. Passwort-Hashes sollten nicht durch manuelles Bearbeiten von /etc/passwd geändert werden. Verwende dafür passwd oder geeignete zentrale Verwaltungswerkzeuge.
UID, GID und Dateiberechtigungen
Bei einer Datei speichert Linux Eigentümer und Gruppe zunächst als numerische UID und GID. Werkzeuge wie ls -l wandeln diese Zahlen für die Anzeige in Namen um. Fehlt ein passender Eintrag, erscheinen stattdessen numerische IDs.
Die primäre Gruppe eines Kontos stammt aus dem GID-Feld von /etc/passwd. Zusätzliche Gruppen werden über Gruppenquellen, beispielsweise /etc/group, bestimmt. Mit id lassen sich UID, primäre GID und ergänzende Gruppen gemeinsam prüfen.
Lokale Datei und NSS-Namensauflösung unterscheiden
NSS steht für Name Service Switch. Es steuert, aus welchen Quellen Benutzer- und Gruppeninformationen aufgelöst werden und in welcher Reihenfolge diese Quellen abgefragt werden. Die Konfiguration steht typischerweise in /etc/nsswitch.conf.
cat /etc/passwd zeigt ausschließlich den direkten Inhalt der lokalen Datei. getent passwd fragt dagegen die über NSS konfigurierte passwd-Datenbank ab. Das Ergebnis kann daher lokale Einträge und Konten aus LDAP, SSSD, Active Directory oder anderen zentralen Quellen enthalten.
cat /etc/passwd
grep '^alice:' /etc/passwd
getent passwd alice
getent passwd
Ein Benutzer kann deshalb durch getent passwd alice gefunden werden, obwohl keine entsprechende Zeile in der lokalen /etc/passwd-Datei steht.
Sicher prüfen und verwalten
Informationen abfragen
cat /etc/passwd
grep '^alice:' /etc/passwd
getent passwd alice
id alice
ls -l /etc/passwd /etc/shadow
Für lokale Schnellprüfungen sind cat und grep geeignet. Für Diagnose, Skripte und Umgebungen mit zentraler Benutzerverwaltung ist getent meist die bessere Wahl, weil NSS-Quellen berücksichtigt werden. id alice zeigt zusätzlich Gruppeninformationen.
Konten mit Verwaltungswerkzeugen ändern
Verwende für Änderungen Werkzeuge wie useradd, usermod, userdel und passwd, statt die Datei direkt mit einem Texteditor zu bearbeiten.
sudo usermod -s /bin/bash alice
sudo usermod -d /home/alice -m alice
Die zweite Anweisung setzt das Home-Verzeichnis und kann es mit -m verschieben. Optionen und genaue Wirkung können distributionsabhängig sein; prüfe deshalb die lokale Dokumentation.
Ist eine manuelle Reparatur ausnahmsweise notwendig, sollte vipw verwendet werden:
sudo vipw
vipw unterstützt Sperrmechanismen und ist für die kontrollierte Bearbeitung der passwd-Datei vorgesehen. Für die shadow-Datei gibt es je nach System eine entsprechende Variante, beispielsweise vipw -s.
Fehleranalyse
Benutzer fehlt in /etc/passwd, erscheint aber bei getent
Wahrscheinliche Ursache ist ein Konto aus einer zentralen NSS-Quelle wie LDAP oder SSSD.
getent passwd benutzerausführen.- Den
passwd-Eintrag in/etc/nsswitch.confprüfen. - Die Konfiguration des zuständigen Identitätsdienstes untersuchen.
Ein Konto kann sich nicht interaktiv anmelden
Prüfe das siebte Feld mit getent passwd benutzer. Eine Shell wie /usr/sbin/nologin, /bin/false oder ein nicht vorhandener Pfad verhindert häufig die interaktive Anmeldung. Zusätzlich können Konto- oder Passwortsperren die Ursache sein. Den Status solltest du mit geeigneten Verwaltungswerkzeugen prüfen.
Dateien zeigen eine unbekannte numerische Eigentümer-ID
Ermittle die Zahlen mit:
ls -ln datei
getent passwd UID
getent group GID
Fehlt die Namensauflösung, existiert möglicherweise kein passender Eintrag mehr oder eine NSS-Quelle ist nicht erreichbar. Lege nicht vorschnell ein neues Konto mit derselben UID an, bevor Eigentum, Migration und Berechtigungsfolgen geklärt sind.
Nach einer manuellen Änderung treten Fehler auf
Eine typische Ursache ist eine Zeile mit nicht genau sieben durch Doppelpunkte getrennten Feldern oder ein ungültiger Feldwert. Die Feldanzahl kann beispielsweise so geprüft werden:
awk -F: 'NF != 7 { print FNR ": " $0 }' /etc/passwd
Danach sollten die Änderung über eine bekannte Sicherung oder mit vipw korrigiert und Home-Verzeichnis, UID, GID sowie Shell auf gültige Werte geprüft werden.
Prüfungsrelevante Zusammenfassung
- /etc/passwd ist eine lokale, textbasierte Kontendatenbank.
- Jede normale Kontenzeile enthält sieben durch Doppelpunkte getrennte Felder.
- Die UID identifiziert den Benutzer für Kernel, Eigentum und Berechtigungsprüfung.
- Die GID bezeichnet die primäre Gruppe; weitere Gruppen kommen meist aus /etc/group oder anderen NSS-Quellen.
xbedeutet normalerweise, dass Passwortinformationen in /etc/shadow liegen.- System- und Dienstkonten besitzen häufig keine interaktive Shell und kein normales Home-Verzeichnis.
cat /etc/passwdzeigt nur die lokale Datei, währendgetent passwddie NSS-Namensauflösung abfragt.- Konten sollten mit
useradd,usermod,userdelundpasswdverwaltet werden; für unvermeidbare manuelle Wartung istvipwgeeigneter als ein gewöhnlicher Editor.
Als nächster Schritt eignet sich die Vertiefung in /etc/passwd und seine Benutzerfelder, bevor du Passwortalterung, Gruppenverwaltung und NSS-Konfiguration untersuchst.