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.

PositionFeldBeispielwertBedeutungWichtige Hinweise
1BenutzernamealiceTextbasierter Name des KontosZur Anmeldung und Namensauflösung verwendet; lokal eindeutig
2PasswortfeldxVerweis beziehungsweise Status der PasswortanmeldungPasswort-Hashes liegen normalerweise in /etc/shadow
3UID1001Numerische BenutzerkennungMaßgeblich für Eigentum und Berechtigungsprüfung
4GID1001Numerische Kennung der primären GruppeWeitere Gruppen werden meist über /etc/group aufgelöst
5GECOS/KommentarAlice BeispielOptionale beschreibende KontodatenKann vollständigen Namen, Büro oder Kontaktangaben enthalten
6Home-Verzeichnis/home/aliceStandardarbeitsverzeichnisÜblicher Speicherort persönlicher Dateien und Konfigurationen
7Login-Shell/bin/bashProgramm für eine interaktive AnmeldungKann 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 BedeutungSicherheits- und Praxisnotiz
xPasswort-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/nologin verweigert normalerweise eine interaktive Sitzung mit einer erklärenden Meldung.
  • /bin/false beendet 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/shadow bezogen.
  • 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/nologin oder /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.

MerkmalReguläres BenutzerkontoDienst- oder Systemkonto
Home-VerzeichnisMeist vorhandenes Verzeichnis wie /home/aliceOft kein reguläres Home-Verzeichnis; manchmal ein spezielles Dienstverzeichnis
Login-ShellInteraktive Shell wie /bin/bash oder eine andere Benutzer-ShellHäufig /usr/sbin/nologin oder /bin/false
Interaktive AnmeldungNormalerweise vorgesehenNormalerweise nicht vorgesehen
Typischer EinsatzzweckArbeit einer PersonAusführung eines Dienstes oder einer Systemfunktion
UID-VergabeGemäß Benutzerbereich und lokaler RichtlinieHäufig niedrige oder reservierte UID; Bereich ist distributionsabhängig

Beispiel eines Dienstkontos

websvc:x:995:995:Webdienst:/nonexistent:/usr/sbin/nologin
  • websvc bezeichnet das Dienstkonto.
  • /nonexistent zeigt, dass kein nutzbares Home-Verzeichnis vorgesehen sein kann.
  • /usr/sbin/nologin verhindert 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.

  1. getent passwd benutzer ausführen.
  2. Den passwd-Eintrag in /etc/nsswitch.conf prüfen.
  3. 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.
  • x bedeutet normalerweise, dass Passwortinformationen in /etc/shadow liegen.
  • System- und Dienstkonten besitzen häufig keine interaktive Shell und kein normales Home-Verzeichnis.
  • cat /etc/passwd zeigt nur die lokale Datei, während getent passwd die NSS-Namensauflösung abfragt.
  • Konten sollten mit useradd, usermod, userdel und passwd verwaltet werden; für unvermeidbare manuelle Wartung ist vipw geeigneter 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.