Tutorial

Comment configurer l'authentification par mot de passe avec Apache sur Ubuntu 18.04

UbuntuApacheSecurityUbuntu 18.04

Introduction

En tant qu'administrateur web, vous pouvez trouver utile de restreindre certaines parties d'un site web aux visiteurs, que ce soit de manière temporaire ou permanente. Si les apps web peuvent fournir leurs propres méthodes d'authentification et d'autorisation, vous pouvez également compter sur le serveur web lui-même pour restreindre l'accès si celles-ci sont inadéquates ou indisponibles.

Ce tutoriel vous guidera à travers les ressources de protection par mot de passe sur un serveur web Apache fonctionnant sous Ubuntu 18.04 afin de fournir à votre serveur une sécurité supplémentaire.

Conditions préalables

Afin de suivre ce tutoriel, vous devez avoir accès à un serveur Ubuntu 18.04.

De plus, vous aurez besoin de la configuration suivante pour pouvoir commencer :

  • Un utilisateur sudo sur votre serveur : Vous pouvez créer un utilisateur avec des privilèges sudo en suivant le guide de configuration initiale du serveur Ubuntu 18.04.

  • Un serveur web Apache2 : Si vous n'en avez pas encore mis en place, le tutoriel « Comment installer le serveur web Apache sur Ubuntu 18.04 » peut vous guider

  • Un site sécurisé par SSL : la manière dont vous le configurez dépend de la présence ou non d'un nom de domaine pour votre site.

    • Si vous avez un nom de domaine, vous pouvez sécuriser votre site avec Let’s Encrypt, qui fournit des certificats gratuits et fiables. Suivez le guide Let’s Encrypt pour Apache afin de configurer cela.
    • Si vous n'avez pas de domaine et que vous utilisez cette configuration à des fins de test ou pour un usage personnel, vous pouvez à la place utiliser un certificat auto-signé. Cela permet d'obtenir le même type de chiffrement, mais sans la validation du domaine. Suivez le guide SSL auto-signé pour Apache afin d'effectuer la configuration.

Lorsque tous ces éléments sont en place, connectez-vous à votre serveur en tant qu'utilisateur sudo et continuez ci-dessous.

É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

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

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

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
Output
sammy:$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

À 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>

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>

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>

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

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

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

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>

. . .

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

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

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

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

Étape 4 - Confirmez l'authentification par mot de passe

Pour confirmer que votre contenu est protégé, essayez d'accéder à votre contenu protégé dans un navigateur web. Un nom d'utilisateur et un mot de passe devraient vous être demandés, sous la forme suivante

Invite de mot de passe Apache2

Si vous saisissez les identifiants corrects, vous serez autorisé à accéder au contenu. Si vous saisissez des identifiants erronés ou si vous cliquez sur « Annuler », vous verrez apparaître la page d'erreur « Non autorisé » :

Erreur Apache2 Non autorisé

Conclusion

Félicitations. Si vous avez suivi ces étapes, vous avez maintenant mis en place une authentification de base pour votre site.

Vous pouvez faire beaucoup plus avec la configuration d'Apache et le .htaccess. Pour en savoir plus sur la flexibilité et la puissance disponibles dans la configuration d'Apache, essayez l'un de ces tutoriels :

0 Comments

Creative Commons License