I. Présentation
Dans ce tutoriel, nous allons voir comment configurer l’authentification HTTP basique sur un serveur Web Nginx pour protéger l’accès à un site par mot de passe. Cet accès peut s’appliquer seulement à une page ou à un dossier spécifiques, ce qui me semble intéressant pour protéger l’accès à une interface d’administration d’un site, tout en laissant la partie publique accessible sans mot de passe.
II. Protection par mot de passe avec Nginx
Pour ajouter cette authentification, nous allons reprendre la méthode du fichier « .htpasswd ». Cela nécessite d’installer le paquet apache2-utils, bien que l’on soit avec un serveur Nginx. Cela n’installe pas Apache en lui-même, seulement quelques outils dont htpasswd.
Mettez à jour le cache des paquets et installez apache2-utils :
sudo apt-get update sudo apt-get install apache2-utils
Une fois que c’est fait, nous allons créer un fichier qui va contenir un identifiant et un mot de passe. Ce fichier sera stocké dans « /etc/nginx/« , se nomme « .htpasswd » et l’on va ajouter l’utilisateur « florian ». Ce qui donne :
sudo htpasswd -c /etc/nginx/.htpasswd florian
Il faudra indiquer, deux fois, le mot de passe de l’utilisateur (ce compte n’a aucun lien avec le compte local de Linux).
Remarque : pour des raisons de sécurité, il est important que le fichier .htpasswd ne soit pas créé au sein du répertoire du site Internet directement. De cette façon, il n’est pas accessible aux clients qui visitent votre site Web, mais le serveur Nginx peut y accéder.
On peut considérer que le fichier .htpasswd est une « petite base de données » de comptes utilisateurs dans un fichier à plat. Si l’on regarde le contenu du fichier, on peut voir que le mot de passe n’est pas en clair.
sudo cat /etc/nginx/.htpasswd
Si l’on se réfère à la documentation, on sait que l’on utilise l’algorithme MD5 pour calculer le hash du mot de passe, car la chaîne commence par « $apr1$« . Voici ce qui est précisé dans la documentation : « « $apr1$ » + le résultat d’un algorithme spécifique à Apache utilisant un condensé MD5 réitéré (1000 fois) de combinaisons variées du mot de passe et d’une source d’entropie sur 32 bits. »
Pour créer des comptes supplémentaires et les ajouter au même fichier sans l’écraser, voici la syntaxe à utiliser (exemple pour créer le compte itconnect) :
sudo htpasswd /etc/nginx/.htpasswd itconnect
Maintenant, nous allons configurer notre site sous Nginx pour qu’il prenne en charge l’authentification et notre fichier .htpasswd.
Commençons par ouvrir le fichier de configuration du site :
sudo nano /etc/nginx/sites-enabled/it-connect.tech
Nous devons insérer deux lignes dans notre fichier au sein d’une section « location » du bloc « server » correspondant à notre site.
auth_basic "Zone securisee - Authentification requise"; auth_basic_user_file /etc/nginx/.htpasswd;
L’option « auth_basic » sert à définir le message qui s’affichera au sein de la fenêtre d’authentification, tandis que l’option « auth_basic_user_file » sert à spécifier le chemin vers le fichier .htpasswd.
Pour appliquer l’authentification sur toutes les pages du site, on doit utiliser un bloc « location / » pour matcher avec toutes les URL de notre site. Ce qui donne :
Une fois le fichier édité, il suffit de sauvegarder les modifications et de redémarrer Nginx :
sudo systemctl restart nginx
Dernière étape : tester que notre configuration bien. On se rend tout simplement sur notre site, et là une fenêtre d’authentification apparaît ! On doit se connecter avec un compte présent dans le fichier .htpasswd pour accéder au site, sinon on obtiendra une erreur : 401 Authorization Required.
Enfin, si l’on veut que cette restriction s’applique seulement sur l’interface d’administration du site, il faut adapter la directive « location« . Si l’interface d’administration est accessible en indiquant « /admin/ » dans l’URL, par exemple « https://www.it-connect.tech/admin/« , il faut ajouter ce bloc dans le fichier :
location /admin/ try_files $uri $uri/ =404; auth_basic "Zone securisee - Authentification requise"; auth_basic_user_file /etc/nginx/.htpasswd;
Voilà, redémarrez le service Nginx et le tour est joué ! 😉
Hébergez votre site à partir de 2$ sur 👉👉👉 https://www.tnctech.ca