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

PositionFeldnameBeispielwertBedeutungEinheit oder FormatWichtige Sonderwerte
1BenutzernamebobName des KontosTextDarf nicht beliebig mit anderen Konten kollidieren
2Passwortfeld$6$...Passwort-Hash oder StatusmarkierungHashformat oder Sonderwert! oder * sperrt üblicherweise die Passwortanmeldung; leer bedeutet kein gespeicherter Passwortwert
3lastchg20500Tag der letzten PasswortänderungTage seit 1. Januar 1970Leer oder distributionsabhängige Sonderwerte können besondere Regeln auslösen
4min0Mindestabstand zwischen PasswortänderungenTage0 erlaubt eine sofortige erneute Änderung
5max30Maximale PasswortgültigkeitTageSehr große Werte wie 99999 bedeuten in vielen Konfigurationen praktisch keinen Ablauf
6warn7Vorwarnzeit vor dem PasswortablaufTage0 bedeutet keine Vorwarnfrist
7inactive14Frist nach Passwortablauf bis zur Sperrung wegen InaktivitätTageLeer bedeutet keine explizite zusätzliche Frist; die tatsächliche Wirkung ist richtlinienabhängig
8expire20819Fester Ablauf des BenutzerkontosTag seit 1. Januar 1970Leer bedeutet normalerweise kein festes Ablaufdatum
9Reserviertes FeldleerFür künftige Verwendung reserviertTextNormalerweise 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.
  • 6 ist in diesem Beispiel eine Kennzeichnung für das verwendete Hash-Verfahren.
  • SALT ist ein zufälliger Zusatzwert. Gleiche Passwörter erzeugen dadurch nicht automatisch denselben gespeicherten Eintrag. Außerdem werden vorberechnete Tabellen erschwert.
  • HASHWERT ist 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

  1. Letzte Änderung: lastchg bezeichnet den Tag, an dem das Passwort zuletzt geändert wurde.
  2. Mindestalter: Vor Ablauf von min Tagen darf es normalerweise nicht erneut geändert werden. Bei min=0 gibt es keine Wartezeit.
  3. Warnphase: Ab dem Passwortablauf minus warn Tagen warnt der Anmeldedienst typischerweise vor dem bevorstehenden Ablauf.
  4. Passwortablauf: Nach max Tagen gilt das Passwort als abgelaufen. Das ist zunächst nicht dasselbe wie ein abgelaufenes Benutzerkonto.
  5. Inaktivitätsphase: Nach dem Passwortablauf kann inactive noch eine begrenzte Frist gelten. Danach wird die Anmeldung wegen des abgelaufenen Passworts gesperrt.
  6. Kontoablauf: expire bezeichnet einen festen Kalendertag. Nach diesem Datum ist das Konto unabhängig von der Passwortgültigkeit abgelaufen.
MechanismusAuslöserAuswirkungRelevantes Shadow-FeldTypische Verwaltungsoption
PasswortwarnungDer Ablauf liegt innerhalb der WarnfristDer Benutzer erhält eine Warnungwarnchage -W
PasswortablaufDie maximale Passwortdauer ist erreichtDas Passwort muss typischerweise geändert werdenlastchg, maxchage -M
Inaktivität nach PasswortablaufDie zusätzliche Frist ist verstrichenAnmeldung wegen abgelaufenem Passwort wird gesperrtinactivechage -I
Fester KontoablaufDas Kalenderdatum des Kontos ist erreichtDas Konto ist abgelaufen, unabhängig vom Passwortexpirechage -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 20500 entspricht dem 16. Februar 2026.
  • min: Mit 0 darf Bob das Passwort jederzeit erneut ändern.
  • max: Mit 30 lä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 20819 entspricht 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.

ZielBefehlBenötigte RechteHinweis
Shadow-Eintrag über die Namensdienstsuche abrufensudo getent shadow bobAdministrativKann lokale oder zentrale Datenquellen abfragen
Passwortstatus prüfensudo passwd -S bobAdministrativ oder je nach System eingeschränktKompakte Statusanzeige
Ablaufdaten anzeigensudo chage -l bobAdministrativLesbare Datumswerte statt Epoch-Tage
Passwortalter setzensudo chage -M 30 -W 7 bobAdministrativMaximalalter und Warnfrist setzen
Kontoablauf setzensudo chage -E 2026-12-31 bobAdministrativFester 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/passwd beschreibt überwiegend Identität und Kontoumgebung; /etc/shadow schü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=0 bedeutet: keine Wartezeit bis zur nächsten Passwortänderung.
  • warn betrifft die Vorwarnung, inactive die Zeit nach dem Passwortablauf und expire den festen Ablauf des Kontos.
  • Für lesbare Ablaufdiagnosen ist chage -l meist geeigneter als das manuelle Lesen der Datei.
  • Ein Eintrag aus getent muss nicht aus /etc/shadow stammen, weil NSS zentrale Quellen einbeziehen kann.

Weitere Zusammenhänge findest du im Beitrag zur Datei /etc/shadow.