Benutzer-Werkzeuge

Webseiten-Werkzeuge


sammlung:pam

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)
passwordPasswort-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
sufficientBei 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

Siehe auch

sammlung/pam.txt · Zuletzt geändert: von Branislav Zeljak