Dovecot y usuarios virtuales en LDAP …

… un concepto interesante y no tan difícil de lograr una vez claros los conceptos.

Dovecot es un programa que proporciona el servicio de acceso a buzones de correo electrónico mediante los protocols IMAP y POP3 principalmente.

Para funcionar puede separa la autentificación de usuarios del acceso a su información local. Lo primero se realizar mediante el mecanismo passwd y lo segundo vía userdb. Conseguir que un usuario se identifique con éxito en el servidor es relativamente sencillo; lo segundo necesita replantearse algunas cosas antes.

En el caso de utilizar un directorio LDAP para las cuentas de usuario es casi seguro que nos encontramos ante un caso de usuarios virtuales: no están inscritos en el archivo /etc/passwd y no se consideran cuentas de sistema UNIX. Podemos tener contraseñas y controlar el acceso a los servicios sin muchos problemas. Lo complicado aparece cuando es necesario manipular archivos en el sistema. ¿ Quién será el propietario de los mismo ?

La documentación de Dovecot describe muy bien cómo definir éstos usuarios y qué limitaciones podemos encontrarnos, así que la mayor decisión que debemos tomar es qué cuenta y qué grupo vamos a emplear para mantener los buzones. Debe estar de acuerdo con el mecanismo de entrega de correo, que suele estar representado por alguna combinación de servidor de enrutado de correo y herramienta local de despacho (exim4 y maildrop es habitual en mis sistemas).

  1. Elegimos el directorio raíz de los buzones para los usuarios. En mi caso, más por cuestión de distribución de disco que por otra cosa, he elegido /srv/usuarios/%u/.
  2. Creamos una cuenta y un grupo especiales para los directorios y archivos físicos que componen los buzones de correo. Es una cuenta y un grupo de sistema con el nombre -ambos- de vmail.
  3. Indicamos a dovecot que utilice siempre estos datos empleando un recurso conocido como static userdb (base de datos extras de usuarios fija -más o menos-).
$ sudo useradd --system --home-dir /srv/mail vmail 
$ sudo install -d -u vmail -g vmail /srv/mail

En la configuración de dovecot bastará con añadir las siguientes estrofas en /etc/dovecot/local.conf:

passdb {
  driver = ldap
  args  = /etc/dovecot/dovecot-ldap.conf.ext
}
userdb { 
        driver = static

        args = uid=vmail gid=vmail home=/srv/mail/%u mail=maildir:/srv/mail/%u
}

asegurándonos de que no hay más claúsulas tipo userdb e incluyendo lo siguiente en el archivo mencionado /etc/dovecot/dovecot-ldap.conf.ext:

debug_level = 1
ldap_version = 3
#uris = ldapi:///
hosts = localhost
base = ou=users,dc=empresa,dc=net
deref=never
user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid
user_filter = (&(objectClass=inetOrgPerson)(uid=%u))
auth_bind = yes
auth_bind_userdn = uid=%u,ou=users,dc=empresa,dc=net

Comprobaciones

El programa dovecot dispone de algunas ayudas para comprobar la configuración además del registro del sistema. Invocarlo con el parámetro -a muestra toda la configuración y hacerlo con -n nos enseña aquellos valores que difieren de los predeterminados.

Puede ser importante para comprobar el orden en el que aparecen las diferentes base de datos de autentificación y datos extra (authdb y passdb) ya que es un factor a tener en cuenta cuando comprobamos la configuración.

Existe también otra herramienta interesante al respecto. Se llama authadm y entre otras muchas funciones nos permite comprobar si está funcionando o no la autentificación de usuarios:

root@tlp:/etc/dovecot# doveadm auth test coco
Password: 
passdb: coco auth succeeded
extra fields:
  user=coco
root@tlp:/etc/dovecot#