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.
| 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 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) |
| 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 |
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
Setzt Ressourcen-Limits für Benutzer (konfiguriert in /etc/security/limits.conf)
session required pam_limits.so
# Verweigert immer den Zugriff auth required pam_deny.so # Erlaubt immer den Zugriff (VORSICHT!) auth required pam_permit.so
Beschränkt su-Zugriff auf Mitglieder der wheel-Gruppe
auth required pam_wheel.so use_uid
Sperrt Account nach mehreren Fehlversuchen
auth required pam_faillock.so preauth auth required pam_faillock.so authfail account required pam_faillock.so
Verzögert Login nach Fehlversuchen
auth required pam_faildelay.so delay=2000000
# 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
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
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
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
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
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
# 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
# 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
# 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
| 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 |
# 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