GNU/Linux >> Tutoriels Linux >  >> Debian

Comment protéger les répertoires par mot de passe 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 des 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 mot de passe en texte brut fournis par mod_auth et vous permet d'utiliser la syntaxe SQL normale pour créer/modifier supprimer des utilisateurs. Vous pouvez également configurer mod_authn_dbd pour s'authentifier auprès d'une table d'utilisateurs MySQL existante. L'apache mod_authn_dbd remplace mod_auth_mysql.

1 Remarque 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 la racine du document /var/www/www.example.com/web. Je souhaite protéger par mot de passe le répertoire /var/www/example.com/web/protecteddir dans ce tutoriel (se traduit par http://www.example.com/protecteddir/).

Vous pouvez utiliser ce didacticiel pour le serveur LAMP de base si vous n'avez pas encore installé Apache.

2 Installer MySQL ou MariaDB

Je vais utiliser MariaDB, un fork MySQL ici au lieu de MySQL. Mais MySQL fonctionne aussi bien si vous préférez cela. Pour installer MariaDB, nous lançons :

apt-get -y install mariadb-server mariadb-client

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

Nouveau mot de passe pour l'utilisateur "root" de MariaDB :<-- yourrootsqlpassword
Répétez le mot de passe pour l'utilisateur "root" de 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 restart

3 Configuration de mod_authn_dbd

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

Après avoir lu ces deux fichiers, nous créons une base de données MySQL appelée examplecomdb dans laquelle nous allons créer la table mysql_auth qui contiendra nos utilisateurs et mots de passe. En plus de cela, nous créons l'utilisateur MySQL examplecom_admin - cet utilisateur sera utilisé par mod_auth_mysql pour se connecter à MySQL ultérieurement :

mysqladmin -u root -p create examplecomdb
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 examplecom_admin_password par un mot de passe de votre choix.)

USE examplecomdb;
create table mysql_auth (
username varchar(255) not null,
passwd varchar(255),
groups varchar(255),
primary key (username)
);

(Bien sûr, vous pouvez également 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 utilisateur dans notre table mysql_auth avec le mot de passe test; cet utilisateur appartient au groupe testgroup.

Le mot de passe doit être haché, j'utiliserai ici un hachage SHA1, le hachage peut être créé avec la commande htpasswd sur le shell Linux :

htpasswd -bns test  test

Le résultat est le suivant :

test:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=

La première partie est le nom d'utilisateur "test", séparé par ":" puis vient le mot de passe haché. Nous avons besoin du mot de passe haché "{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=" uniquement pour l'insérer dans notre base de données d'utilisateurs. La requête MySQL est la suivante :

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

Ensuite, nous quittons le shell MySQL :

quit

La configuration de mod_authn_dbd doit être incluse dans le fichier vhost, elle ne peut pas être ajoutée dans un fichier .htaccess. Par conséquent, nous éditons 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 "dbname=examplecomdb user=examplecom_admin pass=examplecom_admin_password"

DBDMin 4
DBDKeep 8
DBDMax 20
DBDExptime 300

<Directory "/var/www/example.com/web/protecteddir">
# mod_authn_core and mod_auth_basic configuration
# for mod_authn_dbd
AuthType Basic
AuthName "My Server"

# To cache credentials, put socache ahead of dbd here
AuthBasicProvider socache dbd

# Also required for caching: tell the cache to cache dbd lookups!
AuthnCacheProvideFor dbd
AuthnCacheContext my-server

# mod_authz_core configuration
Require valid-user

# mod_authn_dbd SQL query to authenticate a user
AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s"
</Directory>

Recharger Apache :

service apache2 reload

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

[...]
AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s and active = 'yes'"
[...]

La directive require valid-user permet à chaque utilisateur répertorié dans la table mysql_auth de se connecter tant qu'il fournit le mot de passe correct. Si vous souhaitez que seuls certains utilisateurs soient autorisés à se connecter, vous utiliserez quelque chose comme

[...]
require user jane joe
[...]

Au lieu. Et si vous souhaitez que seuls les membres de certains groupes soient autorisés à se connecter, vous utiliserez quelque chose comme ceci :

[...]
require group testgroup
[...]

C'est ça! Essayez maintenant d'accéder à http://www.example.com/protecteddir/, et on devrait vous demander un nom d'utilisateur et un mot de passe :

  • Apache :http://httpd.apache.org/
  • Debian :http://www.debian.org/
  • mod_authn_dbd : http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html

Debian
  1. Comment installer et sécuriser phpMyAdmin avec Apache sur Ubuntu 18.04

  2. Comment installer et sécuriser phpMyAdmin avec Apache sur Debian 9

  3. Comment installer et configurer Zabbix sur Debian 9 Linux

  4. Comment ajouter et supprimer des utilisateurs sur Debian 9

  5. Comment créer et supprimer un utilisateur sur Debian 9

Comment installer WordPress avec Apache et Let's Encrypt SSL sur Debian 11

Comment installer et configurer le serveur Web Apache avec l'hôte virtuel sur Debian 10

Comment ajouter et supprimer des utilisateurs dans Debian

Comment installer Apache avec PHP-FPM sur Debian 10

Comment installer et configurer Apache sur Debian 11 ?

Comment installer Drupal avec Apache sur Debian et Ubuntu