> Manuales > Instalación y configuración de Apache

Cómo proteger una carpeta y Autentificación y autorización de usuarios con Mysql y Apache. mod_auth_mysql.

1º. Crear un fichero de claves fuera de la parte pública:

   -htpasswd -c /ruta/passwords Carlos

Al hacerlo, pedirá que se introduzca la clave, y esta será codificada, escribiendo el fichero.

2º Crear un nuevo fichero, en la misma ubicación que "ruta", que se llamará "groups" en la que se almacenarán los grupos, por ahora uno, para ello escribir la siguiente línea y guardar el fichero:

   usuariosAutenticados: Carlos

De esta forma, debería tener un fichero que se llame passwords, y que contenga una línea con los datos del usuario Carlos, y un fichero, con nombre groups, que contiene una línea definiendo un grupo llamado usuariosAutenticados, del que sólo el usuario Carlos forma parte.

3º Crear un fichero con el nombre .htaccess en la carpeta que se quiere proteger, y escribir las siguientes líneas y guardar el fichero:

AuthType Basic
AuthName "ServidorPruebasCarlos"
AuthUserFile /ruta/passwords
AuthGroupFile /ruta/groups
Require group usuariosAutenticados

La explicación del contenido del fichero es la siguiente:


En vez de realizar las autorizaciones a grupos completos, se puede autorizar a un usuario determinado cambiando la última línea por "Require user Carlos", de esta forma sólo se autorizará al usuario Carlos.

Se puede permitir el acceso a todos los usuarios identificados mediante la introducción de la siguiente directiva "Require valid-user". El hecho de que esta directiva este incluida en el fichero, hace que las demás no tengan efecto.

Autentificación y autorización de usuarios con Mysql y Apache. mod_auth_mysql.

En capítulos anteriores hemos explicado como controlar la autentificación y la autorización de usuarios con el mod_auth. Este módulo tiene como característica el que almacena los nombres de usuario, las contraseñas y los grupos en ficheros de texto que deben ser escritos y gestionados por el administrador del sistema. Esta solución es obviamente poco escalable, ya que en cuanto el número de usuarios y de grupos es elevado, el gestionarlos y controlarlos puede ser un problema.

Por este motivo existe el mod_auth_mysql, este módulo permite gestionar la autentificación y autorización, almacenando los usuarios y los grupos en tablas de Mysql, de forma que incluso se pueden gestionar mediante un panel de control escrito en php.

Para configurar el módulo en Linux, será necesario extraerlo y ejecutar:

./configure --with-mysql=/usr/local/mysql --with-apache=/usr/local/apache

sustituyendo el lugar donde se encuentra la instalación de mysql y de apache.

Para utilizar el módulo es necesario disponer de al menos una tabla donde se almacenen los usuarios y otra donde se almacenen los grupos. Para ello se puede crear una tabla usuarios con los campos, nombre y password, y otra tabla llamada grupos con los campos grupo, usuario, almacenando una entrada por cada usuario que tenga un grupo.

La configuración es la siguiente:

En primer lugar será necesario establecer el servidor, el usuario y la contraseña de la conexión con la base de datos, esto se hará escribiendo la siguiente línea en el fichero httpd.conf, y reemplazando los valores por los correctos:

Auth_MySQL_Info <host> <user> <password>

Para configurar el módulo será necesario establecer los valores de las siguientes directivas del módulo:

Auth_MySQL_DB: nombre de la base de datos
Auth_MySQL_Password_Table: nombre de la base de datos que contiene los nombres de usuario y las contraseñas.
Auth_MySQL_Username_Field: nombre del campo de la tabla que contiene al usuario.
Auth_MySQL_Password_Field: nombre del campo de la tabla que contiene la contraseña del usuario.
Auth_MySQL_Group_Table: nombre de la tabla que contiene los usuarios y los grupos a los que pertenecen.
Auth_MySQL_Group_Field: nombre del campo de la tabla que contiene el nombre del grupo
Auth_MySQL_Empty_Passwords on/off para determinar si se aceptan usuarios con contraseñas vacias.
Auth_MySQL_Encryption_Types para especificar el tipo de encriptación que se utilizará para almacenar la clave del usuario dentro de la base de datos.
Auth_MySQL_Non_Persistent on/off para especificar si se desean utilizar conexiones persistentes.

Además será necesario establecer las siguiente directivas de core para su correcto funcionamiento:

AuthName: con el nombre del dominio
AuthType: establecido a Basic

Una vez puesto en marcha, el funcionamiento es análogo al módulo mod_auth.

Carlos Luis Cuenca

Carlos es ingeniero informático por la UPM (Politécnico de Madrid), especializad...

Manual