Hola,
Aunque hay maneras más simples (.htaccess, por ejemplo), proteger los accesos a un servidor Web puede resultar bastante útil a la hora de clasificar información. En este ejemplo, vamos a ver cómo forzar a que Apache solicite credenciales válidas de usuario almacenadas en un servidor LDAP para articular la autenticación.
Este artículo asume que dispones de:
-
Un servidor LDAP en funcionamiento. En mi caso, tengo una instalación OpenLDAP.
nas# ps -awux | grep slapd
ldap 808 0.0 1.5 35100 6536 ?? Is Sat02PM 0:00.16 /usr/local/libexec/slapd -u ldap -g ldap -
Una base de datos poblada, con al menos una defición de root. Os recomiendo encarecidamente que empleéis un backend Berkeley DB, aunque se pueden emplear otras opciones (por ejemplo, MySQL, eso sí, extremando las precauciones que pueden derivarse de la existencia de versiones distintas de openldap-client, léase Samba)
nas# cat /usr/local/etc/openldap/slapd.conf | grep root
rootdn «cn=Manager,dc=localhost»
rootpw secreto - Una definición de usuario que usaremos para autenticar en Apache y otro que nos servirá para binding (consultas a LDAP). En nuestro caso, ejecutamos ldapsearch -x -b ‘dc=localhost’ ‘(objectclass=*)’ y verificamos que disponemos de ambos:
- Conocimiento suficiente para adaptar lo que aquí se escribe (FreeBSD 7.2-RELEASE) a tu distribución UNIX favorita. No todos los sabores son iguales, y puede haber una gran variabilidad en cuanto a la ejecución técnica, si bien, la teoría es la misma.
# shernando, usuarios, localhost
dn: uid=shernando,ou=usuarios,dc=localhost
uid: shernando
cn: Sergio Hernando
objectClass: account
objectClass: posixAccount
objectClass: top
loginShell: /bin/sh
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/shernando
gecos: Sergio Hernando
userPassword:: secreto# shernando2, usuarios, localhost
dn: uid=shernando2,ou=usuarios,dc=localhost
uid: shernando2
cn: Sergio Hernando
objectClass: account
objectClass: posixAccount
objectClass: top
loginShell: /bin/sh
uidNumber: 1002
gidNumber: 1002
homeDirectory: /home/shernando2
gecos: Sergio Hernando (Binding)
userPassword:: secretobinding
Recordad que para modificar la clave de los usuarios (caso de no recordarla), emplearemos el comando ldappasswd. Así por ejemplo, en esta definición anterior, para cambiar la clave de shernando2 se debe ejecutar:
ldappasswd -xv -D «cn=Manager,dc=localhost» -W -S «uid=shernando2,ou=usuarios,dc=localhost»
Lo que nos requerirá, además de la clave nueva del usuario, autenticarnos como root de OpenLDAP.
1. Instalación del Servidor Apache
1.1 Rama 1.3.x
En esta rama, el soporte para autenticar mediante OpenLDAP no es nativo. Tendréis que compilaros el módulo y hacer que el servidor Web lo cargue en httpd.conf. Todo el proceso (advierto, puede ser engorroso) está descrito en http://www.muquit.com/muquit/software/mod_auth_ldap/mod_auth_ldap.html
1.2 Rama 2.x
Aprovecharemos la existencia de mod_authnz_ldap (disponible a partir de la versión 2.1) para compilar el servidor con soporte LDAP y autenticación mediante mod_authnz_ldap.
Para ello basta con ejecutar un make y su posterior make install clean desde el árbol de ports de FreeBSD. Es importante asegurarnos que el fichero /usr/ports/www/apache22/Makefile.options contiene directrices para compilar el servidor con soporte LDAP y para poder autenticar a los usuarios con mod_authnz_ldap.
nas# cat /usr/ports/www/apache22/Makefile.options | grep LDAP
LDAP «Enable mod_ldap» ON \
AUTHNZ_LDAP «Enable mod_authnz_ldap» ON \
Os aconsejo también que cuando hagáis el make no seleccionéis funcionalidades y módulos que desconozcáis, ya que al compilar, las dependencias pueden hacer que el proceso se detenga sin éxito, y a mayor número de funcionalidades, menor es la probabilidad de encontrar el error.
2. Verificaciones de la instalación
Una buena señal de que el soporte LDAP está preparado para ser usado es revisar la librería de módulos y determinar si la compilación los ha dejado allí disponibles:
nas# ls -la /usr/local/libexec/apache22 | grep ldap
-rwxr-xr-x 1 root wheel 28587 Jun 7 12:39 mod_authnz_ldap.so
-rwxr-xr-x 1 root wheel 49061 Jun 7 12:39 mod_ldap.so
Arrancamos el servidor, y comprobamos su disponibilidad.
nas# /usr/local/sbin/apachectl start
nas# ps -awux | grep httpd
root 14108 0.0 1.1 10112 5036 ?? Ss 12:19AM 0:00.26 /usr/local/sbin/httpd -k start
www 14109 0.0 1.1 10112 5120 ?? I 12:19AM 0:00.01 /usr/local/sbin/httpd -k start
www 14110 0.0 1.1 10112 5052 ?? I 12:19AM 0:00.00 /usr/local/sbin/httpd -k start
www 14111 0.0 1.1 10112 5052 ?? I 12:19AM 0:00.00 /usr/local/sbin/httpd -k start
www 14112 0.0 1.1 10112 5052 ?? I 12:19AM 0:00.00 /usr/local/sbin/httpd -k start
www 14113 0.0 1.1 10112 5052 ?? I 12:19AM 0:00.00 /usr/local/sbin/httpd -k start
www 14114 0.0 1.1 10112 5060 ?? I 12:19AM 0:00.00 /usr/local/sbin/httpd -k start
3. Modificaciones en httpd.conf
Editamos el fichero de configuración de Apache (/usr/local/etc/apache22/httpd.conf) e introducimos los siguientes cambios
3.1 Carga de módulos
LoadModule authnz_ldap_module libexec/apache22/mod_authnz_ldap.so
LoadModule ldap_module libexec/apache22/mod_ldap.so
3.2 Directivas de restricción
AuthType Basic AuthBasicProvider ldap AuthName "Autenticacion OpenLDAP NAS" AuthzLDAPAuthoritative off AuthLDAPURL "ldap://localhost/ou=usuarios,dc=localhost?uid" AuthLDAPBindDN uid=shernando2,ou=usuarios,dc=localhost AuthLDAPBindPassword secretobinding Require valid-user
Nótese que secretobinding es la clave del usuario que hemos seleccionado para efectuar las consultas.
3.3 Reiniciamos el servidor
nas# /usr/local/sbin/apachectl restart
Y voilá …
Ya tenemos una autenticación para el árbol completo de www (/usr/local/www/apache22/data) basada en OpenLDAP.
Un saludo, y buena semana para todos :)
Que tal amigo de casualidad sabes hacer lo mismo para active directory de windows server
Es decir que se auntentifique usuarios de AD de windwows