miércoles, 9 de noviembre de 2011

Apache, autentificación de usuarios con mysql

   Utilizando el módulo libapache2-mod-auth-mysql, configura un sitio virtual cuyo acceso sea autentificado mediante usuarios guardados en un tabla MySql. Nota: las contraseñas de los usarios se deben guardas encriptadas.
Este modulo no esta por defecto en apache2, así que tendremos que instalarlos. Esta en los repositorios así que para descargarlo y activarlo hacemos lo siguiente:
~# aptitude install libapache2-mod-auth-mysql
~# a2enmod auth_mysql
   Para este modulo, necesitaremos crear una base de datos y unas tablas.
mysql> create database apache2
mysql> grant all on apache2.* to juanlu@'localhost'
              identified by 'juanlu';
mysql> use apache2;
mysql> create table clientes(
             nombre varchar(25) not null,
             pass varchar(44) not null,
             primary key (nombre));
   Para encriptar las contraseñas utilizaremos el cifrado Crypt. Para ello podemos hacer dos cosas.
  1. Al crear la base de datos, en el insert, ponemos un parámetro para que la encripte. Los insert serian así:
    INSERT INTO `apache2`.`clientes`
    VALUES (
    'maria', ENCRYPT( 'maria' )
    );
  2. Antes de crear la base de datos utilizamos el programa htpasswd. Este programa se instala al instalar uno de los modulos de apache2. Seria de la siguiente manera.
    ~# aptitude install libapache2-mod-auth-pam
    Ya tendriamos instalado el programa. Para usarlo simplemente:
    ~# htpasswd claves.txt Jose
    *claves.txt, seria el fichero donde se guardan usuario y contraseña. Jose seria el usuario y la contraseña te la pediría. Después simplemente a el insertar los datos, hacemos un insert normal, y ponemos la contraseña del fichero.
  Tras estos pasos, ya tenemos configurada nuestra base de datos con los usuarios y sus contraseñas. Ahora tenemos que configurar el VirtualHost. Para ello creamos el arhcivo /etc/apache2/sites-available/mysql. Lo editamos, y tiene que quedar de este modo:
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName bobesponja.mysql
        DocumentRoot /var/www/mysql
        <Directory /var/www/mysql/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
               AuthType Basic
               AuthName "Usuario y contraseña"   # Texto que te aparecerá
               AuthBasicAuthoritative Off
               AuthUserFile /dev/null
               AuthMYSQL on
               AuthMySQL_Authoritative on
               AuthMySQL_DB apache2   # Nombre de la base de datos
               AuthMySQL_Host localhost
               AuthMySQL_User juanlu   # Usuario de la base de datos
               AuthMySQL_Password juanlu   # Contraseña del usuario
               AuthMySQL_Password_Table clientes   # Nombre de la tabla
               AuthMySQL_Username_Field nombre   # Fila de los nombres
               AuthMySQL_Password_Field pass   # Fila de las contraseñas
               AuthMySQL_Empty_Passwords off
               AuthMySQL_Encryption_Types Crypt   # Tipo de cifrado
               Require valid-user
  </Directory>
</VirtualHost>
  Las palabras en negrita, son las mas importantes, pueden cambiar dependiendo de como sea nuestra base de datos o de la encriptación en el caso de Crypt. Se podría encriptar también con otro tipo de encriptación como sha1 o md5.

5 comentarios:

  1. Muy bueno, Juanlu, pero una "cosita": quizás estaría mejor usar el verbo autentificar que identificar en el título.

    Un saludo

    ResponderEliminar
  2. Gracias josedomingo, ya esta cambiado.

    Saludos

    ResponderEliminar
  3. Muchas gracias, muy claro y útil

    ResponderEliminar
  4. Respuestas
    1. ¿A que te refieres con que si se hacerlo para grupos? Esto es una tabla en la base de datos, donde tienes a los usuarios y sus contraseñas encriptadas. Puede agregar todos los usuarios que quieras. El usuario que no este agregado, no podrá ver la pagina.

      Eliminar