La búsqueda de usuarios de Dovecot falla cuando se usa el formato de nombre de usuario @ dominio


14

Tengo Dovecot v2.0.11 instalado en un servidor FreeBSD y las búsquedas de usuarios para las direcciones de correo electrónico entrantes fallan, pero las búsquedas de usuarios del sistema son exitosas.

Dovecot está configurado para usar usuarios del sistema, por lo que mi dovecot.conf tiene

 userdb {
  driver = passwd
}

y

passdb {
  driver = passwd
}

Tengo la depuración de autenticación habilitada.

Por ejemplo, tengo un usuario llamado webmaster, y el uso de doveadm user para "webmaster" funciona de la siguiente manera:

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

Sin embargo, el uso de doveadm user para buscar webmaster@myregisteredname.com falla de la siguiente manera:

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

Esto resulta en un correo entrante para webmaster@myregisteredname.com para rebotar con un error de "usuario desconocido".

Aquí está la falla registrada en / var / log / maillog:

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

Aquí está la falla registrada en /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

Los usuarios y sus directorios principales se importaron de otro servidor y los usuarios se configuraron con la herramienta vipw. Estoy seguro de que hay algo que me perdí en la importación que no está "vinculando" al usuario del sistema con la búsqueda de palomar.

¿Alguna idea sobre qué puede ser ese algo?

EDITAR: Utilizando el consejo de BillThor, actualicé dovecot.conf de la siguiente manera:

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

Sin embargo, ahora, el usuario de doveadm falla de una manera diferente:

#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

Y ya no funciona para usuarios sin un dominio:

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

Cuando recibo los mensajes anteriores, lo siguiente está en / 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

Respuestas:


15

Los ID de usuario en dovecot que usan passdb no incluyen el dominio. El ID de usuario que el usuario debe usar es la parte local, no la dirección de correo electrónico completa.

Los controles que pasan y fallan funcionan como se esperaba. Configuración auth_username_format=%nantes de que la definición de contraseña db funcione. Sin embargo, el dominio no está validado.


Gracias por la respuesta, pero eso tampoco funciona. He editado mi pregunta con los resultados actualizados.
cigarman

1
@Coleman: Encontré una solución de trabajo para Dovecot 1.2. Debería funcionar para Dovecot 2 también. Ver editar a mi respuesta. Encontré la solución en el archivo de configuración predeterminado para ubuntu.
BillThor

13

Estoy usando Ubuntu Server 12.04 y probé las soluciones anteriores. Sin embargo, descubrí que la forma más simple y fácil era configurar 10-auth.conf

auth_username_format = %n

Yo uso PAM para la autenticación, que es el predeterminado en Ubuntu 12.04.


3

Sospecho que Dovecot 2.1 rompió esta solución o cambió el comportamiento esperado.

He rastreado el mismo error de autorización al userdb:

userdb {
  driver = passwd
}

Cuando un usuario local (no virtual) recibe un correo electrónico a través de exim-> lmtp, incluye el dominio. La definición de auth_username_format =% Ln arregla la entrega local, pero rompe las entregas virtuales. La solución ofrecida de agregar args = username_format parece ignorarse:

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

y los registros incluyen una advertencia

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

Curiosamente, el uso de passwd-file funciona , pero auth está loco porque el archivo passwd es propiedad de 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 Para mí la razón era espacio extra:

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

es decir, tenía dos espacios entre CRYPT y uesrname.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.