===== 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: @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 ==== Siehe auch ==== * [[sammlung:benutzerverwaltung|Benutzerverwaltung]] * [[sammlung:sudo|sudo]] * [[sammlung:ssh|SSH]] * [[sammlung:systemd|systemd]] * [[sammlung:security|Linux Sicherheit]] * [[sammlung:wichtige_konfigurationsdateien|Wichtige Konfigurationsdateien]] ---- {{tag>cli security advanced}} ----