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. PAM
    1. Begriffe
    2. Module und Tipps & Tricks
      1. pam_console
      2. pam_mount
      3. PyPAM
      4. pam_ldap
      5. pam_mysql
      6. pam_usb
      7. pam_smb
      8. pam_dotfile
      9. pam_ssh
      10. pam_krb5
  2. Fragen

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?

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:

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

http://www.pamusb.org/

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

http://www.fcusack.com/

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 Hinweis
       Jun 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.

PAM (zuletzt geändert am 2014年01月08日 07:34:37 durch 188)

AltStyle によって変換されたページ (->オリジナル) /