La ricerca dell'utente Dovecot non riesce quando si utilizza il formato nome utente @ dominio


14

Ho Dovecot v2.0.11 installato su un server FreeBSD e le ricerche degli utenti per gli indirizzi e-mail in arrivo non riescono, ma le ricerche per gli utenti del sistema hanno esito positivo.

Dovecot è configurato per usare gli utenti del sistema, così ha fatto dovecot.conf

 userdb {
  driver = passwd
}

e

passdb {
  driver = passwd
}

Ho il debug di autenticazione abilitato.

Ad esempio, ho un utente chiamato webmaster e l'utilizzo di doveadm per "webmaster" funziona come segue:

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

Tuttavia, l'utilizzo dell'utente doveadm per la ricerca webmaster@myregisteredname.com non riesce come segue:

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

Ciò sta causando il rimbalzo della posta in arrivo per webmaster@myregisteredname.com con un errore "utente sconosciuto".

Ecco l'errore registrato in / var / log / maillog:

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

Ecco l'errore registrato in /var/log/debug.log:

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

Gli utenti e le loro directory home sono stati importati da un altro server e gli utenti sono stati configurati utilizzando lo strumento vipw. Sono sicuro che c'è qualcosa che mi è sfuggito all'importazione che non "collega" l'utente del sistema con la ricerca dovecot.

Qualche idea su cosa potrebbe essere quel qualcosa?

EDIT: Utilizzando il consiglio di BillThor, ho aggiornato dovecot.conf come segue:

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

Tuttavia, ora l'utente doveadm non riesce in modo diverso:

#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

E non funziona più per gli utenti senza un dominio:

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

Quando ricevo i messaggi precedenti, quanto segue è 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

Risposte:


15

Gli userid in dovecot che usano passdb non includono il dominio. L'ID utente che l'utente deve utilizzare è la parte locale, non l'indirizzo di posta elettronica completo.

I controlli che superano e falliscono funzionano come previsto. L'impostazione auth_username_format=%nprima della definizione della password db funziona. Il dominio non è tuttavia validato.


Grazie per la risposta, ma non funziona neanche. Ho modificato la mia domanda con i risultati aggiornati.
sigaro

1
@Coleman: trovata una soluzione funzionante per Dovecot 1.2. Dovrebbe funzionare anche per Dovecot 2. Vedi modifica alla mia risposta. Trovato la soluzione nel file di configurazione predefinito per Ubuntu.
BillThor,

13

Sto usando Ubuntu Server 12.04 e ho provato le soluzioni sopra. Tuttavia, ho scoperto che il modo più semplice e facile era impostare 10-auth.conf

auth_username_format = %n

Uso PAM per l'autenticazione che è l'impostazione predefinita in Ubuntu 12.04.


3

Sospetto che Dovecot 2.1 abbia rotto questa soluzione o abbia cambiato il comportamento previsto.

Ho rintracciato lo stesso errore di autorizzazione su userdb:

userdb {
  driver = passwd
}

Quando un utente locale (non virtuale) riceve un'email tramite exim-> lmtp, include il dominio. La definizione di auth_username_format =% Ln risolve la consegna locale, ma interrompe le consegne virtuali. La correzione offerta per l'aggiunta di args = username_format sembra essere ignorata:

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

e i registri includono un avviso

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

È interessante notare che l'utilizzo di passwd-file funziona , ma auth è pazzo che il file passwd sia di proprietà di root.

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 Per me il motivo era spazio extra:

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

cioè ho avuto due spazi tra CRYPT e uesrname.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.