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