Dovecot 2.3 zu Dovecot 2.4: Passwortauthetifizierung schlägt fehl

dovecot at stekahelo.de dovecot at stekahelo.de
Di Dez 2 12:25:13 CET 2025


Hallo Andreas,

die Umstellung hab ich noch nicht angegangen, aber rein SQL-technisch sollte 
folgendes für die passdb sql funktionieren:

SELECT username AS user, CONCAT('{CRYPT}', password) AS password FROM mailbox 
WHERE username = '%{user}' AND active = true;

Grüße,
Stephan


Am Dienstag, 2. Dezember 2025, 11:01:43 Mitteleuropäische Normalzeit schrieb 
Andreas Günther via Dovecot:
> 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-ECD
> > SA - 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