PAM: Konfiguration von Authentisierungsverfahren
Einführung
PAM: Plugable Authentication Modules- Entwicklung von SunSoft
- seit 1995 RFC der OpenGroup: Open Group RFC 86
- verschiedene Implementationen (Abweichungen und/oder Erweiterungen der Spezifikation)
- Solaris: http://www.sun.com/software/solaris/pam/
- ...
- Linux-PAM: http://www.kernel.org/pub/linux/libs/pam/
- Framework
- Schnittstellen und APIs
- Trennung zwischen
- Anwendungsentwickler
- Entwicklern von Authentisierungsverfahren
- Systemadministratoren
- Linux-PAM
- aktuelle Version [25.08.2006]: 0.99.6
| Distribution | Linux-PAM-Version | |
|---|---|---|
| RHEL 3 | 0.75 | |
| RHEL 4 | 0.77 | |
| Fedora Core 4 | 0.79 | |
| Fedora Core 5 | 0.99.3 |
Funktionsweise
Ziele
- Authentisierungsverfahren auswählbar durch Systemadministrator
- der Betreiber eines Systems und nicht der Softwareentwickler
- Authentisierungsverfahren auswählbar pro Anwendung
- Art des Zugangs zum System kann unterschiedliche Verfahren erfordern (login an der Konsole vs. login über Netze)
- Kommunikation mit dem Benutzer durch die Anwendung
- Passwort-Dialoge o. ä. muss Anwendung übernehmen (eigene Dialogfenster, Übertragung durch Netzwerk)
- Alternative Authentisierungsverfahren für eine Anwendung
- Login über Kerberos oder lokal gespeicherte Passworte
- Kombination von Authentisierungsverfahren für eine Anwendung
- ohne erneuten Dialog mit dem Benutzer (mehrere Verfahren: ein Passwort)
- mit erneutem Dialog mit dem Benutzer (mehrere Verfahren: mehrere Passworte)
- Änderung der Verfahren hat keinen Einfluss auf Anwendung
- Trennung zwischen Entwicklern von Anwendungen und Authentsierungsverfahren
- modulares, erweiterbares Modell zur Anmeldung und zum Passwort-, Account- und Sitzungsmanagement
- nicht beschränkt auf Authentisierung
- abwärtskompatibel zu traditionellen Verfahren
- Übergang möglichst unbemerkt von Benutzern
Komponenten
- Anwendung
- benutzen Funktionen der PAM-API
-
pam_start() -
pam_authenticate() -
pam_setcred() -
pam_acct_mgmt() -
pam_chauthtok() -
pam_open_session() -
pam_close_session() - ...
-
- PAM-API ist implementiert in
libpam.so - implementiert Konversationsfunktion (gerufen vom Modul, zur Übergabe von Authentisierungsinformationen)
- benutzen Funktionen der PAM-API
- Modul
- implementieren PAM-SPI
-
pam_sm_authenticate() -
pam_sm_setcred() -
pam_sm_acct_mgmt() -
pam_sm_chauthtok() -
pam_sm_open_session() -
pam_sm_close_session()
-
- Funktionen unterteilen den Modul in einzeln konfigurierbare Managementaufgaben (Authentisierung, Passwort-, Account- und Sitzungsmanagement)
- Shared Libraries in
/lib/security(/lib64/security)
- implementieren PAM-SPI
- Konfiguration
- Files in
/etc/pam.d/ - pro Anwendung ein File
- Anwendungen benutzen PAM-Service-Name (oftmals der Name der Anwendnung selbst) um ihre Konfiguration zu finden
- existiert für den keine Konfiguration, wird die Konfiguration des Servicenamens
otherbenutzt-
othermuss also sehr restriktiv sein!
-
- Files in
Konfiguration
Konfigurationsfiles
- traditionell:
/etc/pam.conf- jeder Eintrag beginnt mit PAM Service Name
- moderner: pro Anwendung ein File in
/etc/pam.d/- Filename ist PAM Service Name
Aufbau der Einträge
jeder Eintrag auf einer Zeile[service] type control module-path module-arguments
-
[service] - PAM-Service-Name (nur in
/etc/pam.conf) -
type - Modultyp, Funktion
- auth
- authentication / credential management - Verfikation der Identität des Benutzers und Zuweisen/Entziehen von credentials (Gruppenmitgliedschaft, Kerberos TGT, AFS Token, ...)
- account
- account management - Bedingungen für den Zugang zum System (nur über Konsole, nur zu bestimmten Tageszeiten, nutzerspezifisch)
- password
- password management - Aktualisierung der Authentisierungsdaten
- session
- session management - Einstellung für die Sitzung (limits, Zugriffsberechtigungen)
-
control - Einfluss von Erfolg/Misserfolg auf Gesamtergebnis (pro
typekann es mehrere Einträge geben - stacking)
zwei Syntax-Varianten:- simple
- required
- Erfolg ist notwendig für Gesamtbewertung: Erfolg, Fehler führt zur Gesamtbewertung: Misserfolg, es werden trotzdem alle weiteren Module von diesem
typeausgeführt - requisite
- Erfolg ist notwendig für Gesamtbewertung: Erfolg, Fehler führt zur Gesamtbewertung: Misserfolg und termininiert den Authentisierungsprozess
- sufficient
- Erfolg ist ausreichend für Gesamtbewertung: Erfolg, Fehler beeinflusst Gesamtbewertung nicht, Erfolg terminiert den Authentisierungsprozess, Ergebnis vorheriger required Module wird berücksichtigt
- optional
- Erfolg oder Fehler hat nur Bedeutung, wenn es der einzige Module für diesen
typeist - include (nur neuere Versionen von Linux-PAM)
- alle Zeilen desselben
typeaus einem als Argument angegeben File einbeziehen
- komplex
-
[value=action ...] - paarweise Angabe von Rückgabewert (
value) und Verhalten (action)-
value - Rückgabewert des Moduls (success, open_err, auth_err, ... - vollständige Liste in
/usr/include/security/_pam_types.h)
default: alle nicht genannten Werte -
action - ausführende Aktion
- <N>
- die <N> folgenden Module im Stack überspringen
- ignore
- Ergebnis wird ignoriert
- bad
- Ergebnis fließt als Fehler in die Gesamtwertung ein
- die
- Ergebnis als Fehler werten und terminieren des Authentisierungsprozesses
- ok
- übernimmt den Rückkehrwert als Ergebnis und überschreibt bisheriges Ergebnis des Stacks, jedoch: Fehler werden nicht überschrieben
- done
- wie ok, zusätzlich: Authentisierungsprozess wird terminiert
- reset
- bisheriges Ergebnis zurücksetzen und neu beginnen mit nächstem Eintrag im Stack
-
-
- Entsprechungen
- required
-
[success=ok new_authtok_reqd=ok ignore=ignore default=bad] - requisite
-
[success=ok new_authtok_reqd=ok ignore=ignore default=die] - sufficient
-
[success=done new_authtok_reqd=done default=ignore] - optional
-
[success=ok new_authtok_reqd=ok default=ignore]
- simple
-
module-path - voller Pfadname des PAM-Moduls oder Pfadname relativ zu
/lib/security, der Verzeichnisname in der Pfadangabe/lib/security/$ISAverweist auf das Architektur-Verzeichnis der Maschine (/lib/securitybzw./lib64/security) -
module-arguments - Argumente, die das Verhalten des Modules steuern (modulspezifisch)
Beispiel
- PAM-Konfiguration für
login
# cat /etc/pam.d/login auth required pam_securetty.so auth required pam_env.so auth required pam_nologin.so auth sufficient pam_krb5.so auth sufficient pam_unix.so likeauth nullok auth required pam_deny.so account required pam_unix.so account sufficient pam_login_access.so account optional pam_krb5.so password required pam_deny.so session required pam_limits.so session optional pam_krb5.so session required pam_unix.so session optional pam_console.so
-
pam_securetty - Login als
rootnur an "sicheren" Terminals
definiert in/etc/securetty -
pam_env - Setzen/Löschen von Umgebunsvariablen
definiert in/etc/security/pam_env.conf -
pam_nologin - falls
/etc/nologinexistiert, nur noch Login alsrooterlauben -
pam_krb5 - Authentisierung via Kerberos V5
Konfiguration in/etc/krb5.conf -
pam_unix - Authentisierung via traditioneller Unix-Mittel (Passwort-Hashes - md5/crypt)
beeinflusst durch/etc/nsswitch.conf -
pam_deny - liefert immer Misserfolg
-
pam_login_access - Zugangsvoraussetzungen in
/etc/login.access(auchpam_access) -
pam_limits - Einstellen von Limits
definiert in/etc/security/limits.conf -
pam_console - Übertragen/Entziehen von Berechtigungen des Konsole-Nutzers
definiert inetc/security/console.appsund/etc/security/console.perms
PAM-Module
- zahlreiche Module gehören zum Paketumfang von Linux-PAM
- siehe http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_SAG.html
-
pam_listfile - Zugangssteuerung auf Basis von ASCII-Files
-
pam_userdb - zusätzliche lokale Passwort-Datenbasis auswerten
-
pam_mkhomedir - HOME-Verzeichnis bei erster Anmeldung des Nutzers einrichten
-
pam_time - zeitabhängige Zugangssteuerung
-
- siehe http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/Linux-PAM_SAG.html
- einige PAM-Module als eigenständige Projekte, teilweise in Paketform in Distributionen integriert
-
pam_krb5 - Original-Quelle: http://people.redhat.com/nalin/pam_krb5/
-
pam_ldap,pam_ccreds - Original-Quelle: http://www.padl.com/Contents/OpenSourceSoftware.html
-
pam_login_access - https://www-user.tu-chemnitz.de/~mibe/sw/OpenPBS/#pam_login_access
-
pam_afsgroup - http://chu.in-chemnitz.de/download/mod_auth_pam_2.0.tgz
-
pam_afs - Bestandteil von OpenAFS (obsolet!, besser:
pam_krb5)
-
- Beschreibungen:
type,module_arguments- Manuals
- Web-Seiten
- C-Quellen studieren
- Modul-Argumente
- modulspezifisch
- wenige Konventionen
-
try_first_pass -
use_first_pass -
debug
-
- Umfang, Wirkungsweise, Default-Annahmen, Notation, ... aus Beschreibung (besser: C-Quellen)
Hinweise
pam_stack / include
- viele Anwendungen kann man (weitesgehend) identisch konfigurieren
- gemeinsame Teile in einer Konfiguration zusammenfassen:
/etc/pam.d/system-auth - anwendungsspezifische Teile im eigenen Konfigurationsfile und Verweis auf gemeinsame Konfiguration
- Anmerkung:
- Konventionen in Distributionen
- Tools zur Manipulation der Konfigfiles (
/usr/bin/system-config-authentication,/usr/bin/authconfig, ...)
# cat /etc/pam.d/system-auth auth required pam_env.so auth required pam_nologin.so auth sufficient pam_krb5.so auth sufficient pam_unix.so likeauth nullok auth required pam_deny.so account required pam_unix.so account sufficient pam_login_access.so account optional pam_krb5.so password required pam_deny.so session required pam_limits.so session optional pam_krb5.so session required pam_unix.so session optional pam_console.so # cat /etc/pam.d/login auth required pam_securetty.so auth required pam_stack.so service=system-auth account required pam_stack.so service=system-auth password required pam_stack.so service=system-auth session required pam_stack.so service=system-auth # cat /etc/pam.d/gdm auth required pam_stack.so service=system-auth account required pam_stack.so service=system-auth password required pam_stack.so service=system-auth session required pam_stack.so service=system-auth
- oder (neuere Linux-PAM-Versionen):
# cat /etc/pam.d/login auth required pam_securetty.so auth include system-auth account include system-auth password include system-auth session include system-auth
Fehlkonfigurationen
- kein login mehr möglich
- nicht existierende oder defekte PAM-Module (Tippfehler, Fehler beim Linken der Module)
- fehlende Konfig-Files (
/etc/pam.d/gelöscht=)
- login für jedermann
- fehlerhafte Verwendung von PAM-Modulen, die immer Erfolg liefern (
pam_permitals erstersufficientModul) - fehlerhafte Verwendung der
value=actionSpezifikation (default=done)
- fehlerhafte Verwendung von PAM-Modulen, die immer Erfolg liefern (
Sicherheit
- Berechtigungen
- Konfiguration:
/etc/pam.d/ - PAM-Module:
/lib/security - PAM-Module werden oft als
rootausgeführt, bzw. aus setuid-Programmen (su,sudo)
- Konfiguration:
- Netzwerkdienste
- PAM schützt die Übertragung von vertraulichen Informationen nicht - das ist Aufgabe der Anwendung
- PAM-Module von Drittanbietern
- Quellenstudium ist Pflicht
Änderungen und Anpassungen
- orientieren an mitgelieferten Konfigurationen
- Testen mit unkritischen Anwendungen
- Verhalten bei fehlerhaften Eingaben testen
- Testszenarien entwickeln und bei Änderungen erneut durchlaufen
Links
- http://www.kernel.org/pub/linux/libs/pam/ - Linux-PAM (primary distribution site)