PAM (Pluggable Authentication Module) ist ein sehr mächtiges System um Benutzer zu verifizieren. Es bietet sehr viele verschiedene Anmeldemöglichkeiten. Die grundlegenste ist passwd/shadow, aber auch MySQL und LDAP als Quellen sind möglich.
Darum muss man sich jetzt überlegen, welches System man bevorzugt.
Auf reinen Mailservern kann man MySQL oder LDAP wählen. Auf Unternehmensservern bevorzuge ich SAMBA oder LDAP. Wobei LDAP mehr Möglichkeiten für eine zentrale Benutzerverwaltung bietet, aber bei kleinen Betrieben auch mehr Aufwand erzeugt.
Es gibt verschiedene Möglichkeiten einen SAMBA- oder Windows-Server als Authentisierungsstelle zu verwenden. Ich habe bisher die mit dem Modul pam_smb_auth.so aus dem Paket libpam-smb gearbeitet. Das Projekt ist allerdings nicht mehr in den aktuellen Repositories vorhanden.
Und es kommt noch schlimmer... Das Ersatzprojekt libpam-smbpass funktioniert nicht zusammen mit SASL. Wenn via SASL über PAM mit pam_smbpass.so Passwörter verifiziert werden, hängt sich SASL irgendwann auf. Man kann nicht vorhersagen wann und auch ein täglicher Neustart hilft nichts.
Daher hilft nur eins: winbind muss her! Ich wollte das aus 2 Gründen vermeiden. 1. Wenn ich Mailbenutzer habe, möchte ich keine entsprechenden passwd/shadow Einträge im LDAP Server haben. Winbind akzeptiert aber nur Logins mit entsprechenden Einträgen. 2. Das ganze Konstrukt über SASL war schon kompliziert genug, jetzt muss noch ein weiterer Daemon in die Reihe gehängt werden.
Cyrus -> SASLAUTHD -> PAM -> WINBIND -> SAMBA -> LDAP !!!
Aber leider weiss ich auch keine elegantere Methode, um für Windowsuser nicht mehrere Konten führen zu müssen.
Damit winbind Zugriff hat, muss man auch der Domäne beitreten:
net rpc join -U administrator%secret
/etc/pam.d/[imap|pop|sieve|smtp]:
#auth required pam_smb_auth.so #auth required pam_smbpass.so auth required pam_winbind.so account required pam_permit.so
Obsolete
/etc/pam_smb.conf:
SAMBA_DOMAIN LOCALHOST LOCALHOST
Um PAM mit einem MySQL-Server zu verwenden benötigt man das Paket libpam-mysql. Eine kurze Anleitung findet man in /usr/share/doc/libpam-mysql/Readme
/etc/pam.d/[imap|pop|sieve|smtp]:
auth sufficient pam_mysql.so user=myuser passwd=geheim db=auth usercolumn=name passwdcolumn=pw crypt=2 sqllog=0 account required pam_mysql.so user=myuser passwd=geheim db=auth usercolumn=name passwdcolumn=pw crypt=2 sqllog=0
Wenn man LDAP verwendet wird die Sache ein wenig komplexer, aber man kann dafür Unix-,Windows- und Mail-User gemeinsam mit einem Dienst verwalten. Dieser Dienst kann über Netzwerk angesprochen und redundant abgesichert werden.
/etc/pam.d/common-account
account sufficient pam_ldap.so account required pam_unix.so try_first_pass
/etc/pam.d/common-auth
auth sufficient pam_ldap.so auth required pam_unix.so nullok_secure try_first_pass
/etc/pam.d/common-password
password sufficient pam_ldap.so password sufficient pam_unix.so try_first_pass nullok obscure min=4 max=8 md5
/etc/pam.d/[imap|pop|sieve|smtp]:
@include common-auth @include common-account
/etc/pam.d/gdm:
auth requisite pam_nologin.so auth required pam_env.so account sufficient pam_ldap.so auth required pam_mount.so ##### optional auth sufficient pam_ldap.so use_first_pass auth required pam_unix.so use_first_pass session required pam_limits.so session optional pam_mount.so ##### optional