Authentification apache sur la base de données Mysql de postfix VHOST

J'ai besoin de limiter l'accès à un repertoire web. Le but est de ne pas refaire une énième base de données ou fichier contenant des noms et comptes utilisateurs. Mais je ne me sens pas d'attaque non plus ce soir pour installer un annuaire LDAP.

Description du système en place

J'ai utilisé le tutoriel de starbridge pour le serveur mails.

la database se nome postfix et la table contenant les informations pour l'identification se nomme mailbox.

mysql> describe mailbox;
+------------+--------------+------+-----+---------------------+-------+
| Field      | Type         | Null | Key | Default             | Extra |
+------------+--------------+------+-----+---------------------+-------+
| username   | varchar(255) | NO   | PRI |                     |       | 
| password   | varchar(255) | NO   |     |                     |       | 
| name       | varchar(255) | NO   |     | NULL                |       | 
| maildir    | varchar(255) | NO   |     |                     |       | 
| quota      | bigint(20)   | NO   |     | 0                   |       | 
| local_part | varchar(255) | NO   |     | NULL                |       | 
| domain     | varchar(255) | NO   |     |                     |       | 
| created    | datetime     | NO   |     | 0000-00-00 00:00:00 |       | 
| modified   | datetime     | NO   |     | 0000-00-00 00:00:00 |       | 
| active     | tinyint(1)   | NO   |     | 1                   |       | 
+------------+--------------+------+-----+---------------------+-------+
10 rows in set (0.01 sec)

Ce sont donc les champs username, password et active qui nous intéressent.

Créer un compte mysql qui aura juste accès en lecture à cette table.

En root dans le prompt mysql:

Pensez à remplacer serveurweb_password par le mot de passe de votre choix.

GRANT SELECT ON postfix.mailbox TO 'serveurweb'@'localhost' IDENTIFIED BY 'serveurweb_password';
FLUSH PRIVILEGES;

On ajoute dans le fichier de description du vhost correspondant:

           
   <Directory "/var/www/AccessLimited">
 AuthType Basic
       AuthName "Acces restreint"
       AuthBasicAuthoritative Off
       AuthUserFile /dev/null
       AuthMySQL On
       AuthMySQL_Authoritative      on
       AuthMySQL_Host               localhost
       AuthMySQL_DB                 postfix
       AuthMySQL_User               serveurweb
       AuthMySQL_Password           serveurweb_password
       AuthMySQL_Password_Table     mailbox
       AuthMySQL_Group_Table        mailbox
       AuthMySQL_Username_Field     username
       AuthMySQL_Password_Field     password
       AuthMySQL_Group_Field        active
       AuthMySQL_Encryption_Types   Crypt_MD5
       Require group                1
</Directory>
           

Le require group 1 me permet de restreindre l'accès aux comptes mails valides actifs uniquement.

Ajouter le module appache pour l'authentification mysql.

apt-get install libapache2-mod-auth-mysql
a2enmod auth_mysql
/etc/init.d/apache2 restart

Voila voila... C'était le défi de la journée (je ne maîtrise pas toutes les subtilités d'apache.)

un tuto tout simple pour comperndre auth_mysql

Page top