Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
PAM - Pluggable Authentication Modules
PAM (Pluggable Authentication Modules) ist ein flexibles Framework zur zentralen Authentifizierung unter Linux. Es ermöglicht Systemadministratoren, die Authentifizierungsmethoden für verschiedene Dienste einheitlich zu konfigurieren, ohne die Anwendungen selbst zu ändern.
Voraussetzungen
- Root-Rechte für die Konfiguration
- Grundkenntnisse in Linux-Systemadministration
- Vorsicht beim Bearbeiten: Fehlerhafte PAM-Konfiguration kann System-Login verhindern
Aufbau und Struktur
Konfigurationsverzeichnisse
| Verzeichnis | Beschreibung |
|---|---|
| /etc/pam.d/ | Konfigurationsdateien für einzelne Dienste |
| /lib/security/ | PAM-Module (*.so Dateien) |
| /etc/security/ | Zusätzliche Konfigurationsdateien für Module |
PAM-Modultypen
PAM unterscheidet vier Modultypen, die in jeder Dienst-Konfiguration definiert werden können:
| Typ | Funktion |
|---|---|
| auth | Authentifizierung - prüft Identität (z.B. Passwort) |
| account | Account-Management - prüft ob Zugriff erlaubt ist (z.B. Zeitbeschränkungen) |
| password | Passwort-Management - ändert Authentifizierungsdaten |
| session | Session-Management - Aktionen vor/nach Login (z.B. Home mounten) |
Control Flags
| Flag | Bedeutung |
|---|---|
| required | Muss erfolgreich sein, Prüfung wird aber fortgesetzt |
| requisite | Muss erfolgreich sein, bei Fehler sofortiger Abbruch |
| sufficient | Bei Erfolg ist Authentifizierung erfolgreich (wenn keine vorherigen required fehlschlugen) |
| optional | Erfolg wird nur bei fehlen anderer Module relevant |
| include | Bindet andere PAM-Konfiguration ein |
Wichtige PAM-Module
pam_unix.so
Standard-Unix-Authentifizierung über /etc/passwd und /etc/shadow
auth required pam_unix.so nullok account required pam_unix.so password required pam_unix.so sha512 shadow session required pam_unix.so
pam_limits.so
Setzt Ressourcen-Limits für Benutzer (konfiguriert in /etc/security/limits.conf)
session required pam_limits.so
pam_deny.so / pam_permit.so
# Verweigert immer den Zugriff auth required pam_deny.so # Erlaubt immer den Zugriff (VORSICHT!) auth required pam_permit.so
pam_wheel.so
Beschränkt su-Zugriff auf Mitglieder der wheel-Gruppe
auth required pam_wheel.so use_uid
pam_faillock.so
Sperrt Account nach mehreren Fehlversuchen
auth required pam_faillock.so preauth auth required pam_faillock.so authfail account required pam_faillock.so
pam_tally2 / pam_faildelay.so
Verzögert Login nach Fehlversuchen
auth required pam_faildelay.so delay=2000000
Beispiel-Konfigurationen
SSH-Dienst (/etc/pam.d/sshd)
# PAM-Konfiguration für SSH auth required pam_env.so auth required pam_unix.so account required pam_nologin.so account required pam_unix.so password required pam_unix.so sha512 shadow session required pam_limits.so session required pam_unix.so
Login-Dienst (/etc/pam.d/login)
auth required pam_securetty.so auth requisite pam_nologin.so auth required pam_unix.so nullok account required pam_unix.so password required pam_unix.so sha512 shadow session required pam_limits.so session required pam_unix.so session optional pam_lastlog.so
sudo mit Authentifizierung (/etc/pam.d/sudo)
auth required pam_env.so auth required pam_unix.so account required pam_unix.so session required pam_limits.so session required pam_unix.so
Praktische Anwendungsfälle
Account-Sperrung bei Fehlversuchen
Konfiguration in /etc/pam.d/system-auth oder /etc/pam.d/common-auth:
auth required pam_faillock.so preauth silent deny=3 unlock_time=600 auth [default=die] pam_faillock.so authfail deny=3 unlock_time=600 account required pam_faillock.so
Account entsperren:
# Manuelle Entsperrung sudo faillock --user username --reset
Ressourcen-Limits setzen
In /etc/security/limits.conf:
# Format: <domain> <type> <item> <value> @student hard nproc 100 @student soft cpu 30 @developers hard nofile 4096 * soft core 0
Aktivierung in /etc/pam.d/common-session:
session required pam_limits.so
Zeitbasierter Zugriff
Konfiguration in /etc/security/time.conf:
# Format: services;ttys;users;times login;*;!root;!Al0800-1800 sshd;*;students;Wk0800-2000
Aktivierung in /etc/pam.d/login:
account required pam_time.so
Zwei-Faktor-Authentifizierung mit Google Authenticator
# Installation sudo apt install libpam-google-authenticator # Benutzer richtet 2FA ein google-authenticator
Konfiguration in /etc/pam.d/sshd:
auth required pam_google_authenticator.so auth required pam_unix.so
In /etc/ssh/sshd_config:
ChallengeResponseAuthentication yes
Wichtige Befehle
PAM-Konfiguration testen
# PAM-Module anzeigen sudo pam-auth-update --package # Faillock-Status prüfen sudo faillock --user username # Limits für Benutzer anzeigen ulimit -a # Aktive PAM-Sessions anzeigen loginctl list-sessions
Logs analysieren
# PAM-bezogene Log-Einträge sudo journalctl -u systemd-logind | grep pam sudo grep pam /var/log/auth.log sudo grep "authentication failure" /var/log/secure
Troubleshooting
| Problem | Lösung |
|---|---|
| Login nicht mehr möglich | Boot mit init=/bin/bash, remount rw, PAM-Konfiguration korrigieren |
| PAM-Modul nicht gefunden | Modulpfad prüfen, meist /lib/security/ oder /lib64/security/ |
| Faillock greift nicht | Reihenfolge der Module prüfen, preauth vor unix.so |
| Limits werden nicht angewendet | pam_limits.so in session-Bereich aktivieren |
| 2FA funktioniert nicht | SELinux/AppArmor prüfen, SSH ChallengeResponse aktivieren |
Notfall-Recovery
# System im Single-User-Mode booten # Bei GRUB: 'e' drücken, an kernel-Zeile anfügen: init=/bin/bash # Im Notfall-System: mount -o remount,rw / nano /etc/pam.d/system-auth # oder betroffene Datei korrigieren sync reboot -f
Sicherheitshinweise
- Backup erstellen: Immer vor PAM-Änderungen Backups erstellen
- Offene Session behalten: Bei Remote-Änderungen SSH-Session offen lassen zum Testen
- Schrittweise testen: Erst in Testumgebung, dann produktiv
- Root-Zugang sichern: Nie alle Authentifizierungswege gleichzeitig ändern
- Logs überwachen: Nach Änderungen /var/log/auth.log oder /var/log/secure prüfen
- pam_permit.so vermeiden: Nur in Ausnahmefällen und niemals produktiv
Best Practices
- Zentrale Konfiguration nutzen: common-auth, common-account, etc. verwenden
- include statt copy: Gemeinsame Einstellungen per include einbinden
- Dokumentation: Änderungen kommentieren
- Faillock aktivieren: Schutz vor Brute-Force-Angriffen
- Starke Passwörter erzwingen: pam_pwquality.so verwenden
- Limits setzen: Ressourcen-Limits für alle Benutzer definieren
