linux-security security passwords pam compliance nist bsi

Password Compliance: NIST & PAM (Artikel 326)

Umsetzung moderner Passwort-Richtlinien nach NIST- und BSI-Vorgaben. Erfahren Sie, wie Sie PAM-Module konfigurieren, um sichere Passwörter und robuste Account-Sperren zu erzwingen.

# Password Compliance: Moderne Richtlinien mit PAM umsetzen

TL;DR / Management Summary Veraltete Passwort-Regeln (“Ändere dein PW alle 30 Tage”, “Nutze Sonderzeichen”) werden durch moderne Standards wie NIST SP 800-63 ersetzt. Heute gilt: Länge schlägt Komplexität. In diesem Modul lernen wir, wie wir mit pam_pwquality und pam_faillock ein Compliance-konformes System aufbauen: 14+ Zeichen Mindestlänge, Sperre nach 5 Fehlversuchen und Schutz vor “Dictionary Attacks”. Wir verriegeln die Türen, bevor der Brute-Force-Angriff startet.


# 1. Einführung & Architektur

Die moderne Sicht auf Passwörter.

  • NIST/BSI Empfehlung: Lange Passwörter (Passphrasen) fördern, häufige Zwangs-Änderungen vermeiden (da User sonst nur Zahlen hochzählen).
  • PAM-Ebene: Wir schalten Filter in den auth und password Stack (Artikel 317).

# Die Sicherheits-Logik (Mermaid)

graph TD
    A[User: Change Password] --> B{PAM: pam_pwquality}
    B -->|Check: Length < 14| C[Reject: Too short]
    B -->|Check: Dictionary Word| D[Reject: Too simple]
    B -->|Check: Same as old| E[Reject: History match]
    B -->|Success| F[Update /etc/shadow]
    G[User: Login Attempt] --> H{PAM: pam_faillock}
    H -->|Count Failures| I{Attempts > 5?}
    I -->|Yes| J[Account Locked for 15m]
    I -->|No| K[Proceed to Auth]

# 2. Praxis: Passwort-Qualität (pam_pwquality)

Länge statt Rätselraten.

Konfigurieren Sie /etc/security/pwquality.conf:

minlen = 14
dcredit = 0
ucredit = 0
lcredit = 0
ocredit = 0
minclass = 3
# Vergleiche mit dem alten Passwort
difok = 4
# Wörterbuch-Check
dictcheck = 1
  • minclass = 3: Erfordert Zeichen aus 3 von 4 Klassen (Groß, Klein, Zahl, Sonder), aber die Länge ist mit 14 Zeichen das primäre Ziel.

# 3. Account Lockout (pam_faillock)

Brute-Force effektiv unterbinden.

Nutzen Sie pam_faillock (der moderne Nachfolger von pam_tally2).

# Konfiguration (/etc/pam.d/system-auth oder common-auth)

auth required pam_faillock.so preauth silent deny=5 unlock_time=900
auth [default=die] pam_faillock.so authfail deny=5 unlock_time=900
account required pam_faillock.so

Dies sperrt den Account nach 5 Fehlversuchen für 15 Minuten (900s).


# 4. Day-2 Operations: Den Status verwalten

Den Admin-Support entlasten.

# Gesperrte Accounts finden

# Zeigt alle fehlgeschlagenen Versuche systemweit
sudo faillock

# Einen Account manuell entsperren

Wenn sich der Chef ausgesperrt hat:

sudo faillock --user <username> --reset

# 5. Troubleshooting & “War Stories”

Wenn die Policy zu streng ist.

# Story 1: “Der Denial-of-Service durch Lockout”

Symptom: Ein kritischer Service-Account ist ständig gesperrt. Der Dienst (z.B. Backup) schlägt fehl. Ursache: Ein Angreifer kennt den Benutzernamen und schickt alle 15 Minuten absichtlich 5 falsche Passwörter. Lösung: Nutzen Sie für Service-Accounts SSH-Keys (Artikel 302) und deaktivieren Sie den Passwort-Login. PAM-Faillock greift bei Key-Authentifizierung nicht.

# Story 2: “Das unsichtbare Passwort-Limit”

Symptom: Ein User setzt ein Passwort mit 20 Zeichen, bekommt aber “Authentication failure”. Ursache: Ein altes System (oder ein Legacy-Algorithmus wie DES) nutzt nur die ersten 8 Zeichen des Passworts. Lösung: Stellen Sie sicher, dass in der /etc/login.defs modernste Hashing-Verfahren wie YESCRYPT aktiv sind (Artikel 287).


# 6. Fazit & Empfehlung

  • Länge: 14 Zeichen sind der neue Enterprise-Mindeststandard.
  • Dictionary: Aktivieren Sie den Wörterbuch-Check (cracklib), um triviale Passwörter wie Sommer2023! zu verhindern.
  • Monitoring: Integrieren Sie faillock Meldungen in Ihr Log-Monitoring, um Wellen von Brute-Force Angriffen zu erkennen.

# Anhang: Cheatsheet

Aufgabe Pfad / Befehl
Qualität-Konfig /etc/security/pwquality.conf
Lockout Status faillock
Lockout Reset faillock --user <name> --reset
Login Defaults /etc/login.defs
Passwort-Historie /etc/security/opasswd (Rechte 600!)
Test Passwort `echo “pass”
PAM Debugging journalctl -u systemd-logind