Integration der AFS/Kerberos-Authentisierung in Linux/Unix-Dienste mittels PAM

Vorbemerkung

PAM steht für Pluggable Authentication Modules. Dabei handelt es sich um einen universellen Mechanismus, mit dessen Hilfe einzelne Authentisierungsverfahren durch den Administrator eines Systems für jede einzelne Anwendung (z.B. login, xdm, sshd, ...) geeignet festgelegt werden können.

Bestandteil der AFS-Klient-Software ist auch ein PAM-Modul, welcher die Authentisierung gegen eine AFS/Kerberos-Datenbasis ermöglicht.

Diese Beschreibung folgt in der Darstellung der Beschreibung der PAM-Moduln aus dem Linux-PAM Project.

Module Name

pam_afs
Standard-AFS-PAM-Modul, im authentication-Teil wird ein AFS-Token erzeugt und in einer PAG dem AFS Cache Manager zugeordnet
pam_afs.krb
Erweiterung des Standard-AFS-PAM-Moduls, legt das AFS Service Ticket und(!) das Ticket Granting Ticket des Nutzers im Ticketfile des Nutzers ab (Umgebungsvariable KRBTKTFILE)

Management Groups

authentication, password, session

Überblick zu den Moduln

authentication

Argumente

debug, dont_fork, ignore_uid, ignore_root, no_unlog, refresh_token, remain, remainfiletime, setenv_password_expires, set_token, try_first_pass, use_first_pass, use_klog

debug
erzeugt zusätzliche Debugging-Ausgaben über syslogd
dont_fork
die eigentliche Authentisierung geschieht in einem Subprozeß, durch Angabe dieses Arguments erfolgt die Authentisierung im Kontext des Anwednung selbst, es wird kein Subprozeß erzeugt (damit sind einige Nebeneffekte verbunden, dieses Argument sollte man nur nutzen, wenn sonst Probleme auftreten)
ignore_uid uid
wenn die UNIX-UID des sich anmeldenden Nutzers kleiner oder gleich uid ist, dann unterlasse die Authentisierung und liefere PAM_AUTH_ERR)
ignore_root
gleichbedeutend mit ignore_uid 0
no_unlog
verwerfe am Sitzungsende (während pam_sm_setcred(DELETE_CRED)) das Token nicht
refresh_token
beschaffe keine neue PAG, sondern nur ein neues Token
remain
das Token soll über das Sitzungsende hinaus noch für max. 5 Minuten erhalten bleiben
remainlifetime time
das Token soll über das Sitzungsende hinaus noch für max. time Sekunden erhalten bleiben
setenv_password_expires
setzt die Umgebungsvariable PASSWORD_EXPIRES
set_token
speichere das Token bereits bereits während pam_sm_authenticate() und nicht erst wärend pam_setcred() (hilfreich bei Anwendungen, die pam_setcred() nie rufen)
try_fist_pass
versuche zuerst das Passwort zu verwenden, welches von einem vorausgegangenen PAM-Modul bereits beschafft und im PAM-Handle übergeben wurde, wenn dieses Passwort nicht zum Erfolg führt, erfrage das Passwort selbst von der Anwendung use_first_pass verwende nur das Passwort, welches von einem vorausgegangenen PAM-Modul bereits beschafft und im PAM-Handle übergeben wurde, wenn dieses Passwort nicht zum Erfolg führt, liefere PAM_AUTH_ERR use_klog benutzte das Programm klog, um die Authentisierung durchzuführen (dieses Argument sollte nur benutzt werden, wenn alle anderen Konfigurationen nicht funktionieren)

session

Argumente

debug, no_unlog, remain, remainlifetime

password

Argumente

keine.

Beispiel

Das Beispiel stammt aus Red Hat Linux 7.3 und illustriert die Verwendung im Zusammenhang mit login, sshd, su und KDE

% cd /etc/pam.d
% cat login
auth		 required	  /lib/security/pam_securetty.so
auth		 required	  /lib/security/pam_stack.so service=system-auth
auth		 required	  /lib/security/pam_nologin.so
account	 required	  /lib/security/pam_stack.so service=system-auth
password	required	  /lib/security/pam_stack.so service=system-auth
session	 required	  /lib/security/pam_stack.so service=system-auth
session	 optional	  /lib/security/pam_console.so
% cat su
auth		 sufficient	/lib/security/pam_rootok.so
auth		 required	  /lib/security/pam_stack.so service=system-auth
account	 required	  /lib/security/pam_stack.so service=system-auth
password	required	  /lib/security/pam_stack.so service=system-auth
session	 required	  /lib/security/pam_stack.so service=system-auth
session	 optional	  /lib/security/pam_xauth.so
% cat sshd
auth		 required	  /lib/security/pam_stack.so service=system-auth
auth		 required	  /lib/security/pam_nologin.so
account	 required	  /lib/security/pam_stack.so service=system-auth
password	required	  /lib/security/pam_stack.so service=system-auth
session	 required	  /lib/security/pam_stack.so service=system-auth
session	 optional	  /lib/security/pam_console.so
% cat system-auth
auth		  required		/lib/security/pam_env.so
auth		  sufficient	 /lib/security/pam_afs.krb.so remainlifetime 60 ignore_uid 200
auth		  sufficient	 /lib/security/pam_unix.so likeauth
auth		  required		/lib/security/pam_deny.so
account	  required		/lib/security/pam_access.so
account	  required		/lib/security/pam_unix.so
password	 required		/lib/security/pam_cracklib.so retry=3 type=
password	 sufficient	 /lib/security/pam_afs.so
password	 required		/lib/security/pam_unix.so use_authtok md5 shadow
password	 required		/lib/security/pam_deny.so
session	  required		/lib/security/pam_limits.so
session	  required		/lib/security/pam_unix.so

% cat kde
# used by kscreensaver
auth		 required	  /lib/security/pam_stack.so service=system-auth
auth		 required	  /lib/security/pam_nologin.so
account	 required	  /lib/security/pam_stack.so service=system-auth.xdm
password	required	  /lib/security/pam_stack.so service=system-auth.xdm
session	 required	  /lib/security/pam_stack.so service=system-auth.xdm
session	 optional	  /lib/security/pam_console.so
% cat xdm
auth		 required	  /lib/security/pam_stack.so service=system-auth.xdm
auth		 required	  /lib/security/pam_nologin.so
account	 required	  /lib/security/pam_stack.so service=system-auth.xdm
password	required	  /lib/security/pam_stack.so service=system-auth.xdm
session	 required	  /lib/security/pam_stack.so service=system-auth.xdm
session	 optional	  /lib/security/pam_console.so
% cat system-auth.xdm
auth		  required		/lib/security/pam_env.so
auth		  sufficient	 /lib/security/pam_afs.krb.so remainlifetime 60 ignore_uid 200 set_token
auth		  sufficient	 /lib/security/pam_unix.so likeauth
auth		  required		/lib/security/pam_deny.so
account	  required		/lib/security/pam_access.so
account	  required		/lib/security/pam_unix.so
password	 required		/lib/security/pam_cracklib.so retry=3 type=
password	 sufficient	 /lib/security/pam_afs.so
password	 required		/lib/security/pam_unix.so use_authtok md5 shadow
password	 required		/lib/security/pam_deny.so
session	  required		/lib/security/pam_limits.so
session	  required		/lib/security/pam_unix.so