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