A pesquisa do usuário Dovecot falha ao usar o formato nome de usuário @ domínio

14

Eu tenho o Dovecot v2.0.11 instalado em um servidor FreeBSD e as pesquisas de usuários para endereços de e-mail recebidos estão falhando, mas as pesquisas de usuários do sistema são bem-sucedidas.

Dovecot está configurado para usar usuários do sistema, então meu dovecot.conf possui

 userdb {
  driver = passwd
}

e

passdb {
  driver = passwd
}

Tenho a depuração de autenticação ativada.

Por exemplo, eu tenho um usuário chamado webmaster e o uso de doveadm user para "webmaster" funciona da seguinte maneira:

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

No entanto, o uso do usuário doveadm para pesquisar [email protected] falha da seguinte maneira:

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

Isso está resultando no recebimento de emails para [email protected] para serem devolvidos com um erro "usuário desconhecido".

Aqui está a falha registrada em / var / log / maillog:

Apr 16 20:13:35 www dovecot: auth: passwd([email protected]): unknown user

Aqui está a falha registrada em /var/log/debug.log:

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

Os usuários e seus diretórios pessoais foram importados de outro servidor e os usuários foram configurados usando a ferramenta vipw. Tenho certeza de que há algo que eu perdi na importação que não está "vinculando" o usuário do sistema com a pesquisa dovecot.

Alguma idéia sobre o que isso pode ser?

EDIT: Usando o conselho de BillThor, atualizei dovecot.conf da seguinte maneira:

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

No entanto, agora, o usuário doveadm falha de uma maneira diferente:

#doveadm user [email protected]
doveadm(root): Error: userdb lookup([email protected]): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for [email protected]

E não funciona mais para usuários sem domínio:

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

Quando recebo as mensagens acima, o seguinte está em / 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
charuto
fonte

Respostas:

15

Os IDs de usuário no dovecot usando passdb não incluem o domínio. A identificação do usuário que o usuário deve usar é a parte local, não o endereço de email completo.

As verificações que estão sendo aprovadas e reprovadas estão funcionando conforme o esperado. A configuração auth_username_format=%nantes da definição do banco de dados de senhas funcionar. O domínio não está validado.

BillThor
fonte
Obrigado pela resposta, mas isso também não funciona. Editei minha pergunta com os resultados atualizados.
cigarman
1
@ Coleman: Encontrei uma solução funcional para o Dovecot 1.2. Deve funcionar para Dovecot 2 também. Veja editar na minha resposta. Encontrou a solução no arquivo de configuração padrão para o ubuntu.
BillThor
13

Estou usando o Ubuntu Server 12.04 e tentei as soluções acima. No entanto, eu achei que a maneira mais simples e fácil era no 10-auth.conf definir

auth_username_format = %n

Eu uso o PAM para a autenticação, que é o padrão no Ubuntu 12.04.

Søren Weber
fonte
3

Eu suspeito que o Dovecot 2.1 quebrou essa solução ou mudou o comportamento esperado.

Rastreei o mesmo erro de autorização no userdb:

userdb {
  driver = passwd
}

Quando um usuário local (não virtual) recebe um email via exim-> lmtp, ele inclui o domínio. Definir auth_username_format =% Ln corrige a entrega local, mas interrompe as entregas virtuais. A correção oferecida para adicionar args = username_format parece ser ignorada:

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

e os logs incluem um aviso

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

Curiosamente, o uso do arquivo passwd funciona , mas a autenticação é louca porque o arquivo passwd pertence à raiz.

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
fonte
1

passwd-file: Unknown setting: username_format Para mim, o motivo era espaço extra:

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

ou seja, eu tinha dois espaços entre CRYPT e uesrname.

Putnik
fonte