Situation: Ein Front-End-Server, auf dem Dovecot als IMAP/POP3/ManageSieve-Proxy läuft, und eine Mischung aus IMAP-Servern (Dovecot, Exchange, ...) im Back-End. Dovecots Passdb führt Lookups gegen MySQL durch, das eine einfache Benutzer-/Host-Zuordnung enthält. Die eigentliche Authentifizierung erfolgt auf den Back-End-IMAP-Servern. Die Konfiguration ist mehr oder weniger wie hier beschrieben:http://wiki2.dovecot.org/PasswordDatabase/ExtraFields/Proxy
Jetzt möchte ich eine Postfix-Instanz auf dem Front-End-Server hinzufügen, die auf dem Submission-Port lauscht und Benutzer über SASL unter Verwendung des lokalen UNIX-Sockets von Dovecot authentifiziert. Die Idee dahinter ist, dass sich ein Benutzer für alle E-Mail-bezogenen Dienste nur einen einzigen Hostnamen, einen Benutzernamen und ein Passwort merken muss.
Das Problem besteht darin, dass Dovecot im Proxy-Modus arbeitet, was bedeutet, dass die password_query NULL als Passwort zurückgibt und explizit ein Feld "nopasswd" mit "Y" zurückgibt. Daher können sich Benutzer nicht gegenüber dem UNIX-Socket authentifizieren.
Ich glaube, ich möchte Dovecot davon überzeugen, eine PassDB für die IMAP-/POP3-/Managesieve-Dienste und eine andere für den „Auth“-Dienst zu verwenden.
Der folgende Konfigurationsausschnitt funktioniert nicht, sollte aber veranschaulichen, was ich erreichen möchte:
protocols = imap pop3 sieve
service auth {
passdb sql {
driver = sql
args = /etc/dovecot/mysql-auth-sasl.conf.ext
}
unix_listener /var/spool/postfix/private/auth {
user = postfix
group = postfix
mode = 0666
}
}
# IMAP/POP3/ManageSieve auth against MySQL
passdb sql {
driver = sql
args = /etc/dovecot/mysql-auth-default.conf.ext
}
Beispiel mysql-auth-sasl.conf.ext
driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail password=somethingrandom
password_query = SELECT password AS password FROM users WHERE login = '%u'
Beispiel mysql-auth-default.conf.ext:
driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail password=somethingrandom
password_query = SELECT NULL AS password, 'Y' as nopassword, host, 'Y' AS proxy FROM users WHERE login = '%u'
Irgendwelche Hinweise?