Dies ist eine alte Version des Dokuments!
Dovecot, Authentifizierung(en)
Authentifizierungsquellen
Bei der Authentifizierungsquellen kennt Dovecot mehrere Quellen:
- passwd:
Als Quellen werden die User-Daten /etc/shadow (Überprüfung des Userenviroments, also $HOME, $UID und $GID) und /etc/passwd (Überprüfung des Passwortes) genutzt. - passwd-File:
Die /etc/dovecot/users Dovecot-eigene User-Verwaltungs-Datei beinhaltet (neben der Überprüfung des Userenviroments, also $HOME, $UID und $GID auch Überprüfung des Passwortes - LDAP
Mit Hilfe von LDAP1) via via annonymous bind oder technischem User kann ebenso die Benutzerverwaltung erfolgen. - SQL
Ebenso können die gängisten SQL-Datenbanken, wie MySQL, PostgreSQL oder SQLite verwendet werden. Weitere Hinweise dazu findet man im Dovecot Wiki. - Kerberos
Nutzt man das GSSAPI2) für Kerberos 5, so benötigt man weiterhin passwd, damit Dovecot $HOME ermitteln kann um in Erfahrung zu bringen, wo sich die Mailbox des erfolgen, nutzt man die Endkunden befindet. Soll über Kerberos lediglich die Authentifizierung über den Ticket Authentification genutzt werden, verwendet man statt dessen die pam_krb5. - vpopmail
Hinweise hierzu findet man im Dovecot Wiki. - Dict
Hinweise zu „Key-value authentication database“ findet man im Dovecot Wiki. - static:
Bei Systemen ohne nötiger Überprüfung von Username und Passwort wird static verwendet, so z.B.:- Proxy Frontend, bei dem das Frontend bereits das Passwort überprüft.
- Proxy Backend, bei dem das Backend das Passwort überprüft
- SSL Zertifikate, bei der Authentifizierung mit Hilfe von X.509 Client-Zertifikate
- Test, zu Testzwecken.
Konfiguration
Die Konfiguration der Authentifizierung erfolgt über die Datei /etc/dovecot/conf.d/10-auth.conf und über die jeweils eingebundene auth-<mechanism>.conf.ext aus dem Verzeichnis /etc/dovecot/conf.d/.
# # ll /etc/dovecot/conf.d/auth-*
-rw-r--r-- 1 root root 499 Nov 24 2013 /etc/dovecot/conf.d/auth-checkpassword.conf.ext -rw-r--r-- 1 root root 489 Nov 24 2013 /etc/dovecot/conf.d/auth-deny.conf.ext -rw-r--r-- 1 root root 343 Nov 24 2013 /etc/dovecot/conf.d/auth-dict.conf.ext -rw-r--r-- 1 root root 924 Nov 24 2013 /etc/dovecot/conf.d/auth-ldap.conf.ext -rw-r--r-- 1 root root 561 Nov 24 2013 /etc/dovecot/conf.d/auth-master.conf.ext -rw-r--r-- 1 root root 515 Nov 24 2013 /etc/dovecot/conf.d/auth-passwdfile.conf.ext -rw-r--r-- 1 root root 788 Nov 24 2013 /etc/dovecot/conf.d/auth-sql.conf.ext -rw-r--r-- 1 root root 611 Nov 24 2013 /etc/dovecot/conf.d/auth-static.conf.ext -rw-r--r-- 1 root root 2185 Nov 24 2013 /etc/dovecot/conf.d/auth-system.conf.ext -rw-r--r-- 1 root root 330 Nov 24 2013 /etc/dovecot/conf.d/auth-vpopmail.conf.ext
Per Default wird der Authentifizierungs-Mechanismus passwd verwendet, also gegen die beiden Systemkonfigurationsdateien /etc/passwd und /etc/shadow. Dies ist mit dem !include-Statement am Ende der Dovecot-Konfigurationsdatei /etc/dovecot/conf.d/10-auth.conf geregelt.
# vim /etc/dovecot/conf.d/10-auth.conf
- /etc/dovecot/conf.d/10-auth.conf
... #!include auth-deny.conf.ext #!include auth-master.conf.ext !include auth-system.conf.ext #!include auth-sql.conf.ext #!include auth-ldap.conf.ext #!include auth-passwdfile.conf.ext #!include auth-checkpassword.conf.ext #!include auth-vpopmail.conf.ext #!include auth-static.conf.ext
auth-system.conf.ext
Will man lediglich den Systemeigenen Usern, die ein Konto auf dem Linux-Host haben, ein Konto zuweisen, kann natürlich der Mechanismus passwd genutzt werden. Bei der Anmeldung kann aber somit „nur“ der Username verwendet werden und def. nicht die eMail-Adresse des Endkunden - ein nogo für Umgebungen mit mehreren virtuellen Maildomänen. Aus diesem Grunde haben wir uns auch bei den Eingangsüberlegungen zu unserem Dovecot-Server, auch gegen diesen Mechanismus ausgesprochen!
Beispiel:
# grep 1000 /etc/passwd
django:x:1000:1000:django:/home/django:/bin/bash
Der Username django kann zwar benutzt werden, nicht aber django@nausch.org bzw. django@mailserver.guru.
Über die Konfigurationsdatei /etc/dovecot/conf.d/auth-system.conf.ext können bei Bedarf Einstellungen vorgenommen werden.
# less /etc/dovecot/conf.d/auth-system.conf.ext
- /etc/dovecot/conf.d/auth-system.conf.ext
# Authentication for system users. Included from 10-auth.conf. # # <doc/wiki/PasswordDatabase.txt> # <doc/wiki/UserDatabase.txt> # PAM authentication. Preferred nowadays by most systems. # PAM is typically used with either userdb passwd or userdb static. # REMEMBER: You'll need /etc/pam.d/dovecot file created for PAM # authentication to actually work. <doc/wiki/PasswordDatabase.PAM.txt> passdb { driver = pam # [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>] # [cache_key=<key>] [<service name>] #args = dovecot } # System users (NSS, /etc/passwd, or similiar). # In many systems nowadays this uses Name Service Switch, which is # configured in /etc/nsswitch.conf. <doc/wiki/AuthDatabase.Passwd.txt> #passdb { #driver = passwd # [blocking=no] #args = #} # Shadow passwords for system users (NSS, /etc/shadow or similiar). # Deprecated by PAM nowadays. # <doc/wiki/PasswordDatabase.Shadow.txt> #passdb { #driver = shadow # [blocking=no] #args = #} # PAM-like authentication for OpenBSD. # <doc/wiki/PasswordDatabase.BSDAuth.txt> #passdb { #driver = bsdauth # [blocking=no] [cache_key=<key>] #args = #} ## ## User databases ## # System users (NSS, /etc/passwd, or similiar). In many systems nowadays this # uses Name Service Switch, which is configured in /etc/nsswitch.conf. userdb { # <doc/wiki/AuthDatabase.Passwd.txt> driver = passwd # [blocking=no] #args = # Override fields from passwd #override_fields = home=/home/virtual/%u } # Static settings generated from template <doc/wiki/UserDatabase.Static.txt> #userdb { #driver = static # Can return anything a userdb could normally return. For example: # # args = uid=500 gid=500 home=/var/mail/%u # # LDA and LMTP needs to look up users only from the userdb. This of course # doesn't work with static userdb because there is no list of users. # Normally static userdb handles this by doing a passdb lookup. This works # with most passdbs, with PAM being the most notable exception. If you do # the user verification another way, you can add allow_all_users=yes to # the args in which case the passdb lookup is skipped. # #args = #}
auth-passwdfile.conf.ext
Bei der Definition der Mindestanforderung unserer Dovecot-Installation, hatten wir für die Benutzeranmeldung die eMail-Adresse des endkunden gewählt. Somit können unterschiedliche Benutzer an verschiedenen Maildomänen realisiert werden. Die Adresse herbert.nullinger@it-ignorant.de muss also nicht zwingend dem gleichen Nutzer gehören, der herbert.nullinger@omni128.de verwendet.
Haben wir nur einen Mailadministrator und einen überschaubaren Kundenanteil, ist diese Art der Benutzerverwaltung sicherlich eine einfache und praktikable Variante.
Hat man hingegen mehrere Admins und viele Endkunden an verschiedenen Maildomänen am Start, wird es sehr schnell unübersichtlich. Hier nutzt man dann eines der datenbankgestützeten Benutzerverwaltungssystemen, wie z.B. postfixadmin.
Über die Konfigurationsdatei /etc/dovecot/conf.d/auth-passwdfile.conf.ext können bei Bedarf Einstellungen vorgenommen werden.
# less /etc/dovecot/conf.d/auth-passwdfile.conf.ext
- /etc/dovecot/conf.d/auth-passwdfile.conf.ext
# Authentication for passwd-file users. Included from 10-auth.conf. # # passwd-like file with specified location. # <doc/wiki/AuthDatabase.PasswdFile.txt> passdb { driver = passwd-file # Django : 2014-07-28 # default: args = scheme=CRYPT username_format=%u /etc/dovecot/users # %u = vollständiger Nutzername (Bsp.: django@nausch.org) # L = Nutzernamen in Kleinbuchstaben umwandeln args = scheme=CRYPT username_format=%Lu /etc/dovecot/users } userdb { driver = passwd-file # Django : 2014-07-28 # default: args = username_format=%u /etc/dovecot/users # %u = vollständiger Nutzername (Bsp.: django@nausch.org) # L = Nutzernamen in Kleinbuchstaben umwandeln args = username_format=%u /etc/dovecot/users # Default fields that can be overridden by passwd-file #default_fields = quota_rule=*:storage=1G # Override fields from passwd-file #override_fields = home=/home/virtual/%u }
Zur Aktivierung des Authentifizierungs-Mechanismus passwd-file müssen wir nun nur noch den richtigen !include in der Konfigurationsdatei /etc/dovecot/conf.d/10-auth.conf setzen.
# vim /etc/dovecot/conf.d/10-auth.conf
- /etc/dovecot/conf.d/10-auth.conf
... #!include auth-deny.conf.ext #!include auth-master.conf.ext # Django : 2014-07-28 # default: !include auth-system.conf.ext # Umstellung auf den Authentifizierungs-Mechanismus passwd-file #!include auth-system.conf.ext #!include auth-sql.conf.ext #!include auth-ldap.conf.ext !include auth-passwdfile.conf.ext #!include auth-checkpassword.conf.ext #!include auth-vpopmail.conf.ext #!include auth-static.conf.ext
Jetzt müssen wir „nur„noch unsere Datei /etc/dovecot/users mit den Nuterdaten anlegen.
# vim /etc/dovecot/users
- /etc/dovecot/users
# Django : 2014-07-28 # Konfigurationsbeispiel für den Authentifizierungs-Mechanismus passwd-file # # Beispiel für einen Nutzer "django@nausch.org" und dem (Klartext)Passwort "Dj4n90_d3r_G33k!" : # django@nausch.org:{PLAIN}Dj4n90_d3r_G33k!:10000:10000::/var/spool/mail/vmail/nausch.org/django:
Dovecot hält im cash die Daten aus dieser Datei und kann somit auf Änderungen an der datei automatisch reagieren. Ein Reload des Dovecot-Daemon ist somit nicht manuell notwendig!
Beim Passwort-Mechanismus stehen uns folgende Varianten zur Verfügung:
- BLF-CRYPT: Der als sehr sehr sicherere Blowfish-Crypt Algorithmus; das Passwort beginnt mit $2a$
(Note: bcrypt is not available on most Linux distributions)
- SHA512-CRYPT: Sehr sichere kryptologischen Hashfunktionen; das Passwort beginnt mit $6$
- SHA256-CRYPT: Sichere kryptologischen Hashfunktionen; das Passwort beginnt mit $5$
- MD5-CRYPT: Als mittlerweisen recht unsicher eingestufte MD5-Hashfunktion. Das gekryptete Passwort beginnt mit $5$.
Wollen wir ein gekryptetes Passwort mit der SHA256 Hashfunktion erstellen, nutzen wir folgenden Aufruf.
# doveadm pw -s SHA512-CRYPT
Enter new password: Retype new password: {SHA512-CRYPT}$6$QP/5EBBiqFK/CtWX$GGOymjepgiS1GSYhV.XAszOVGM6gRKBVEX.jzHTYuNBww4yWoTiyLZ9dN9unLpzL2cTrcZYeCiXvC3pvJ1PNf.
auth-sql.conf.ext
Haben wir einen Mailserver mit vielen Maildomains und vielen Mailboxnutzern und ein Team von Mailadmins, wird die Pflege der Nutzerkonten über passwd-file sehr schnell zur sportlichen Herausforderung.
Als einfache Lösung bietet sich nun die Datenhaltung in einer MySQL-Datenbank und zur Pflege der Daten postfixadmin an.
Links
~~DISCUSSION~~