Comment protéger par mot de passe les répertoires avec mod_authn_dbd et MySQL sur Apache (Debian 8)

 

Ce guide explique comment protéger par mot de passe les répertoires Web (avec les utilisateurs d'une base de données MySQL) avec mod_authn_dbd sur Apache2 sur un serveur Debian 8 (Jessie). C'est une alternative aux fichiers de mots de passe en texte brut fournis par mod_auth et vous permet d'utiliser une syntaxe SQL normale pour créer / modifier des utilisateurs supprimés. Vous pouvez également configurer mod_authn_dbd pour s'authentifier sur une table utilisateur MySQL existante. L'apache mod_authn_dbd est un remplacement de mod_auth_mysql.

1 Note préliminaire

J'utilise le vhost http://www.example.com ici avec le fichier de configuration vhost /etc/apache2/sites-available/example.com.vhost et le document root /var/www.example.com/web. Je veux protéger par mot de passe le répertoire /var/www/example.com/web/protecteddir dans ce tutoriel (traduit par http://www.example.com/protecteddir/).

Vous pouvez utiliser ce tutoriel pour la base Serveur LAMP si vous n'avez pas encore installé Apache.

2 Installation de MySQL ou MariaDB

Je vais utiliser MariaDB, une fourchette MySQL ici à la place de MySQL. Mais MySQL fonctionne aussi bien si vous préférez ça. Pour installer MariaDB, nous courons:

apt-get -y installer mariadb-serveur mariadb-client

Il vous sera demandé de fournir un mot de passe pour l'utilisateur root de MySQL:

Nouveau mot de passe pour l'utilisateur "root" MariaDB: <- yourrootsqlpassword
Répétez le mot de passe pour l'utilisateur "root" MariaDB: <- yourrootsqlpassword

Installez le module DBD MySQL:

apt-get install libaprutil1-dbd-mysql

Ensuite, activez le module mod_authn_dbd:

a2enmod dbd
a2enmod authn_dbd
authn_socache

Redémarrez Apache:

service apache2 redémarre

3 Configuration de mod_authn_dbd

Vous pouvez trouver la documentation de mod_authn_dbd dans la documentation Apache ici http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html.

Having read these two files, we create a MySQL database called examplecomdb in which we will create the table mysql_auth which will contain our users and passwords. In addition to that we create the MySQL user examplecom_admin – this user will be used by mod_auth_mysql to connect to MySQL later on:

mysqladmin -u root -p crée exemplecomdb

mysql -u root -p

GRANT SELECT, INSERT, UPDATE, DELETE ON examplecomdb.* TO ‘examplecom_admin’@’localhost’ IDENTIFIED BY ‘examplecom_admin_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON examplecomdb.* TO ‘examplecom_admin’@’localhost.localdomain’ IDENTIFIED BY ‘examplecom_admin_password’;
FLUSH PRIVILEGES;

(Remplacez le mot de passe examplecom_admin_password par un mot de passe de votre choix.)

UTILISATION examplecomdb;

créer une table mysql_auth (
nom d'utilisateur varchar (255) non nul,
passwd varchar (255),
groupes varchar (255),
clé primaire (nom d'utilisateur)
);

(Bien sûr, vous pouvez aussi bien utiliser des tables existantes contenant vos informations d'identification d'utilisateur, et vous pouvez également avoir des champs supplémentaires dans la table, comme un champ qui définit si un utilisateur est actif ou non, par exemple.)

Maintenant, nous insérons le test de l'utilisateur dans notre table mysql_auth avec le test de mot de passe; cet utilisateur appartient au groupe de test du groupe.

Le mot de passe doit être haché, je vais utiliser un hachage SHA1 ici, le hash peut être créé avec la commande htpasswd sur le shell Linux:

test de test htpasswd -bns

Le résultat est la suivante:

test:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=

The first part is the username “test”, separated by “:” and then comes the hashed password. We need the hashed password “{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=” only to insert it into our user database. The MySQL query is this:

INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES(‘test’, ‘{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=’, ‘testgroup’);

Ensuite, nous quittons le shell MySQL:

quitter

La configuration pour mod_authn_dbd étant incluse dans le fichier vhost, elle ne peut pas être ajoutée dans un fichier .htaccess. Nous éditons donc le fichier vhost et ajoutons la configuration suivante à la fin du fichier:

nano /etc/apache2/sites-available/example.com.vhost

[...] # mod_dbd configuration DBDriver mysql DBDParams "nom_base = exemple_exemple_utilisateur = exemple_exemple_passage = mot_de_passe_abonnement_examplecom" DBDMin 4 DBDKeep 8 DBDMax 20 DBDExptime 300 <Répertoire "/var/www/example.com/web/protecteddir"> # mod_authn_core mod_auth_basic configuration # pour mod_authn_dbd AuthType Basic AuthName "My Server" # Pour mettre en cache les informations d'identification, placez socache en avance sur dbd ici AuthBasicProvider socache dbd # Aussi nécessaire pour la mise en cache: indique au cache de mettre en cache les recherches dbd! AuthnCacheProvideFor dbd AuthnCacheContext my-server # configuration mod_authz_core Exiger un utilisateur valide # mod_authn_dbd Requête SQL pour authentifier un utilisateur AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE nom d'utilisateur =% s" </ Directory>

Recharger Apache:

service apache2 recharger

Si vous avez des champs supplémentaires dans votre table MySQL qui définissent si un utilisateur est autorisé à se connecter ou pas (par exemple un champ appelé actif), vous pouvez l'ajouter à la requête utilisateur SQL comme ceci:

[...] AuthDBDUserPWQuery "SELECT passwd DE mysql_auth O WH nom d'utilisateur =% s et actif = 'oui'" [...]

The require valid-user directive makes that each user listed in the mysql_auth table can log in as long as he/she provides the correct password. If you only want certain users to be allowed to log in, you’d use something like

[...] requérir l'utilisateur jane joe [...]

instead. And if you only want members of certain groups to be allowed to log in, you’d use something like this:

[...] nécessitent un groupe de test [...]

That’s it! Now try to access http://www.example.com/protecteddir/, and you should be asked for a username and password:

Entrez le nom d&#39;utilisateur et le mot de passe.

La connexion a réussi.

4 Liens

Source

Laisser un commentaire

Ce site utilise Akismet pour réduire les spams. Découvrez comment vos données de commentaire sont traitées.

GTranslate Your license is inactive or expired, please subscribe again!