Estoy intentando configurar un servidor de correo compartido muy simple, donde cada 'dominio' es un usuario del sistema, es decir, 'example.com' es un usuario real con /home/example.com/, un uid de 5001 y gid ' ejemplo.com' de 5001.
Cada dominio\usuario tiene su propio directorio de correo dentro de su hogar y un archivo de contraseña simple con los usuarios de correo virtual asociados con ese dominio.
Versión de Dovecot e información de configuración:
# dovecot -n
# 2.2.13: /etc/dovecot/dovecot.conf
# OS: Linux 3.2.0-4-amd64 x86_64 Debian 7.8
auth_mechanisms = plain login
auth_verbose = yes
disable_plaintext_auth = no
mail_location = mbox:~/mail:INBOX=/var/mail/%u
namespace inbox {
inbox = yes
location =
mailbox Drafts {
special_use = \Drafts
}
mailbox Junk {
special_use = \Junk
}
mailbox Sent {
special_use = \Sent
}
mailbox "Sent Messages" {
special_use = \Sent
}
mailbox Trash {
special_use = \Trash
}
prefix =
}
passdb {
args = username_format=%n /home/%d/mail_users
driver = passwd-file
}
protocols = " imap lmtp pop3"
ssl = no
userdb {
args = username_format=%n /home/%d/mail_users
default_fields = uid=%d gid=%d home=/home/%d/mail/%n mail=maildir:/home/%d/mail/%n
driver = passwd-file
}
Cada vez que intento establecer una conexión al puerto pop3\imap, aparece los siguientes errores en el servidor
dovecot: auth: Fatal: passwd-file userdb: Invalid uid: %d
dovecot: master: Error: service(auth): command startup failed, throttling for 2 secs
dovecot: imap-login: Disconnected: Auth process broken (disconnected before auth was ready, waited 0 secs): user=<>, rip=192.168.30.10, lip=192.168.20.201, session=<2rgGLBkQ/wDAqB4K>
y el cliente ve:
$ telnet 192.168.20.201 imap
Trying 192.168.20.201...
Connected to 192.168.20.201.
Escape character is '^]'.
* BYE Disconnected: Auth process broken
Connection closed by foreign host.
Comprobando la wiki (http://wiki2.dovecot.org/UserDatabase#Userdb_settings) indica claramente que los valores default_fields admiten %variables, por lo que no estoy seguro de si me falta alguna otra configuración necesaria para que esto funcione.
Como sucede antes de que el cliente pueda emitir un comando USER\LOGIN, entiendo que no hay ningún nombre de usuario del cual extraer la parte del dominio %d, de ahí el error. Lo que no entiendo es por qué hay un intento de autenticación de Dovecot antes de que el cliente emita un intento de autenticación.
Si modifico la configuración a un uid\gid fijo
default_fields = uid=example.com gid=example.com home=/home/%d/mail/%n mail=maildir:/home/%d/mail/%n
Se permite la conexión y se puede emitir un comando de autenticación adecuado. Pero luego, por supuesto, falla el acceso al buzón de cualquier usuario que no sea del dominio example.com.