domingo, 13 de noviembre de 2011

Autenticaciones en Apache

Hemos visto que una manera de acceder a un sitio web de Apache es mediante autenticación contra un servidor LDAP. Ahora nos vamos a dedicar a investigar sobre otras formas de autentificación distintas a LDAP.
Así que nos limitaremos a describir cómo implementar autenticación básica y PAM. Cada módulo de autenticación tiene su forma particular de ser activado y gestionado, pero estas dos formas de autenticación servirán como base para hacerse una idea clara de cómo manejar el resto de las mismas.

Pasaremos directamente a ver cómo funcionan a base de actividades prácticas:

Autenticación Básica con Apache

El primer paso es incluir las siguientes líneas en el fichero apache2.conf, que indicarán a Apache que se desea este tipo de autenticación sobre el directorio indicado.


Una de las cosas nuevas que tiene el contenido anterior es una referencia a un fichero authgroups. Este fichero debe contener un listado de usuarios que han sido creados expresamente para esta clase de autenticación (lo veremos a continuación) y que han sido distribuidos en una serie de grupos, que también aparecen en el mismo. Esto permite crear varias áreas de acceso en diversas partes de la web donde un mismo grupo pueda tener diferentes privilegios o bien sólo algunos puedan acceder a los contenidos.
Evidentemente, cuando se comprueben las credenciales de un usuario para conceder el acceso a un lugar protegido, dicho usuario debe pertenecer a uno de los grupos autorizados. La directiva del ejemplo anterior "Require group privado" hace que solo los usuarios de este grupo (que como veremos posteriormente serán alfa y beta) tengan acceso a este directorio vía web.
Antes de seguir deberemos de crear los usuarios y los grupos con los que vamos a trabajar en esta actividad (he creado 2 usuarios: “alfa” y “beta” pertenecientes a un grupo llamado “privado” y otro usuario “f1” perteneciente al grupo “otros”)
El contenido del fichero authgroups se puede crear simplemente con un editor de texto como el nano, y debe hacerse en la carpeta indicada anteriormente en el apache2.conf. El contenido es muy sencillo y debe seguir el patrón : , tal y como se ve a continuación:



Finalmente, debemos construir las password de los usuarios que se mencionan en el fichero de grupos. Esto se hace con la siguiente secuencia de comandos, invocando un comando htpasswd por cada usuario registrado. Al llamar a esta orden se solicitará por entrada estándar una clave para cada usuario:

  • touch /etc/apache2/authusers
  • htpasswd /etc/apache2/authusers alfa
  • htpasswd /etc/apache2/authusers beta
  • htpasswd /etc/apache2/authusers f1
Posteriormente vamos a comprobar el funcionamiento de dicha autenticación basic, nos vamos a la ruta /localhost/autentif_basic (habiéndola declarado previamente en el archivo de hosts y habiendo creado un pequeño index para su demostración en /var/www/autentif_basic).


Nos preguntara por el nombre del usuario que queramos que tenga acceso a nuestro directorio autentif_basic y solamente podremos entrar como usuarios “alfa” o “beta” porque son los que pertenecen al grupo privado (todo ello declarado en el archivo authgroups anteriormente). He comprobado que el usuario “f1” al pertenecer al grupo “otros” no tiene acceso al interior de la carpeta con su contraseña y efectivamente no tiene acceso de tal forma que mediante esta autentificación podremos hacer que accedan a una determinada carpeta solo los usuarios que declaremos en el archivo anterior (habiendo creado previamente los usuarios y los grupos en el sistema claro está…)


Comprobamos el acceso con los usuarios alfa y beta y vemos que entran perfectamente a la carpeta
En caso de que le demos a cancelar como será el caso del usuario f1 que es imposible que acceda al sistema, cuando nos solicita el usuario y la contraseña y pulsemos en la opción cancelar nos saldrá la siguiente información


Autenticación PAM con Apache


El segundo método que vamos a tocar usa PAM, el propio sistema de autenticación de la máquina donde está instalado nuestro servidor de Apache.

Usaremos para ello el módulo mod_auth_pam y lo primero que tenemos que hacer es instalarlo:

“sudo apt-get install libapache2-mod-auth-pam”

En el fichero apache2.conf vamos a introducir la siguiente información referente al directorio “/var/www/contacto”


Si en este caso la directiva usada fuese Require valid-user se permitiría el acceso a cualquier usuario con cuenta en la máquina. Después de esto hay que reiniciar el servicio apache2

Ahora hay que añadir el usuario www-data (el que usa apache) al grupo shadow para que pueda verificar las contraseñas:

“usermod -a -G shadow www-data”

Vamos a hacer un enlace, el motivo de que esto sea necesario es debido a que apache pretende leer del archivo /etc/pam.d/http mientras que el módulo de autenticación ha creado el archivo /etc/pam.d/apache2. El módulo auth_pam hace años que no está soportado y por eso lo hacemos el enlace de la siguiente manera:

“ln -s /etc/pam.d/apache2 /etc/pam.d/httpd”

Y con esto está todo listo. Ahora vamos al navegador a probar la nueva configuración con un usuario “pacopepe” que he creado para esta autenticación


Nos logueamos como pacopepe y vemos que funciona (él será el único usuario del sistema que podrá entrar debido a que solamente declaramos al usuario pacopepe para entrar en el apache2.conf)

No hay comentarios:

Publicar un comentario