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_pwqualityundpam_faillockein 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
authundpasswordStack (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 wieSommer2023!zu verhindern. - Monitoring: Integrieren Sie
faillockMeldungen 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 |