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 [email protected] schlägt jedoch wie folgt fehl:

# doveadm user [email protected]
userdb lookup: user [email protected] doesn't exist

Dies führt dazu, dass eingehende E-Mails an [email protected] mit einem Fehler "Unbekannter Benutzer" abprallen.

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

Apr 16 20:13:35 www dovecot: auth: passwd([email protected]): 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       [email protected]  service=doveadm
Apr 16 20:13:35 www dovecot: auth: Debug: passwd([email protected]): 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 [email protected]
doveadm(root): Error: userdb lookup([email protected]): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for [email protected]

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
Zigarrenmann
quelle

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.

BillThor
quelle
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.

Søren Weber
quelle
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'
beewoolie
quelle
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.

Putnik
quelle