PAM: Pluggable Authentication Modules (Artikel 317)
Beherrschung des Linux PAM-Systems. Erfahren Sie alles über modulare Authentifizierung, die Konfiguration von Zugriffsberechtigungen und das Härten von Logins mittels Account-Sperren.
# PAM Mastery: Das Rückgrat der Linux-Authentifizierung
TL;DR / Management Summary Jedes Mal, wenn Sie nach einem Passwort gefragt werden (SSH, Sudo, Konsole), entscheidet PAM (Pluggable Authentication Modules), ob Sie rein dürfen. Es ist ein modulares System, das es erlaubt, Authentifizierungs-Methoden (Passwort, Fingerabdruck, 2FA) zu tauschen, ohne die Applikation zu ändern. Ein Senior Admin nutzt PAM, um Passwort-Komplexität zu erzwingen, Fehlversuche zu blockieren (Account Lockout) und Sitzungslimits (z.B. maximale Logins) zu setzen.
# 1. Einführung & Architektur
Die vier Säulen von PAM.
PAM-Konfigurationen liegen unter /etc/pam.d/ und sind in vier Bereiche unterteilt:
- auth: Identitätsprüfung (Bist du es?).
- account: Gültigkeitsprüfung (Darfst du gerade rein? Ist das PW abgelaufen?).
- password: Passwort-Management (Wie ändere ich das PW?).
- session: Sitzungs-Vorbereitung (Mounten von Homes, Logging, Limits).
# Die Verarbeitungs-Kette (Mermaid)
graph TD
A[App: sshd] --> B[PAM Stack /etc/pam.d/sshd]
B --> C{auth: pam_unix.so}
C -->|Success| D{account: pam_time.so}
D -->|Allowed| E{session: pam_mkhomedir.so}
E --> F[Access Granted]
C -->|Fail| G[Deny Access]
D -->|Outside Working Hours| G
# 2. Wichtige Module im Enterprise-Einsatz
Den Schutz schärfen.
# 1. pam_pwquality.so (Komplexität)
Erzwingt starke Passwörter.
# In /etc/pam.d/common-password
password requisite pam_pwquality.so retry=3 minlen=14 difok=3 ucredit=-1
minlen=14: Mindestens 14 Zeichen.ucredit=-1: Mindestens ein Großbuchstabe.
# 2. pam_faillock.so (Account Lockout)
Blockiert den Account nach X Fehlversuchen (ersetzt das alte pam_tally2).
# In /etc/pam.d/system-auth (RHEL)
auth required pam_faillock.so preauth silent audit deny=5 unlock_time=900
# 3. Day-2 Operations: Sitzungs-Limits
Ressourcen schützen.
Nutzen Sie pam_limits.so, um zu verhindern, dass ein User das System lahmlegt.
Die eigentlichen Limits liegen in /etc/security/limits.conf.
# Beispiel: Max Prozesse für User
@developers hard nproc 2000
@developers soft nproc 1000
# 4. Troubleshooting & “War Stories”
Wenn PAM das System aussperrt.
# Story 1: “Der Root-Lockout durch Syntax-Fehler”
Symptom: Der Admin ändert eine Zeile in common-auth. Danach schlägt jedes sudo und jeder Login fehl. Der Root-Zugriff ist verloren.
Ursache: Ein Tippfehler in einem required Modul. PAM bricht die Kette sofort ab.
Lösung: Nutzen Sie die Proxmox-Konsole. Wenn Sie noch eine Sitzung offen haben: Schließen Sie diese niemals, bevor Sie den Login in einem zweiten Fenster getestet haben. Falls alles zu spät ist: Booten Sie mit init=/bin/bash (Artikel 012).
# Story 2: “Das hängende Home-Directory”
Symptom: Logins via SSH dauern 30 Sekunden, brechen dann ab oder klappen erst beim zweiten Versuch.
Ursache: pam_mount.so versucht, ein verschlüsseltes Home oder einen NFS-Share zu mounten, der nicht erreichbar ist.
Lösung: Prüfen Sie die Timeouts in der /etc/security/pam_mount.conf.xml und stellen Sie sicher, dass Netzwerk-Mounts das Flag soft nutzen.
# 5. Fazit & Empfehlung
- Sicherheit: Nutzen Sie
pam_faillock. Es ist der effektivste Schutz gegen langsame, gezielte Brute-Force Angriffe, die Fail2Ban evtl. übersieht. - Wartung: Ändern Sie niemals Dateien unter
/etc/pam.d/direkt, wenn Ihre Distribution Tools dafür bietet (z.B.authselectin RHEL oderpam-auth-updatein Debian). - Audit: Kontrollieren Sie regelmäßig
/var/log/auth.logoder/var/log/secureauf PAM-Fehlermeldungen.
# Anhang: Cheatsheet
| Aufgabe | Pfad / Modul |
|---|---|
| Haupt-Configs | /etc/pam.d/ |
| Passwort-Limits | /etc/security/pwquality.conf |
| Ressourcen-Limits | /etc/security/limits.conf |
| Fehlgeschlagene Logins | faillock --user <name> |
| Login entsperren | faillock --user <name> --reset |
| Logins zu Zeiten | pam_time.so (/etc/security/time.conf) |
| Home-Dir erstellen | pam_mkhomedir.so |
| Sudo mit Fingerabdruck | pam_fprintd.so |