VMware ESXi and vSphere Cluster Management
Die Datei /etc/shadow unter Linux verstehen
Aufbau und Felder von /etc/shadow verstehen: Passwort-Hashes, Zugriffsrechte, Passwortalterung, Ablaufdaten und Verwaltung mit chage, passwd und getent.
/etc/shadow ist eine geschützte lokale Linux-Datei mit Passwort-Hashes sowie Angaben zur Passwortalterung und Kontogültigkeit. Sie gehört zu den wichtigsten Dateien für die Verwaltung lokaler Benutzerkonten.
In diesem Beitrag lernst du den Aufbau einer Shadow-Zeile, die Bedeutung aller Felder, die Unterschiede zwischen Passwort- und Kontoablauf sowie die sichere Verwaltung mit Standardwerkzeugen kennen.
Zweck von /etc/shadow
Ein lokales Benutzerkonto verteilt seine Informationen typischerweise auf mehrere Dateien:
- /etc/passwd enthält die Benutzeridentität und allgemeine Kontoinformationen, zum Beispiel Benutzername, numerische Benutzer-ID, primäre Gruppen-ID, Beschreibung, Home-Verzeichnis und Login-Shell.
- /etc/shadow enthält sensible passwortbezogene Daten: den Passwort-Hash und Werte für Passwortalterung und Kontogültigkeit.
Bei Shadow-Passwörtern steht in /etc/passwd im Passwortfeld meist nur ein Platzhalter wie x. Der eigentliche Prüfwert liegt in /etc/shadow.
Ein Passwort wird dort nicht entschlüsselbar gespeichert. Stattdessen wird aus dem Passwort ein Passwort-Hash berechnet. Beim Anmelden wird das eingegebene Passwort erneut verarbeitet und das Ergebnis mit dem gespeicherten Prüfwert verglichen. Ein Hash ist keine Verschlüsselung und soll nicht in das ursprüngliche Passwort zurückrechenbar sein.
Für lokale Konten ist /etc/shadow meist die maßgebliche Datei. Zentrale Identitätsdienste können jedoch andere Datenquellen verwenden.
Sicherheits- und Zugriffsmodell
Normale Benutzer dürfen /etc/shadow üblicherweise nicht lesen. Die Datei gehört meist root und besitzt restriktive Berechtigungen. Administrative Prüfungen erfolgen mit sudo oder in einer Root-Shell.
Diese Einschränkung schützt die Hashes vor Offline-Angriffen. Besitzt ein Angreifer eine Kopie der Datei, kann er unabhängig vom Login-Dienst viele Passwortkandidaten ausprobieren und deren Hashes vergleichen. Moderne Hash-Verfahren und individuelle Salts erschweren solche Angriffe, ersetzen aber nicht die Zugriffsbeschränkung.
Ändere die Dateiberechtigungen nicht einfach, um einen Lesefehler zu umgehen. Verwende gezielte, privilegierte Werkzeuge und zeige möglichst nur den benötigten Datensatz.
Das Datensatzformat
Eine Benutzerzeile besteht in der Regel aus neun durch Doppelpunkte getrennten Feldern:
benutzername:passwort:lastchg:min:max:warn:inactive:expire:reserved
Eine fiktive und künstlich erzeugte Beispielzeile lautet:
bob:$6$BEISPIEL_SALT$KUNSTLICHER_HASH:20500:0:30:7:14:20819:
Der dargestellte Hash ist absichtlich kein echter Anmeldewert. Die leeren Felder am Ende sind trotzdem relevant: Ein leerer Wert ist eine Konfiguration und nicht dasselbe wie die Zahl 0.
Felder einer /etc/shadow-Zeile
| Position | Feldname | Beispielwert | Bedeutung | Einheit oder Format | Wichtige Sonderwerte |
|---|---|---|---|---|---|
| 1 | Benutzername | bob | Name des Kontos | Text | Darf nicht beliebig mit anderen Konten kollidieren |
| 2 | Passwortfeld | $6$... | Passwort-Hash oder Statusmarkierung | Hashformat oder Sonderwert | ! oder * sperrt üblicherweise die Passwortanmeldung; leer bedeutet kein gespeicherter Passwortwert |
| 3 | lastchg | 20500 | Tag der letzten Passwortänderung | Tage seit 1. Januar 1970 | Leer oder distributionsabhängige Sonderwerte können besondere Regeln auslösen |
| 4 | min | 0 | Mindestabstand zwischen Passwortänderungen | Tage | 0 erlaubt eine sofortige erneute Änderung |
| 5 | max | 30 | Maximale Passwortgültigkeit | Tage | Sehr große Werte wie 99999 bedeuten in vielen Konfigurationen praktisch keinen Ablauf |
| 6 | warn | 7 | Vorwarnzeit vor dem Passwortablauf | Tage | 0 bedeutet keine Vorwarnfrist |
| 7 | inactive | 14 | Frist nach Passwortablauf bis zur Sperrung wegen Inaktivität | Tage | Leer bedeutet keine explizite zusätzliche Frist; die tatsächliche Wirkung ist richtlinienabhängig |
| 8 | expire | 20819 | Fester Ablauf des Benutzerkontos | Tag seit 1. Januar 1970 | Leer bedeutet normalerweise kein festes Ablaufdatum |
| 9 | Reserviertes Feld | leer | Für künftige Verwendung reserviert | Text | Normalerweise leer lassen |
Passwortfeld, Hash und Salt
Ein moderner Hash-Eintrag enthält häufig Komponenten in einer Form wie:
$6$SALT$HASHWERT
- Das erste Zeichen
$leitet die strukturierte Darstellung ein. 6ist in diesem Beispiel eine Kennzeichnung für das verwendete Hash-Verfahren.SALTist ein zufälliger Zusatzwert. Gleiche Passwörter erzeugen dadurch nicht automatisch denselben gespeicherten Eintrag. Außerdem werden vorberechnete Tabellen erschwert.HASHWERTist das Ergebnis der Hash-Berechnung.
Die genaue Syntax hängt vom verwendeten Verfahren und der Distribution ab. Der Salt ist kein Geheimnis, der gesamte Eintrag muss aber trotzdem geschützt werden.
Sonderzustände des Passwortfelds
- Ein Präfix wie
!oder*kennzeichnet üblicherweise ein gesperrtes oder für Passwortanmeldung unbrauchbares Passwort. Werkzeuge können das Präfix vor einen vorhandenen Hash setzen. - Ein leeres Passwortfeld bedeutet, dass kein Passwort-Hash gespeichert ist. Ob und wie eine Anmeldung ohne Passwort akzeptiert wird, hängt von PAM, der Distribution und der jeweiligen Dienstkonfiguration ab. Ein leeres Feld ist daher sicherheitstechnisch besonders kritisch.
- Ein ungewöhnlicher Sonderwert sollte mit dem verwendeten Verwaltungswerkzeug und der Dokumentation der Distribution geprüft werden. Die Details sind nicht in jeder Umgebung identisch.
Ein gesperrtes Passwort verhindert normalerweise die passwortbasierte Anmeldung. Andere Verfahren, etwa SSH-Schlüssel oder eine zentrale Anmeldung, müssen separat bewertet werden.
Passwortalterung und Kontogültigkeit
Die Felder lastchg, min, max, warn, inactive und expire verwenden meist ganze Tage seit der Unix Epoch, also seit dem 1. Januar 1970.
Zeitliche Reihenfolge
- Letzte Änderung:
lastchgbezeichnet den Tag, an dem das Passwort zuletzt geändert wurde. - Mindestalter: Vor Ablauf von
minTagen darf es normalerweise nicht erneut geändert werden. Beimin=0gibt es keine Wartezeit. - Warnphase: Ab dem Passwortablauf minus
warnTagen warnt der Anmeldedienst typischerweise vor dem bevorstehenden Ablauf. - Passwortablauf: Nach
maxTagen gilt das Passwort als abgelaufen. Das ist zunächst nicht dasselbe wie ein abgelaufenes Benutzerkonto. - Inaktivitätsphase: Nach dem Passwortablauf kann
inactivenoch eine begrenzte Frist gelten. Danach wird die Anmeldung wegen des abgelaufenen Passworts gesperrt. - Kontoablauf:
expirebezeichnet einen festen Kalendertag. Nach diesem Datum ist das Konto unabhängig von der Passwortgültigkeit abgelaufen.
| Mechanismus | Auslöser | Auswirkung | Relevantes Shadow-Feld | Typische Verwaltungsoption |
|---|---|---|---|---|
| Passwortwarnung | Der Ablauf liegt innerhalb der Warnfrist | Der Benutzer erhält eine Warnung | warn | chage -W |
| Passwortablauf | Die maximale Passwortdauer ist erreicht | Das Passwort muss typischerweise geändert werden | lastchg, max | chage -M |
| Inaktivität nach Passwortablauf | Die zusätzliche Frist ist verstrichen | Anmeldung wegen abgelaufenem Passwort wird gesperrt | inactive | chage -I |
| Fester Kontoablauf | Das Kalenderdatum des Kontos ist erreicht | Das Konto ist abgelaufen, unabhängig vom Passwort | expire | chage -E |
Ein Höchstalter wie 99999 wird in vielen Linux-Konfigurationen als praktische Konvention für ein nicht ablaufendes Passwort verwendet. Das ist keine universelle mathematische Spezialbedeutung; die konkrete Durchsetzung übernehmen die Systemwerkzeuge und PAM-Regeln.
Beispielzeile vollständig interpretieren
Betrachte erneut:
bob:$6$BEISPIEL_SALT$KUNSTLICHER_HASH:20500:0:30:7:14:20819:
- Benutzername: Das Konto heißt
bob. - Passwortfeld: Es enthält einen künstlichen Eintrag mit Verfahren-Kennung, Salt und Hashwert. Das Feld ist nicht mit
!oder*präfixiert. - lastchg: Der Wert
20500entspricht dem 16. Februar 2026. - min: Mit
0darf Bob das Passwort jederzeit erneut ändern. - max: Mit
30läuft das Passwort 30 Tage nach dem Änderungsdatum ab, also am 18. März 2026. - warn: Die Warnung beginnt sieben Tage vorher, am 11. März 2026.
- inactive: Nach dem Passwortablauf gilt eine Frist von 14 Tagen. Die Sperrung wegen Inaktivität wäre damit ungefähr ab dem 1. April 2026 zu erwarten; die genaue Grenzbehandlung hängt vom verwendeten Dienst ab.
- expire: Der Wert
20819entspricht dem 1. Januar 2027. Ab diesem festen Datum ist das Konto abgelaufen, selbst wenn das Passwort vorher erneuert wurde. - Reserviertes Feld: Es ist leer.
Administration mit Standardwerkzeugen
Shadow-Eintrag gezielt anzeigen
sudo getent shadow bob
getent fragt die konfigurierte Name-Service-Switch-Kette ab. Die Antwort muss deshalb nicht zwingend aus einer lokalen Datei stammen. Die Ausgabe enthält sensible Daten und darf nicht weitergegeben werden.
Status und Alterung prüfen
sudo passwd -S bob
sudo chage -l bob
passwd -S liefert einen kompakten Passwortstatus. chage -l ist für die Diagnose meist besser geeignet, weil es die Tageswerte in lesbare Datumsangaben übersetzt.
Regeln ändern
sudo chage -M 30 -W 7 bob
sudo chage -I 14 bob
sudo chage -E 2026-12-31 bob
Der erste Befehl setzt eine maximale Passwortdauer von 30 Tagen und eine Warnfrist von sieben Tagen. Der zweite setzt eine Inaktivitätsfrist von 14 Tagen nach dem Passwortablauf. Der dritte setzt den festen Kontoablauf auf den 31. Dezember 2026.
Passwort ändern oder sperren
sudo passwd bob
sudo passwd -l bob
passwd ist primär zum Ändern eines Passworts und zum Prüfen bestimmter Passwortstatusinformationen gedacht. passwd -l sperrt die passwortbasierte Anmeldung, indem das Passwortfeld entsprechend verändert wird.
chage verwaltet Alterungs- und Ablaufwerte. usermod ist für allgemeine Kontoeigenschaften wie Gruppenmitgliedschaften, Login-Shell oder Kontosperrung geeignet. Nutze für Passwortalterung bevorzugt chage, für Passwortänderungen passwd und für allgemeine Kontomodellierung usermod.
| Ziel | Befehl | Benötigte Rechte | Hinweis |
|---|---|---|---|
| Shadow-Eintrag über die Namensdienstsuche abrufen | sudo getent shadow bob | Administrativ | Kann lokale oder zentrale Datenquellen abfragen |
| Passwortstatus prüfen | sudo passwd -S bob | Administrativ oder je nach System eingeschränkt | Kompakte Statusanzeige |
| Ablaufdaten anzeigen | sudo chage -l bob | Administrativ | Lesbare Datumswerte statt Epoch-Tage |
| Passwortalter setzen | sudo chage -M 30 -W 7 bob | Administrativ | Maximalalter und Warnfrist setzen |
| Kontoablauf setzen | sudo chage -E 2026-12-31 bob | Administrativ | Fester Ablauf des Kontos, nicht nur des Passworts |
Fehlerdiagnose
Permission denied beim Lesen
Für einen nicht privilegierten Benutzer ist das erwartetes Verhalten. Verwende für eine berechtigte Prüfung sudo und ein gezieltes Werkzeug wie getent oder chage. Lockere die Dateiberechtigungen nicht.
Anmeldung nach längerer Zeit nicht möglich
sudo chage -l bob
sudo passwd -S bob
Prüfe getrennt, ob das Passwort abgelaufen ist, die Inaktivitätsfrist verstrichen ist oder ein festes Kontoablaufdatum erreicht wurde. Wenn die Werte keinen eindeutigen Grund zeigen, untersuche die PAM-Protokolle und den tatsächlich verwendeten Anmeldedienst. Bei berechtigtem Bedarf kann ein Administrator das Passwort zurücksetzen oder die Alterungswerte gezielt anpassen.
Passwortfeld beginnt mit ! oder *
Das deutet üblicherweise auf eine gesperrte oder nicht für Passwortanmeldung nutzbare Anmeldung hin. Prüfe den Status mit passwd -S. Ändere den Status nur nach einer Berechtigungs- und Zugangsprüfung, damit kein administrativer Zugang verloren geht.
Eintrag in /etc/passwd, aber kein erwarteter lokaler Shadow-Eintrag
Das Konto kann aus LDAP, Active Directory, SSSD oder einem anderen zentralen Identitätsdienst stammen. Prüfe die NSS- und PAM-Konfiguration. Die Passwort- und Ablaufverwaltung muss dann im zuständigen zentralen System erfolgen.
Grenzen und moderner Kontext
/etc/shadow beschreibt vor allem lokale Konten. In Unternehmensumgebungen können LDAP, Active Directory, SSSD, Kerberos oder andere Identitätsdienste Benutzer, Hashes, Richtlinien und Ablaufdaten bereitstellen.
PAM bedeutet Pluggable Authentication Modules. Dieses Framework bindet Authentifizierungs- und Kontoregeln in viele Linux-Dienste ein. Die Distribution, die PAM-Konfiguration und der konkrete Dienst beeinflussen daher, wie Ablauf, Sperrung und alternative Anmeldeverfahren tatsächlich durchgesetzt werden.
Ein SSH-Schlüssel, eine Kerberos-Anmeldung oder eine zentrale Identität kann von der lokalen Passwortsperre unabhängig sein. Prüfe bei Änderungen immer den gesamten gewünschten Zugangsweg.
Prüfungsrelevante Merksätze
/etc/passwdbeschreibt überwiegend Identität und Kontoumgebung;/etc/shadowschützt Passwort- und Alterungsdaten.- Passwörter werden als Hashes, nicht als entschlüsselbare Klartexte gespeichert.
- Shadow-Felder mit Datumsbezug zählen meist Tage seit dem 1. Januar 1970.
min=0bedeutet: keine Wartezeit bis zur nächsten Passwortänderung.warnbetrifft die Vorwarnung,inactivedie Zeit nach dem Passwortablauf undexpireden festen Ablauf des Kontos.- Für lesbare Ablaufdiagnosen ist
chage -lmeist geeigneter als das manuelle Lesen der Datei. - Ein Eintrag aus
getentmuss nicht aus/etc/shadowstammen, weil NSS zentrale Quellen einbeziehen kann.
Weitere Zusammenhänge findest du im Beitrag zur Datei /etc/shadow.