Springe zum Hauptinhalt

Archiv

PAM: Konfiguration von Authentisierungsverfahren

Einführung

PAM: Plugable Authentication Modules

Distribution Linux-PAM-Version
RHEL 3 0.75  
RHEL 4 0.77  
Fedora Core 4 0.79  
Fedora Core 5 0.99.3

Funktionsweise

pam.png

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)
  • 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 )
  • 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 other benutzt
      • other muss also sehr restriktiv sein!

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 type kann 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 type ausgefü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 type ist
    include (nur neuere Versionen von Linux-PAM)
    alle Zeilen desselben type aus 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]
module-path
voller Pfadname des PAM-Moduls oder Pfadname relativ zu /lib/security, der Verzeichnisname in der Pfadangabe /lib/security/$ISA verweist auf das Architektur-Verzeichnis der Maschine (/lib/security bzw. /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 root nur 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/nologin existiert, nur noch Login als root erlauben
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 (auch pam_access)
pam_limits
Einstellen von Limits
definiert in /etc/security/limits.conf
pam_console
Übertragen/Entziehen von Berechtigungen des Konsole-Nutzers
definiert in etc/security/console.apps und /etc/security/console.perms

PAM-Module

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_permit als erster sufficient Modul)
    • fehlerhafte Verwendung der value=action Spezifikation (default=done)

Sicherheit

  • Berechtigungen
    • Konfiguration: /etc/pam.d/
    • PAM-Module: /lib/security
    • PAM-Module werden oft als root ausgeführt, bzw. aus setuid-Programmen (su, sudo)
  • 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