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