miércoles, 27 de noviembre de 2013

Autenticación en Apache basada en PAM


Siguiendo con los artículos en que trataba la autenticación en Apache, además de la autenticación básica y la basada en LDAP, nos queda la basada en PAM, es decir, empleando las propias cuentas de usuario que se emplean en el propio equipo. Es importante señalar que sino empleamos encriptación (ssl/https) las contraseñas viajarán en plano, con lo que estamos exponiendo las contraseñas de sistema de nuestros usuarios, es decir, en un sistema real deberíamos combinar el artículo de certificados en Apache con este (en cualquier caso siempre que sea necesaria la autenticación en un sistema se debe encriptar el tráfico).
Para este artículo he empleado como material base el artículo del blog unlugarenelmundo que trata este tema de una manera muy sencilla.

En primer lugar instalamos el módulo mod_auth_pam:
# sudo apt-get install libapache2-mod-auth-pam


y lo habilitamos:

# sudo a2enmod auth_pam

A continuación añadimos el usuario www-data (de Apache) al grupo shadow para que pueda verificar contraseñas:
  #sudo usermod –a –G shadow www-data
Creamos el siguiente enlace “Ignoro la causa, pero el motivo de que esto sea necesario es debido a que apache (en los binarios de Debian y Ubuntu, al menos) pretende leer del archivo /etc/pam.d/http mientras que el módulo de autenticación ha creado el archvo /etc/pam.d/apache2. El módulo auth_pam hace años que no está soportado e imagino que esto tiene algo que ver, pero no lo se a ciencia cierta.”
#sudo ln -s /etc/pam.d/apache2 /etc/pam.d/httpd
Por último modificamos el fichero de configuración para añadir el acceso a nuestro directorio empleando dicha configuración. Por ejemplo para configurar el acceso al directorio /var/www/mczones/privado2, haríamos:
<Directory "/var/www/mczones/privado2">

     AuthType Basic

     AuthName "Palabra de paso"

     AuthPAM_Enabled On

     AuthBasicAuthoritative Off

     AuthUserFile /dev/null

     Require user juan c1


</Directory>

Empleando ambas configuraciones  a la vez (básica y Pam) en dos directorios:
 #  Fichero mczones (/etc/apache2/sites-available/mczones)

<VirtualHost *:80>
ServerAdmin webmaster@mczones.es
ServerName  www.mczones.es
ServerAlias mczones.es
DirectoryIndex index.html
DocumentRoot /var/www/mczones/
<directory />
Options FollowSymLinks
AllowOverride None
</directory>
<directory /var/www/mczones>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</directory>
<directory /var/www/mczones/privado>
AllowOverride AuthConfig
AuthType Basic
AuthName "Acceso restringido a alumnos A Carballeira"
# (La siguiente línea es opcional)
AuthBasicProvider file
AuthUserFile /etc/apache2/mczones/passwords
Require user juan
Order allow,deny
Allow from all
</directory>

<directory /var/www/mczones/privado2>
AllowOverride AuthConfig
AuthType Basic
AuthName "Acceso restringido a alumnos A Carballeira PAM"
# (La siguiente línea es opcional)
AuthPAM_Enabled On
AuthBasicAuthoritative Off
AuthUserFile /dev/null
Require user c1
</directory>


</VirtualHost>
Enlaces:
http://www.unlugarenelmundo.es/2010/03/13/autenticacion-en-apache-basica-y-pam/