Apache 2.2 autenticación básica contra un LDAP

La autenticación más básica que podemos configurar en un Apache es el acceso mediante fichero, pero en esta entrada vamos  a ver como configurar Apache para que autentique los usuarios contra un LDAP.

Las ventajas son evidentes, podemos usar un directorio centralizado de autenticación LDAP, ya sea para validarnos en aplicaciones o para acceder a los servicios web de la empresa.

Para los ejemplos se ha usado un Ubuntu 12.04, lo primero que tenemos que hacer es instalar los módulos de Apache necesarios y activarlos:

Source   
sudo aptitude install libapache2-mod-ldap-userdir
sudo a2enmod authnz_ldap

La autenticación se requiere al acceder a un directorio declarado en el virtual host de Apache, una configuración básica:

Source   
<Directory /var/www/>
AuthType Basic
AuthName "Authentication system: please insert username and password"
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
AuthLDAPURL ldap://s1.test.es:389/ou=Users,dc=zentyal?uid?sub
AuthLDAPBindDN "cn=ebox,dc=zentyal"
AuthLDAPBindPassword ly3sduWefe/BDu
require valid-user
</Directory>

Esto lo que hace es:

1- Definición de proveedor de autenticación, autorización y mensaje que aparecerá en el navegador:

Source   
AuthType Basic
AuthName "Authentication system: please insert username and password" #mensaje que aparece en el navegador al solicitar crendeciales
AuthBasicProvider ldap
AuthzLDAPAuthoritative on

2- Definición de ruta de búsqueda de usuarios, con el parámetro:

Source   
AuthLDAPURL ldap://s1.test.es:389/ou=Users,dc=zentyal?uid?sub

La sintaxis de este parámetro es:

Source   
AuthLDAPURL ldap://host:port/basedn?attribute?scope?filter [NONE|SSL|TLS|STARTTLS]

Si desmenuzamos la sintaxis:

host y port son evidentes

basedn es la ruta LDAP donde buscar los usuarios

attribute, define el nombre atributo que contiene el nombre del usuario (normalmente uid)

scope, puede ser one (para buscar en un subnivel a partir del basedn) o sub (para buscar en todos los subniveles)

filter, filtro opcional de búsqueda, por ejemplo: (&(objectClass=inetOrgPerson)(description=*#*test*))

[NONE|SSL|TLS|STARTTLS], parámetro opcional definiendo el tipo de conexión, por defecto NONE.

3-Autentica contra el LDAP en cuestión, con los parámetros:

Source   
AuthLDAPBindDN "cn=ebox,dc=zentyal"
AuthLDAPBindPassword ly3sduWefe/BDu

Donde AuthLDAPBindDN, es la ruta LDAP al usuario en cuestión a autenticar para poder acceder al LDAP. Si no se define se intenta realizar de forma anónima el acceso a LDAP.

AuthLDAPBindPassword es el password del usuario apuntado por AuthLDAPBindDN.

4- Requerir usuario válido:

Source   
require valid-user

Símplemente requerimos un usuario que se haya podido validar, aunque podríamos fijar una lista de usuarios posibles o un grupo del propio LDAP al que tiene que pertenecer el usuario, por ejemplo:

Source   
require ldap-group cn=Administrators,ou=Groups,dc=zentyal

La documentación del módulo la podemos encontrar en:

http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html

Un ejemplo de configuración completo podría ser:

Source   
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
AuthType Basic
AuthName "Authentication system: please insert username and password"
AuthBasicProvider ldap
AuthzLDAPAuthoritative on
AuthLDAPURL ldap://s1.test.es:389/ou=Users,dc=zentyal?uid?sub?(&(objectClass=inetOrgPerson)(description=*#*testldap*))
AuthLDAPBindDN "cn=ebox,dc=zentyal"
AuthLDAPBindPassword ly3sduWefe/BDu
require valid-user
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined
SSLEngine on
SSLCertificateFile /vol/certificados/completessl/www.empresa.es.crt
SSLCertificateKeyFile /vol/certificados/completessl/www.empresa.es.key
SSLCACertificateFile /vol/certificados/completessl/www.empresa.es.PositiveSSLCA.crt
</VirtualHost>

Deja un comentario