1. PAM
PAM steht für Pluggable Authentication Modules und ist eine ziemlich geniale Sache. PAM bietet eine Infrastruktur, die es Programmen ermöglicht, Benutzer über konfigurierbare Module zu authentifizieren. Neben der reinen Authentifizierung ist ein ganzes Sessionmanagement möglich.
Homepage:
Es existieren Module zur Authentifizierung mittels Samba, LDAP, diversen SQL-Datenbanken, Unix-System-Accounts, Kerberos, Smartcards ...
Unter http://rootfiles.net/pam-linuxtag-de.pdf (Broken Link, 08.08.2003) gibt's die Unterlagen zum PAM-Vortrag vom LinuxTag2002.
Unter http://www.jochen.org/~jochen/vortraege/pam.zip findet man ebenfalls die Unterlagen vom LinuxTag2002 aber als html.
Im LinuxMagazin 2004/05 war ein Artikel zu PAM.
Etwas in English: http://www.linuxdevcenter.com/pub/a/linux/2001/09/27/pamintro.html
Inhalt
Inhaltsverzeichnis
1.1. Begriffe
# PAM konfigurations file fuer den Shadow `login' service # von skolelinux rc2. Kommentare entfernt. # # Modultype Modulsteuerung Modulpfad Argumente # auth requisite pam_securetty.so auth requisite pam_nologin.so auth required pam_env.so auth sufficient pam_unix.so nullok auth required pam_ldap.so use_first_pass account sufficient pam_unix.so account required pam_ldap.so session required pam_unix.so session optional pam_lastlog.so session optional pam_motd.so password required pam_unix.so nullok obscure min=4 max=8 md5
Offene Frage: Was bedeuten die Begriffe in den PAM Dateien genau für PAM?
Modultyp
account: Überprüfen ob der Benutzer berechtigt ist den angefragten Dienst zu benutzen. ("Gibt es diesen Benutzer im System und darf er sich anmelden?")
auth: Benutzeridentifizierung und -authentifizierung. z.B. Passwortabfrage oder Smartcards. ("Zeig mir deinen Ausweis!")
password: Steuerung der Passwortänderung ("Dieses Passwort ist zu kurz.")
- session: Verwaltung und Konfiguration der Benutzer Sitzung. Limits, Berechtigungen ... während des Zugriffs. Die Module werden vor und nach der Authentifizierung gestartet um etwas zu protokolieren und dem Benutzer seine eigene Umgebung zuzuweisen. (z.B. Homeverzeichnis)
Modulsteuerung
- requisite: Modul muss mit Erfolg enden. Bei Fehler werden keine weiteren Module abgearbeitet. (notwendige Vorbedingung)
- required: Modul muss mit Erfolg enden. Bei Fehler werden weitere Module abgearbeitet. (notwendige Bedingung)
- sufficient: Wenn das Modul erfolgreich endet, reicht das für den Erfolg der Kette. Keine weiteren Module werden abgearbeitet. (hinreichende Bedingung)
- optional: Das Ergebnis dieses Moduls findet keine Beachtung. (Es sei denn es ist das einzige für einen Typ)
ToDo: Beispiele
1.2. Module und Tipps & Tricks
Offene Frage: Verfügbare Module? Gibt es eine Liste in jedem System? Und eine Globale im WWW?
Die installierten Module findet man normalerweise in /lib/security.
Unter http://ftp.kernel.org/pub/linux/libs/pam/modules.html findet man eine umfangreiche Liste mit Modulen.
1.2.1. pam_console
Ein sehr praktisches Modul ist pam_console. Damit lassen sich für den lokal angemeldeten Benutzer DateiRechte für Devices und Ausführungsrechte für Programme festlegen. Es folgt ein Beispiel für cdrecord. Leider wird dieses Modul derzeit wohl nur bei RedHat und Mandrake benutzt. Nach Ansicht der PAM-Entwickler ist dieses Modul (das von RedHat entwickelt wurde) höchst bedenklich bezüglich der Sicherheit. Hat dazu jemand genauere Informationen?
/etc/pam.d/cdrecord anlegen:
auth sufficient /lib/security/pam_rootok.so auth required /lib/security/pam_console.so account required /lib/security/pam_permit.so
touch /etc/security/console.apps/cdrecord mv /usr/bin/cdrecord /usr/sbin/cdrecord ln -s consolehelper /usr/bin/cdrecord
1.2.2. pam_mount
http://www.flyn.org/projects/pam_mount/index.html
Damit kann man beim Anmelden automatisch DateiSysteme mounten, für die man ein Passwort benötigt (z.B. SMB oder Crypto-Loop)
1.2.3. PyPAM
http://www.pangalactic.org/PyPAM/ ein Python-Modul für PAM
1.2.4. pam_ldap
Anleitungungen:
ftp://ftp.kalamazoolinux.org/pub/pdf/ldapv3.pdf Passwortänderung Seite 174ff
siehe auch RFC 3062
1.2.5. pam_mysql
http://pam-mysql.sourceforge.net/
Ermöglicht die Authentifizierung gegen eine MySQL-Datenbank (ähnlich pam_ldap für LDAP).
1.2.6. pam_usb
pam_usb is a PAM module that enables authentication using an USB-Storage device (such as an USB Pen) through DSA private/public keys.
1.2.7. pam_smb
http://www.csn.ul.ie/~airlied/pam_smb/
pam_smb is a PAM module/server which allows authentication of UNIX users using an NT server.
1.2.8. pam_dotfile
http://www.stud.uni-hamburg.de/users/lennart/projects/pam_dotfile/
pam_dotfile is a PAM module which allows users to have more than one password for a single account, each for a different service.
1.2.9. pam_ssh
http://pam-ssh.sourceforge.net/
pam_ssh provides single sign-on behavior for SSH. The user types an SSH passphrase when logging in (probably to GDM, KDM, or XDM) and is authenticated if the passphrase successfully decrypts the user's SSH private key.
1.2.10. pam_krb5
PAM module for MIT Kerberos V
2. Fragen
Frage: Woran kann ich sehen ob Application oder System Pam benutzen oder benutzen können. z.B. Das Kommando passwd kann es wohl nicht (Debian/woody oder sarge)?
- PAM wird in die Programme als Bibliothek eingebunden (zur Laufzeit). Mit ldd kann man sich anzeigen lassen gegen welche Bibliothek in Programm gelinkt ist. Taucht pam nicht auf, wird es auch nicht unterstützt. Zum Beispiel:
ldd `which passwd` ... libpam_misc.so.0 => /lib/libpam_misc.so.0 (0x4009c000) libpam.so.0 => /lib/libpam.so.0 (0x4009f000)
OffeneFrage: Ich kann mit passwd nicht das Passwort im LDAP Baum ändern, weil das nicht über pam geht oder?
- doch das geht (nämlich genau über den Modultyp password)
OK ich kann mich einloggen als user aber passwd geht trotzdem nicht :
# /etc/pam.d/passwd @include common-password
# # /etc/pam.d/common-password - password-related modules common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of modules that define the services to be # used to change user passwords. The default is pam_unix password sufficient pam_unix.so md5 password required pam_ldap.so try_first_pass auth required pam_ldap.so
#%PAM-1.0 # /etc/pam.d/login auth sufficient /lib/security/pam_ldap.so account sufficient /lib/security/pam_ldap.so auth required /lib/security/pam_securetty.so auth required /lib/security/pam_nologin.so auth required /lib/security/pam_unix_auth.so try_first_pass account required /lib/security/pam_unix_acct.so password required /lib/security/pam_cracklib.so password required /lib/security/pam_ldap.so password required /lib/security/pam_pwdb.so use_first_pass session required /lib/security/pam_unix_session.so
Und ein HinweisJun 15 18:45:32 localhost passwd[1824]: (pam_unix) check pass; user unknown Jun 15 18:45:32 localhost passwd[1824]: (pam_unix) authentication failure; logname=asc uid=10000 euid=0 tty= ruser= rhost= Jun 15 18:45:32 localhost passwd[1824]: pam_ldap: could not open secret file /etc/ldap.secret (Datei oder Verzeichnis nicht gefunden)
Also dann Google ich mal nach ldap.secret. Ja das war es! In /etc/ldap.secret das passwd für LDAP schreiben. Die Rechte so setzen das nur root zugreifen kann.Aber passwd -u <user> als root geht immer noch nicht. Fehler: <user> ist nicht in passwd.