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 [email protected] falla de la siguiente manera:

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

Esto resulta en un correo entrante para [email protected] 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([email protected]): 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       [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

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 [email protected]
doveadm(root): Error: userdb lookup([email protected]): Disconnected unexpectedly
doveadm(root): Fatal: userdb lookup failed for [email protected]

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
cigarman
fuente

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.

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

Søren Weber
fuente
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'
abeja
fuente
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.

Putnik
fuente