Usar Ldap para la autentificación en Apache

Apache y ldap

Alguna vez abréis tenido que proteger alguna carpeta del apache con un nombre de usuario y contraseña. Recordarlos luego puede ser un caos, pero hoy en dia existe el ldap, y podremos usar nuestras cuentas de ldap para acceder a estas carpetas. Vamos a necesitar tener instalado ldap, apache y los modulos de apache mod_ldap y mod_authz_ldap.

Lo primero que tendremos que hacer es activar los modulos en el apache (reiniciaremos el apache para que tengan efectos los cambios):

>> sudo a2enmod ldap
>> sudo a2enmod authz_ldap
>> sudo /etc/init.d/apache2 restart

Tendremos que asegurarnos de que esté activa la opcion del apache AllowOverride o si no queremos que esté activa para todas carpetas activarlo solo para la que queremos proteger (Por ejemplo para /var/www/html/carpeta):

<Directory "/var/www/html/carpeta">
    # Activamos para que use .htaccess
    AllowOverride All
</Directory>

Una vez tengamos todo lo qeu necesitamos vamos a lo que importa. Tendremos que ir al directorio que queramos proteger con la autentificación de apache y crearemos un archivo llamado .htaccess y añadiremos el siguiente contenído (para un ldap instalado en la misma máquina del apache 127.0.0.1 y con una raiz o=organizacion,c=es y que se logeen usando el uid):

order deny,allow
deny from all
# localhost
allow from  127.0.0.1
AuthName "Te tienes que autentificar con los usuarios de ldap."
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPURL ldap://127.0.0.1/o=organizacion,c=es?uid
require valid-user
Satisfy any

Esta configuración dejará el acceso a las peticiones desde la misma máquina en la que esta el apache y si se accede desde otra ip se requiere de un usuario que este en el ldap. No es la única manera, ya que podemos decir que deje acceso a los usuarios ldap de un grupo determinado, un usuario específico y muchas cosas mas.

Os recuerdo que estos y mas datos actualizados los podréis encontrar en mi wiki.

Tuve algunos problemas que os pongo a continuación con sus respectivas soluciones:

  • El fichero de .htaccess no tiene efecto, pongas lo que pongas el apache lo ignora.

Solución: Por seguridad puede ser que el apache no permita hacerle nada al fichero .htaccess. Tendremos que editar la configuración del apache y decirle, por ejemplo, que a la carpeta que queramos (en nuestro caso /var/www/html/carpeta) permita al .htaccess hacer cosas (None (por defecto), Limit o All), en nuestro caso le daremos todos los permisos.

    • Cuando nos pide el usuario y contraseña del ldap y se la ponemos no nos deja entrar. En el fichero /var/log/httpd/error_log nos encontramos la siguiente línea:
    [Thu Nov 20 13:33:40 2008] [error] [client 215.154.142.25] access to /index.php failed, reason: verification of user id 'usuario' not configured

    Solución: Falta de añadir la siguiente línea al fichero .htaccess:

    AuthBasicProvider ldap
    • Nos encontramos el siguiente mensaje de error en los logs:
      [Thu Nov 20 13:38:51 2008] [warn] [client 155.210.155.148] [3243] auth_ldap authenticate: user prodrig authentication failed; URI /mediawiki/index.php/Portada [LDAP: ldap_simple_bind_s() failed][Can't contact LDAP server]

      Solución: Puede que el ldap este parado. Para encenderlo:

      >> /etc/init.d/ldap start

      Añadir nuevo comentario