Dovecot 2.3 zu Dovecot 2.4: Passwortauthetifizierung schlägt fehl

Andreas Günther dovecot.user at linuxmaker.cloud
Di Dez 2 11:01:43 CET 2025


Mit 

UPDATE mailbox SET password = CONCAT('{CRYPT}', password) WHERE 
username=’Testbenutzer at example.tld’;

konnte ich das Authentifizierungsproblem zumindest für diesen Benutzer lösen. 
Das ist jedoch keine alltagstaugliche Lösung, da Postfixadmin das Prefix 
(’{CRYPT}’ bei Änderungen oder Neuanlage nicht mit abspeichert. 
Es müsste also eine bessere Lösung geben.

Grüße

Andreas


Am Dienstag, 2. Dezember 2025, 10:38:04 CET schrieb Andreas Günther via 
Dovecot:
> Hallo Dovecot-Liste,
> 
> die Umstellung von Dovecot 2.3 auf Dovecot 2.4 stellt wahrlich eine
> Mammutsaufgabe dar. Ich bin mittlerweile soweit, dass der neue Dovecot
> startet und doveamd user ‘*’ ‘*’ die richtigen Werte liefert.
> Jetzt habert es an der Benutzerauthentifizierung. Ich habe ein Debian
> Systemupgrade von Bookworm nach Trixie gemacht. Auf dem System war also
> Dovecot 2.3 und die Benutzer werden von der Postfixadmin-DB verwaltet. Hier
> liegt die Mailadresse für Login etc. in der Spalte mailbox.username und das
> Passwort in mailbox.password.
> 
> In meiner dovecot.conf steht die MySQL-Verbindung so drin:
> sql_driver = mysql
> ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-
> SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA
> - CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-
> GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
> verbose_proctitle = yes
> mysql /var/run/mysqld/mysqld.sock {
>  dbname = postfix
>  password = # hidden, use -P to show it
>  user = postfix
> }
> passdb sql {
>  query = SELECT username AS user, password FROM mailbox WHERE username = '%
> {user}' AND active = true;
> }
> userdb sql {
>  iterate_query = SELECT username AS user FROM mailbox WHERE active = true;
>  query = SELECT 5000 AS uid, 5000 AS gid, CONCAT('/var/vmail/',
> SUBSTRING_INDEX(username,'@',-1), '/', SUBSTRING_INDEX(username,'@',1)) AS
> home, CONCAT('maildir:/var/vmail/', SUBSTRING_INDEX(username,'@',-1
> ), '/', SUBSTRING_INDEX(username,'@',1)) AS mail, CONCAT(quota,'M') AS
> quota_storage_size FROM mailbox WHERE username = '%{user}' AND active =
> true; }
> 
> Wenn ich die Authentifizierung testen will
> 
> root at mx2 /etc/dovecot # doveadm auth test "Testbenutzer at example.tld"
> "Superpasswort"
> passdb: Testbenutzer at example.tld auth failed
> extra fields:
>   user=Testbenutzer at example.tld
> 
> sehe ich in dem Logfile diese Meldungen
> 
> 2025-12-02 10:28:01 auth(Testbenutzer at example.tld,sasl:plain): Debug: sql:
> Performing passdb lookup
> 2025-12-02 10:28:01 auth-worker(851518): Debug: conn unix:auth-worker
> (pid=849688,uid=0): auth-worker<6>: Handling PASSV request
> 2025-12-02 10:28:01 auth-worker(Testbenutzer at example.tld)<851518>: request
> [6]: Debug: sql: Performing passdb lookup
> 2025-12-02 10:28:01 auth-worker(Testbenutzer at example.tld)<851518>: request
> [6]: Debug: sql: query: SELECT username AS user, password FROM mailbox WHERE
> username = 'Testbenutzer at example.tld' AND active = true;
> 2025-12-02 10:28:01 auth-worker(851518): Debug: mysql(/var/run/mysqld/
> mysqld.sock): Finished query 'SELECT username AS user, password FROM mailbox
> WHERE username = 'Testbenutzer at example.tld' AND active = true;' in 0 msecs
> 2025-12-02 10:28:01 auth-worker(Testbenutzer at example.tld)<851518>: request
> [6]: Info: sql: Password mismatch
> 2025-12-02 10:28:01 auth-worker(Testbenutzer at example.tld)<851518>: request
> [6]: Debug: sql: PLAIN(Superpasswort) !=
> '$1$c9809462$w/VXYgrreMffR.oqQkWzq/', try DES-CRYPT scheme instead
> 2025-12-02 10:28:01 auth-worker(Testbenutzer at example.tld)<851518>: request
> [6]: Debug: sql: Finished passdb lookup
> 2025-12-02 10:28:01 auth-worker(851518): Debug: conn unix:auth-worker
> (pid=849688,uid=0): auth-worker<6>: Finished: password_mismatch
> 2025-12-02 10:28:01 auth(Testbenutzer at example.tld,sasl:plain): Debug: sql:
> Finished passdb lookup
> 2025-12-02 10:28:01 auth(Testbenutzer at example.tld,sasl:plain): Debug: Auth
> request finished
> 2025-12-02 10:28:01 auth(Testbenutzer at example.tld,sasl:plain): Debug:
> delaying auth failure
> 2025-12-02 10:28:03 auth: Debug: conn unix:auth-client (pid=851716,uid=0)
> [13]: client passdb out: FAIL 1       user=Testbenutzer at example.tld
> 
> Er hat also Probleme mit dem Passwort-Hash. Die DB enthält aber mehrere
> Tausend Benutzer mit entsprechenden Passwörtern. Also von allen eine
> Passwortänderung zu erwarten wäre eine Katastrophe.
> 
> Wie kann ich Dovecot dazu anhalten, eben diese Vorgaben zu nutzen?
> Irgendwie ist das Ganze Vorgehen von den Dovecot-Entwicklern ziemlich
> ineffizient gedacht worden.
> 
> Viele Grüße und vielen Dank
> 
> Andreas






Mehr Informationen über die Mailingliste Dovecot