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.)