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

De Get Docs
Aller à :navigation, rechercher

Introduction

En tant qu'administrateur Web, vous pouvez trouver utile de restreindre l'accès de certaines parties d'un site Web aux visiteurs, que ce soit de manière temporaire ou permanente. Bien que les applications Web puissent 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 didacticiel vous guidera à travers les ressources de protection par mot de passe sur un serveur Web Apache fonctionnant sous Ubuntu 20.04. Cela fournira à votre serveur une couche de sécurité supplémentaire.

Conditions préalables

Pour terminer ce tutoriel, vous aurez besoin de :

  • Un serveur Ubuntu 20.04 configuré avec un utilisateur non root avec des privilèges sudo et un pare-feu activé. Vous pouvez le faire en suivant le Guide de configuration initiale du serveur Ubuntu 20.04.
  • Le serveur Web Apache installé sur votre serveur Ubuntu. Si vous n'en avez pas déjà configuré un, le tutoriel Comment installer le serveur Web Apache sur Ubuntu 20.04 peut vous guider. Assurez-vous de terminer l'Étape 5 et de disposer d'un fichier d'hôte virtuel pour votre domaine. Ce didacticiel fera référence à votre_domaine comme exemple tout au long et utilisera /etc/apache2/sites-available/your_domain.conf pour le fichier d'hôte virtuel.
  • Votre hôte virtuel sécurisé avec SSL. Cette configuration dépend si vous avez 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 pour le configurer.
    • Si vous n'avez pas de domaine et que vous utilisez cette configuration à des fins de test ou à des fins personnelles, vous pouvez utiliser un certificat auto-signé à la place. Cela fournit le même type de cryptage, mais sans validation de domaine. Suivez le guide SSL auto-signé pour Apache pour vous installer.
  • Si vous souhaitez configurer un domaine (facultatif), vous pouvez le faire en achetant un nom de domaine sur Namecheap, en obtenir un gratuitement sur Freenom, ou utiliser le registraire de domaine de votre choix. De plus, vous aurez besoin des deux enregistrements DNS suivants configurés pour votre serveur. Suivez cette introduction à DigitalOcean DNS pour plus de détails sur la façon de les ajouter.
    • Un enregistrement A avec your_domain pointant vers l'adresse IP publique de votre serveur.
    • Un enregistrement A avec www.your_domain pointant vers l'adresse IP publique de votre serveur.

Une fois ces prérequis remplis, connectez-vous à votre serveur en tant qu'utilisateur sudo et passez à la première étape.

Étape 1 - Installation du package d'utilitaires Apache

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

Tout d'abord, mettez à jour l'index des packages de votre serveur :

sudo apt update

Installez ensuite le package d'utilitaires Apache :

sudo apt install apache2-utils

Avec ceci installé, vous avez maintenant accès à la commande htpasswd.

Étape 2 - Création du fichier de mot de passe

La commande htpasswd vous permet de créer un fichier de mots de passe qu'Apache peut utiliser pour authentifier les utilisateurs. Vous allez créer un fichier caché à cet effet appelé .htpasswd dans votre répertoire de configuration /etc/apache2.

La première fois que vous utilisez cet utilitaire, vous devez ajouter l'option -c pour créer le passwdfile spécifié. Ici, 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 tous les utilisateurs supplémentaires que vous souhaitez ajouter, comme dans l'exemple suivant, afin de ne pas écraser le fichier :

sudo htpasswd /etc/apache2/.htpasswd another_user

Si vous vérifiez le contenu du fichier, il contiendra le nom d'utilisateur et le mot de passe crypté pour chaque enregistrement :

cat /etc/apache2/.htpasswd
Outputsammy:$apr1$eponJaBR$9uyVIRpDpbHoseI.hS1cq/
another_user:$apr1$dDXiQxte$RGn3CVfFLQOPf5lSJgNvV1

Vous avez maintenant vos utilisateurs et mots de passe dans un format qu'Apache peut lire.

Étape 3 - Configuration de l'authentification par mot de passe Apache

Dans cette étape, vous devez configurer Apache pour vérifier le fichier .htpasswd avant de diffuser votre contenu protégé. Vous pouvez le faire de deux manières : soit directement dans le fichier d'hôte virtuel d'un site, soit en plaçant les fichiers .htaccess dans les répertoires qui nécessitent une restriction. Il est généralement préférable d'utiliser le fichier d'hôte virtuel, mais si vous devez autoriser les utilisateurs non root à gérer leurs propres restrictions d'accès, reportez-vous à la deuxième option pour vérifier les restrictions dans le contrôle de version à côté du site Web, ou avoir déjà une application Web utilisant des fichiers .htaccess à d'autres fins.

Remarque : Vous pouvez exécuter les options suivantes pour tous les hôtes virtuels actifs. Si vous utilisez le vôtre, assurez-vous de modifier les commandes et les valeurs pour refléter votre configuration.


Choisissez l'option qui correspond le mieux à vos besoins.

Option 1 : configuration du contrôle d'accès dans la définition d'hôte virtuel (préférée)

La première option consiste à modifier la configuration d'Apache et à ajouter une protection par mot de passe au fichier de l'hôte virtuel. Cela donnera 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 l'accès à la configuration, qui n'est pas toujours disponible, mais lorsque vous y avez accès, c'est recommandé.

Commencez par ouvrir le fichier d'hôte virtuel auquel vous souhaitez ajouter une restriction. Pour notre exemple, nous utiliserons le fichier /etc/apache2/sites-available/your_domain.conf qui contient l'hôte virtuel. Ouvrez le fichier avec un éditeur de texte en ligne de commande tel que nano :

sudo nano /etc/apache2/sites-available/your_domain.conf

À l'intérieur, avec les commentaires supprimés, le fichier devrait ressembler à ce qui suit :

/etc/apache2/sites-available/votre_domaine.conf

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

L'authentification s'effectue par répertoire. Pour configurer l'authentification, vous devrez cibler le répertoire que vous souhaitez restreindre avec un bloc <Directory ___>. Dans notre exemple, nous limiterons l'intégralité de la racine du document, mais vous pouvez modifier cette liste pour cibler uniquement un répertoire spécifique dans l'espace Web :

/etc/apache2/sites-available/votre_domaine.conf

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

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

Dans ce bloc de répertoire, spécifiez que vous configurez l'authentification Basic. Pour le AuthName, choisissez un nom de domaine qui sera affiché à l'utilisateur lors de la demande d'informations d'identification. Utilisez la directive AuthUserFile pour faire pointer Apache vers le fichier de mots de passe que vous avez créé. Enfin, exigez que seul un valid-user puisse accéder à cette ressource, ce qui signifie que toute personne pouvant vérifier son identité avec un mot de passe sera autorisée à :

/etc/apache2/sites-available/votre_domaine.conf

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

<Directory "/var/www/your_domain">
      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 avec la commande suivante :

sudo apache2ctl configtest

Si tout est vérifié et que vous obtenez Syntax OK en sortie, vous pouvez redémarrer le serveur pour mettre en œuvre votre politique de mot de passe :

sudo systemctl restart apache2

Étant donné que systemctl n'affiche pas le résultat de toutes les commandes de gestion de service, utilisez la commande status pour vous assurer que le serveur est en cours d'exécution :

sudo systemctl status apache2
Output● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese>
     Active: active (running) since Fri 2022-04-29 17:12:24 UTC; 4s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 4493 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SU>
   Main PID: 4514 (apache2)
      Tasks: 55 (limit: 9508)
     Memory: 5.8M
     CGroup: /system.slice/apache2.service
             ├─4514 /usr/sbin/apache2 -k start
             ├─4516 /usr/sbin/apache2 -k start
             └─4517 /usr/sbin/apache2 -k start

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, Option 1 est préférable, mais si vous utilisez déjà le fichier .htaccess ou devez autoriser les utilisateurs non root à gérer les restrictions, les fichiers .htaccess ont du sens.

Pour activer la protection par mot de passe à l'aide des fichiers .htaccess, ouvrez le fichier de configuration Apache principal 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 du document. Mettez à jour cette ligne pour refléter la racine de votre document. Ensuite, activez le traitement .htaccess en changeant la directive AllowOverride dans ce bloc de None à All. Le contenu de ce bloc <Directory> se lira désormais comme suit :

/etc/apache2/apache2.conf

. . .

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

. . .

Enregistrez et fermez le fichier lorsque vous avez terminé.

Ensuite, ajoutez un fichier .htaccess au répertoire que vous souhaitez restreindre. Dans notre démonstration, nous limiterons l'intégralité de la racine du document (l'intégralité du site Web) qui est basée sur /var/www/your_domain, mais vous pouvez placer ce fichier dans n'importe quel répertoire dont vous souhaitez restreindre l'accès :

sudo nano /var/www/your_domain/.htaccess

Dans ce fichier, spécifiez que vous souhaitez configurer l'authentification Basic. Pour le AuthName, choisissez un nom de domaine qui sera affiché à l'utilisateur lors de la demande d'informations d'identification. Utilisez la directive AuthUserFile pour faire pointer Apache vers le fichier de mots de passe que nous avons créé. Enfin, vous aurez besoin d'un valid-user pour accéder à cette ressource, ce qui signifie que toute personne pouvant vérifier son identité avec un mot de passe sera autorisée à :

/var/www/votre_domaine/.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 dans ou sous le répertoire avec le fichier .htaccess :

sudo systemctl restart apache2

Exécutez ensuite systemctl status pour vérifier le succès du redémarrage :

sudo systemctl status apache2
Output● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese>
     Active: active (running) since Fri 2022-04-29 17:18:17 UTC; 3s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 4721 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SU>
   Main PID: 4744 (apache2)
      Tasks: 55 (limit: 9508)
     Memory: 5.9M
     CGroup: /system.slice/apache2.service
             ├─4744 /usr/sbin/apache2 -k start
             ├─4745 /usr/sbin/apache2 -k start
             └─4746 /usr/sbin/apache2 -k start

Le répertoire que vous avez spécifié devrait maintenant être protégé par un mot de passe.

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

Pour confirmer que votre contenu est protégé, essayez d'accéder à votre contenu restreint dans un navigateur Web en accédant à https://your_domain_or_server_IP.

Vous serez présenté avec une invite de nom d'utilisateur et de mot de passe qui ressemble à ce qui suit :

Si vous entrez les informations d'identification correctes, vous serez autorisé à accéder au contenu. Si vous entrez les mauvaises informations d'identification ou cliquez sur "Annuler", vous recevrez la page d'erreur "Non autorisé":

Conclusion

Vous avez maintenant configuré l'authentification de base pour votre site.

Il y a beaucoup plus que vous pouvez faire avec la configuration Apache et .htaccess. Pour en savoir plus sur la flexibilité et la puissance disponibles dans la configuration d'Apache, essayez l'un des tutoriels suivants :