Die Dovecot-Benutzersuche schlägt fehl, wenn das Format Benutzername @ Domäne verwendet wird


13

Ich habe Dovecot v2.0.11 auf einem FreeBSD-Server installiert und die Benutzersuche nach eingehenden E-Mail-Adressen schlägt fehl, aber die Suche nach Systembenutzern ist erfolgreich.

Dovecot ist so eingerichtet, dass es Systembenutzer verwendet, also hat meine dovecot.conf

 userdb {
  driver = passwd
}

und

passdb {
  driver = passwd
}

Ich habe Auth Debug aktiviert.

Zum Beispiel habe ich einen Benutzer namens Webmaster, und die Verwendung von doveadm user für "webmaster" funktioniert wie folgt:

#doveadm user webmaster
userdb: webmaster
  system_groups_user: webmaster
  uid       : 1020
  gid       : 1020
  home      : /home/webmaster

Die Verwendung des Benutzers doveadm zum Nachschlagen von webmaster@myregisteredname.com schlägt jedoch wie folgt fehl:

# doveadm user webmaster@myregisteredname.com
userdb lookup: user webmaster@myregisteredname.com doesn't exist

Dies führt dazu, dass eingehende E-Mails an webmaster@myregisteredname.com mit einem Fehler "Unbekannter Benutzer" abprallen.

Hier ist der in / var / log / maillog angemeldete Fehler:

Apr 16 20:13:35 www dovecot: auth: passwd(webmaster@myregisteredname.com): unknown user

Hier ist der in /var/log/debug.log protokollierte Fehler:

Apr 16 20:13:35 www dovecot: auth: Debug: master in: USER       1       webmaster@myregisteredname.com  service=doveadm
Apr 16 20:13:35 www dovecot: auth: Debug: passwd(webmaster@myregisteredname.com): lookup
Apr 16 20:13:35 www dovecot: auth: Debug: master out: NOTFOUND  1

Die Benutzer und ihre Home-Verzeichnisse wurden von einem anderen Server importiert und die Benutzer wurden mit dem vipw-Tool eingerichtet. Ich bin mir sicher, dass ich beim Import etwas verpasst habe, das den Systembenutzer nicht mit der Taubenschlag-Suche "verknüpft".

Irgendwelche Ideen, was das für ein Ding sein könnte?

BEARBEITEN: Mit dem Rat von BillThor habe ich dovecot.conf wie folgt aktualisiert:

#doveconf -n passdb userdb
passdb {
  args = username_format=%n
  driver = passwd
}
userdb {
  args = username_format=%n
  driver = passwd
}

Jetzt schlägt der Benutzer von doveadm jedoch auf eine andere Weise fehl:

#doveadm user webmaster@pantronx.com
doveadm(root): Error: userdb lookup(webmaster@myregisteredname.com): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for webmaster@myregisteredname.com

Und es funktioniert nicht mehr für Benutzer ohne Domain:

#doveadm user webmaster
doveadm(root): Error: userdb lookup(webmaster): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for webmaster

Wenn ich die obigen Nachrichten erhalte, befindet sich Folgendes in / var / log / maillog:

Apr 17 17:30:02 www dovecot: auth: Fatal: passdb passwd: Unknown setting: username_format=%u
Apr 17 17:30:02 www dovecot: master: Error: service(auth): command startup failed, throttling

Antworten:


15

Benutzer-IDs in Dovecot, die passdb verwenden, enthalten die Domain nicht. Die Benutzer-ID, die der Benutzer verwenden sollte, ist der lokale Teil, nicht die vollständige E-Mail-Adresse.

Die bestandenen und fehlgeschlagenen Prüfungen funktionieren wie erwartet. Die Einstellung auth_username_format=%nvor der Kennwort-Datenbankdefinition funktioniert. Die Domain ist jedoch nicht validiert.


Vielen Dank für die Antwort, aber das funktioniert auch nicht. Ich habe meine Frage mit den aktualisierten Ergebnissen bearbeitet.
— Zigarrenmann

1
@Coleman: Eine funktionierende Lösung für Dovecot 1.2 gefunden. Sollte auch für Dovecot 2 funktionieren. Siehe Bearbeiten meiner Antwort. Die Lösung wurde in der Standardkonfigurationsdatei für Ubuntu gefunden.
— BillThor

13

Ich verwende Ubuntu Server 12.04 und habe die oben genannten Lösungen ausprobiert. Ich fand jedoch, dass der einfachste und einfachste Weg in 10-auth.conf zu setzen war

auth_username_format = %n

Ich verwende PAM für die Authentifizierung, die in Ubuntu 12.04 die Standardeinstellung ist.


3

Ich vermute, dass Dovecot 2.1 diese Lösung entweder gebrochen oder das erwartete Verhalten geändert hat.

Ich habe den gleichen Autorisierungsfehler auf die Benutzerdatenbank zurückgeführt:

userdb {
  driver = passwd
}

Wenn ein lokaler Benutzer (nicht virtuell) eine E-Mail über exim-> lmtp erhält, enthält er die Domäne. Das Definieren von auth_username_format =% Ln behebt zwar die lokale Zustellung, unterbricht jedoch die virtuellen Zustellungen. Der angebotene Fix zum Hinzufügen von args = username_format scheint ignoriert zu werden:

userdb {
  driver = passwd
  args = username_format=%n
}

und die Protokolle enthalten eine Warnung

Apr  4 11:24:57 moe dovecot: auth: Warning: userdb passwd: Move templates args to override_fields setting

Interessanterweise funktioniert die Verwendung von passwd-file , aber auth ist verrückt, dass die passwd-Datei root gehört.

userdb {
  driver = passwd-file
  args = username_format=%n /etc/passwd
}

Apr  4 11:26:12 moe dovecot: auth: Error: passwd-file /etc/passwd: User root has invalid UID '0'
Apr  4 11:26:12 moe dovecot: auth-worker(6855): Error: passwd-file /etc/passwd: User root has invalid UID '0'

1

passwd-file: Unknown setting: username_format Für mich war der Grund zusätzlicher Platz:

passdb {
  driver = passwd-file
  args = scheme=SHA256-CRYPT **extra-space-here**username_format=%u /etc/dovecot/users
}

dh ich hatte zwei Leerzeichen zwischen CRYPT und uesrname.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.