Comment configurer l'authentification par mot de passe avec Apache sur Ubuntu 20.04
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.
- Un enregistrement A avec
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 :
- Pour une meilleure compréhension du fichier de configuration principal, lisez la section sur Se familiariser avec les fichiers et répertoires Apache importants dans notre guide d'installation Apache.
- En savoir plus sur comment configurer les fichiers d'hôte virtuel dans Apache
- Apprenez-en plus sur la réécriture des URL, la personnalisation des pages d'erreur comme le précédent message « Non autorisé » ou l'inclusion d'éléments communs sur toutes vos pages avec les inclusions côté serveur dans notre guide Comment utiliser le fichier .htaccess.