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.