Apache2 & authentification http & stockage login/mot de passe en base MySQL
Par Yoann le lundi, 24 août 2009, 10:00 - L1nuX and c0 - Lien permanent
L'authentification HTTP, avec le stockage des login/mot de passe dans une base mysql c'est simple ... mais pas si simple ..
Historiquement, le package du module de apache permettant cette authentification etait disponible dans la version 3.0 (sarge) de Debian. Il avait completement disparu avec la version 4.0 (etch) et le revoilà maintenant de nouveau dans la version 5.0 (lenny)
Voici en detail la mise en place de cette authentification.
Il pourra d'ailleur être interessant d'utiliser une base de données déjà existant, afin de centraliser la gestion des identifiants.
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.)
Commentaires
D'après http://www.cgi101.com/book/ch20/mod... les directives sont différentes (par exemple Auth_MySQL_Password_Table et pas AuthMySQL_Password_Table)
Qui a tort ou raison?
@Dany,
Surement en fonction de la version utilisé ... LE lien que tu cites utilise surement une version bien ancienne.
Le mieux est encore de regarder sur le site du projet : http://modauthmysql.sourceforge.net...
Visiblement, j'ai raison :-)