Comment configurer l’authentification par mot de passe avec Apache

Étape 1 – Installez le paquet d’utilitaires Apache

Commençons par mettre à jour notre serveur et installer un paquet dont nous aurons besoin. Dans le cadre de ce tutoriel, nous utiliserons un utilitaire appelé htpasswd, qui fait partie du paquet apache2-utils, afin de créer le fichier et gérer le nom d’utilisateur et les mots de passe nécessaires pour accéder au contenu restreint.

sudo apt update
sudo apt install apache2-utils

 Copy

Ceci étant installé, nous avons maintenant accès à la commande htpasswd.

Étape 2 – Créez le fichier de mots de passe

La commande htpasswd nous permettra de créer un fichier de mots de passe qu’Apache pourra utiliser pour authentifier les utilisateurs. Nous allons créer un fichier caché à cet effet, appelé .htpasswd, dans notre répertoire de configuration /etc/apache2.

La première fois que nous utilisons cet utilitaire, nous devons ajouter l’option -c pour créer le fichier de mots de passe spécifié. Nous spécifions un nom d’utilisateur (sammy dans cet exemple) à la fin de la commande pour créer une nouvelle entrée dans le fichier :

sudo htpasswd -c /etc/apache2/.htpasswd sammy

 Copy

Il vous sera demandé de fournir et de confirmer un mot de passe pour l’utilisateur.

Laissez de côté l’argument -c pour tout utilisateur supplémentaire que vous souhaitez ajouter afin de ne pas écraser les données du fichier :

sudo htpasswd /etc/apache2/.htpasswd another_user

 Copy

Si l’on consulte le contenu du dossier, on peut voir le nom d’utilisateur et le mot de passe crypté de chaque enregistrement :

cat /etc/apache2/.htpasswd

 Copy

Outputsammy:$apr1$.0CAabqX$rb8lueIORA/p8UzGPYtGs/
another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1

Nous avons maintenant nos utilisateurs et nos mots de passe dans un format qu’Apache peut lire.

Étape 3 – Configurez l’authentification par mot de passe Apache

Dans cette étape, nous devons configurer Apache pour qu’il vérifie ce fichier avant de servir notre contenu protégé. Nous pouvons le faire de deux manières : soit directement dans le fichier d’hôte virtuel d’un site, soit en plaçant des fichiers .htaccess dans les répertoires qui doivent faire l’objet d’une restriction d’accès. Il est généralement préférable d’utiliser le fichier d’hôte virtuel, mais si vous devez permettre à des utilisateurs non root de gérer leurs propres restrictions d’accès, vérifier les restrictions dans le contrôle de version à côté du site web, ou si vous avez déjà une application web utilisant des fichiers .htaccess à d’autres fins, envisagez la deuxième option.

Choisissez l’option qui répond le mieux à vos besoins.

Option 1 : Configuration du contrôle d’accès dans la définition de l’hôte virtuel (recommandé)

La première option consiste à modifier la configuration d’Apache et à ajouter la protection par mot de passe au fichier de l’hôte virtuel. Cela donne généralement de meilleures performances car cela évite les dépenses liées à la lecture des fichiers de configuration distribués. Cette option nécessite un accès à la configuration, qui n’est pas toujours disponible, mais lorsque vous y avez accès, elle est recommandée.

Commencez par ouvrir le fichier d’hôte virtuel auquel vous souhaitez ajouter une restriction d’accès. Pour notre exemple, nous utiliserons le fichier default-ssl.conf qui contient l’hôte virtuel par défaut installé par le biais du paquet Apache d’Ubuntu. Ouvrez le fichier avec un éditeur de texte en ligne de commande tel que nano :

sudo nano /etc/apache2/sites-enabled/default-ssl.conf

 Copy

À l’intérieur, les commentaires étant dépouillés, le dossier devrait ressembler à celui-ci :/etc/apache2/sites-enabled/default-ssl.conf

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

 Copy

L’authentification se fait par répertoire. Pour mettre en place l’authentification, vous devrez cibler le répertoire dont vous souhaitez restreindre l’accès avec un bloc <Directory ___>. Dans notre exemple, nous allons restreindre la racine (ou root) entière du document, mais vous pouvez modifier cette liste pour ne cibler qu’un répertoire spécifique dans l’espace web :/etc/apache2/sites-enabled/default-ssl.conf

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

  <Directory "/var/www/html">
  </Directory>
</VirtualHost>

 Copy

Dans ce bloc répertoire, précisez que nous mettons en place l’authentification de base. Pour l'AuthName, choisissez un nom de domaine qui sera affiché à l’utilisateur lors de la demande des identifiants. Utilisez la directive AuthUserFile pour faire pointer Apache vers le fichier de mots de passe que nous avons créé. Enfin, exigez que seul un utilisateur valide puisse accéder à cette ressource, ce qui signifie que toute personne pouvant vérifier son identité à l’aide d’un mot de passe sera autorisée à entrer :/etc/apache2/sites-enabled/default-ssl.conf

<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined

  <Directory "/var/www/html">
      AuthType Basic
      AuthName "Restricted Content"
      AuthUserFile /etc/apache2/.htpasswd
      Require valid-user
  </Directory>
</VirtualHost>

 Copy

Enregistrez et fermez le fichier lorsque vous avez terminé. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL+X suivi de Y puis ENTER.

Avant de redémarrer le serveur web, vous pouvez vérifier la configuration à l’aide de la commande suivante :

sudo apache2ctl configtest

 Copy

Si tout se passe bien et que vous obtenez Syntax OK en sortie, vous pouvez redémarrer le serveur pour mettre en œuvre votre politique de mots de passe. Comme systemctl n’affiche pas le résultat de toutes les commandes de gestion des services, nous utiliserons le status pour nous assurer que le serveur fonctionne :

sudo systemctl restart apache2
sudo systemctl status apache2

 Copy

Maintenant, le répertoire que vous avez spécifié doit être protégé par un mot de passe.

Option 2 : Configuration du contrôle d’accès avec des fichiers .htaccess

Apache peut utiliser des fichiers .htaccess afin de permettre à certains éléments de configuration d’être définis dans un répertoire de contenu. Étant donné qu’Apache doit relire ces fichiers à chaque requête impliquant le répertoire, ce qui peut avoir un impact négatif sur les performances, l’option 1 est préférable ; mais si vous utilisez déjà le fichier .htaccess ou si vous devez autoriser des utilisateurs non root à gérer les restrictions, les fichiers .htaccess sont intéressants.

Pour activer la protection par mot de passe à l’aide de fichiers .htaccess, ouvrez le fichier de configuration principal d’Apache avec un éditeur de texte en ligne de commande tel que nano :

sudo nano /etc/apache2/apache2.conf

 Copy

Trouvez le bloc <Directory> pour le répertoire /var/www qui contient la racine (ou root) du document. Activez le traitement .htaccess en faisant passer la directive AllowOverride dans ce bloc de None à All :/etc/apache2/apache2.conf

. . .

<Directory /var/www/>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>

. . .

 Copy

Enregistrez et fermez le fichier lorsque vous avez terminé. Si vous utilisez nano, vous pouvez le faire en appuyant sur CTRL+X suivi de Y puis ENTER.

Ensuite, nous devons ajouter un .htaccess au répertoire dont nous souhaitons restreindre l’accès. Dans notre démonstration, nous allons restreindre l’ensemble de la racine (ou root) du document (tout le site web) qui se trouve dans /var/www/html, mais vous pouvez placer ce fichier dans n’importe quel répertoire pour lequel vous souhaitez restreindre l’accès :

sudo nano /var/www/html/.htaccess

 Copy

Dans ce fichier, précisez que nous souhaitons mettre en place une authentification de base. Pour l'AuthName, choisissez un nom de domaine qui sera affiché à l’utilisateur lors de la demande des identifiants. Utilisez la directive AuthUserFile pour faire pointer Apache vers le fichier de mots de passe que nous avons créé. Enfin, nous aurons besoin d’un utilisateur valide pour accéder à cette ressource, ce qui signifie que toute personne pouvant vérifier son identité avec un mot de passe sera autorisée à entrer :/var/www/html/.htaccess

AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

 Copy

Enregistrez et fermez le fichier. Redémarrez le serveur web pour protéger par mot de passe tout le contenu situé dans le répertoire ou en dessous avec le fichier .htaccess et utilisez systemctl status pour vérifier le succès du redémarrage :

sudo systemctl restart apache2
sudo systemctl status apache2

 Copy

Maintenant, le répertoire que vous avez spécifié doit être protégé par un mot de passe.