Pré-requis

Nous avons bien sur besoin d'un serveur apache & d'une base de données mysql

 aptitude install apache2 mysql-server

Installation du packages

On install le module apache permettant l'authentification mysql :

 aptitude install libapache2-mod-auth-mysql

On active ce module :

 a2enmod auth_mysql

Recharger apache2 pour prendre en compte les changements :

 /etc/init.d/apache2 reload

Voila c'est installer !!

Création de la base mysql

 mysqladmin --user=root -p create httpauth

(saisir le mot de passe root mysql)

Creation de l'utilisateur mysql pour l'authentification

Nous pourrions nous connecter en root à notre base de données httpauth mais nous allons préférer créer un utilisateur mysql spécifique qui ne pourra accèder qu'a la base de données httpauth.

Nous allons appeler cette utilisateur : httpauth

Remplacer ci dessous <password_mysql_httpauth> pas le mot de passe que vous souhaitez donner à l'utilisateur httpauth

 mysql -u root -p mysql
 mysql> GRANT ALL ON httpauth.* TO httpauth@localhost IDENTIFIED BY '<password_mysql_httpauth>';
 mysql> flush privileges;
 mysql> quit;

Nous avons donc maintenant :

  • Une base de données : httpauth
  • Un utilisateur mysql : httpauth qui ne peux accèder qu'a la base de données httpauth

Creation de la table users

 mysql -u root -p httpauth
 CREATE TABLE `users` (
 `username` varchar(25) NOT NULL default '',
 `password` varchar(25) NOT NULL default '',
 `groups` varchar(25) NOT NULL default '',
 PRIMARY KEY (`username`),
 KEY `groups` (`groups`)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Modifier votre vhosts

Ici je modifie le Vhosts par default, a vous de l'adapter en fonction de vos besoin.

On edite le fichier /etc/apache2/sites-enabled/000-default afin d'y ajouter AuthConfig à la directive AllowOverride.

Cela va nous permettre de gérer la configuration de l'authentification dans un fichier .htaccess

 <Directory />
   Options Indexes MultiViews FollowSymLinks
   AllowOverride AuthConfig Options FileInfo Limit
 </Directory>

Créer le fichier .htaccess contenant la configuration de l'authentification

Le fichier .htaccess doit être placé dans votre arboresence web (/var/www/ ?) à l'endroit où vous souhaitez qu'il y ai l'authentification.

 AuthMYSQL on
 AuthMySQL_Authoritative on
 AuthMySQL_Host localhost
 AuthMySQL_User httpauth
 AuthMySQL_Password <mot de passe mysql>
 AuthMySQL_DB httpauth
 AuthMySQL_Password_Table users
 AuthMySQL_Empty_Passwords off
 AuthMySQL_Encrypted_Passwords On
 AuthMySQL_Encryption_Types Crypt_MD5 Plaintext Crypt_DES PHP_MD5
 AuthMySQL_Username_Field username
 AuthMySQL_Password_Field password
 
 AuthName "private"
 AuthType Basic
 AuthBasicAuthoritative Off
 
 AuthUserFile /dev/null
 
 Require valid-user

Ajout d'un utilisateur dans la base de données

 mysql -u root -p httpauth
 INSERT INTO `users` VALUES ('<username>', '<password>', '<group>');

Changer <username>, <password> et <group> a votre convenance.

Le mot de passe peut également être encrypté comme suis :

 INSERT INTO `users` VALUES ('<username>',ENCRYPT( '<password>'), '<group>');

Ici le group n'est pas pris en compte dans notre configuration. (Il faut encore que je face quelques tests.)