===== 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}}
----