Authentification Apache via MySQL sur Ubuntu 20.04


Apache, MySQL, Ubuntu / mardi, avril 12th, 2022

-Supposons que vous souhaitiez restreindre l’accès d’un répertoire de votre site aux seuls utilisateurs autorisés authentifiés via un mot de passe stocké dans une base de données MySQL/MariaDB

-Supposons que ce répertoire soit /home/SITE/www/Admin/

-Supposons que la base de donnée soit nommée DBNAME, que l’utilisateur MySQL DBUSER soit autorisé à y accéder via le mot de passe DBPASSWORD

-Supposons que la table MySQL de contenant la liste des utilisateurs autorisés ait été créé ainsi

CREATE TABLE SiteAdmins (
admin_login varchar(16) NOT NULL DEFAULT '',
admin_password varchar(16) NOT NULL DEFAULT 'DESIRED_DEFAULT_PASSWORD',
admin_email varchar(255) NOT NULL DEFAULT 'default_email@site.tld',
admin_pseudo varchar(16) DEFAULT NULL,
admin_firstname varchar(16) DEFAULT NULL,
admin_name varchar(16) DEFAULT NULL,
PRIMARY KEY (admin_login),
KEY admin_pseudo (admin_pseudo)
) ENGINE=InnoDB DEFAULT

-Supposons qu’un administrateur du site ait l’identifiant TESTDEMO avec le mot de passe TESDEMOPASSWORD

Il aurait été créé ainsi :

INSERT INTO Admin (admin_login, admin_password) VALUES ('TESTDEMO','TESDEMOPASSWORD');

Voici comment procéder

1° Installer la librairie nécessaire

aptitude install libaprutil1-dbd-mysql


2° Activer les modules apache

a2enmod authn_dbd dbd

3° Ajouter les instructions suivantes à votre virtualhost

<IfModule mod_dbd.c>
    DBDriver mysql
    DBDParams "dbname=DBNAME user=DBUSER pass=DBPASSWORD"
    DBDMin 1
    DBDKeep 1
    DBDMax 20
    DBDExptime 10
    DBDPersist Off
</IfModule>

   <Directory /home/SITE/www/Admin/>
        AuthName "SITE-Admin Area"
        AuthType Basic
        AuthBasicProvider dbd
        AuthDBDUserPWQuery "SELECT encrypt(admin_password) AS password FROM Admin WHERE admin_login = %s"
        Require valid-user
    </Directory>

4° Redemarrer Apache

systemctl restart apache2

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *