Dovecot: Verwenden einer separaten Passdb pro Dienst

Dovecot: Verwenden einer separaten Passdb pro Dienst

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?

verwandte Informationen