Ich versuche, einen sehr einfachen gemeinsam genutzten Mailserver einzurichten, bei dem jede „Domäne“ ein Systembenutzer ist, d. h. „example.com“ ist ein echter Benutzer mit /home/example.com/, einer UID von 5001 und einer GID „example.com“ von 5001.
Jeder Domänen-/Benutzer hat sein eigenes Mailverzeichnis in seinem Home-Verzeichnis und eine einfache Passwd-Datei mit den virtuellen Mail-Benutzern, die mit dieser Domäne verknüpft sind.
Dovecot-Version und Konfigurationsinformationen:
# dovecot -n
# 2.2.13: /etc/dovecot/dovecot.conf
# OS: Linux 3.2.0-4-amd64 x86_64 Debian 7.8
auth_mechanisms = plain login
auth_verbose = yes
disable_plaintext_auth = no
mail_location = mbox:~/mail:INBOX=/var/mail/%u
namespace inbox {
inbox = yes
location =
mailbox Drafts {
special_use = \Drafts
}
mailbox Junk {
special_use = \Junk
}
mailbox Sent {
special_use = \Sent
}
mailbox "Sent Messages" {
special_use = \Sent
}
mailbox Trash {
special_use = \Trash
}
prefix =
}
passdb {
args = username_format=%n /home/%d/mail_users
driver = passwd-file
}
protocols = " imap lmtp pop3"
ssl = no
userdb {
args = username_format=%n /home/%d/mail_users
default_fields = uid=%d gid=%d home=/home/%d/mail/%n mail=maildir:/home/%d/mail/%n
driver = passwd-file
}
Jedes Mal, wenn ich versuche, eine Verbindung zum POP3\IMAP-Port herzustellen, erhalte ich die folgenden Fehler im Server
dovecot: auth: Fatal: passwd-file userdb: Invalid uid: %d
dovecot: master: Error: service(auth): command startup failed, throttling for 2 secs
dovecot: imap-login: Disconnected: Auth process broken (disconnected before auth was ready, waited 0 secs): user=<>, rip=192.168.30.10, lip=192.168.20.201, session=<2rgGLBkQ/wDAqB4K>
und der Client sieht:
$ telnet 192.168.20.201 imap
Trying 192.168.20.201...
Connected to 192.168.20.201.
Escape character is '^]'.
* BYE Disconnected: Auth process broken
Connection closed by foreign host.
Überprüfen des Wikis (http://wiki2.dovecot.org/UserDatabase#Userdb_settings) besagt eindeutig, dass die default_fields-Werte %variable unterstützen, daher bin ich nicht sicher, ob ich eine andere Konfiguration übersehe, die erforderlich ist, damit dies funktioniert.
Da dies geschieht, bevor der Client einen USER\LOGIN-Befehl ausführen kann, ist meines Wissens nach kein Benutzername vorhanden, aus dem der Domänenteil %d extrahiert werden kann, daher der Fehler. Was ich nicht verstehe, ist, warum ein Dovecot-Authentifizierungsversuch erfolgt, bevor der Client einen Authentifizierungsversuch ausführt.
Wenn ich die Konfiguration auf eine feste uid\gid ändere
default_fields = uid=example.com gid=example.com home=/home/%d/mail/%n mail=maildir:/home/%d/mail/%n
Die Verbindung wird zugelassen und ein entsprechender Authentifizierungsbefehl kann ausgegeben werden. Aber dann schlägt natürlich der Zugriff auf das Postfach für jeden Benutzer, der nicht zur Domäne example.com gehört, fehl.