Protéger un dossier par mot de passe (htpasswd) sur VPS

2 min
Hébergement VPS/VDS

L'authentification basique est le moyen le plus rapide de cacher un site de préproduction, un dossier d'administration ou un outil privé derrière une fenêtre de connexion. Ce guide couvre Apache et Nginx sur votre VPS Linux Infrawire, avec un fichier de mots de passe créé par htpasswd.

📋 Prérequis

  • Un VPS Linux (Ubuntu 24.04 / Debian 12 ou AlmaLinux 9 / Rocky 9) avec accès SSH root. L'IP et le mot de passe root sont dans votre espace client.
  • Apache ou Nginx servant déjà un site.
  • Un certificat HTTPS valide pour example.com. L'authentification basique envoie le mot de passe encodé en Base64, ce qui n'est pas du chiffrement : ne l'utilisez jamais en HTTP simple.

📦 Installer l'outil htpasswd

La commande htpasswd vient d'un petit paquet, même si vous utilisez Nginx :

Bash
# Debian / Ubuntu sudo apt install -y apache2-utils # AlmaLinux / Rocky sudo dnf install -y httpd-tools

🔐 Créer le fichier de mots de passe

Stockez le fichier en dehors de toute racine web, pour que personne ne puisse le télécharger :

Bash
sudo mkdir -p /etc/htpasswd sudo htpasswd -c -B /etc/htpasswd/example.com USER

-B utilise bcrypt. -c crée le fichier : ne l'employez que pour le premier utilisateur, car sur un fichier existant il écrase tout (destructif). Ajoutez les autres utilisateurs sans -c :

Bash
sudo htpasswd -B /etc/htpasswd/example.com USER2

Le serveur web doit pouvoir lire le fichier :

Bash
# Debian / Ubuntu (Apache et Nginx tournent sous www-data) sudo chown root:www-data /etc/htpasswd/example.com # AlmaLinux / Rocky : groupe apache (Apache) ou nginx (Nginx) sudo chmod 640 /etc/htpasswd/example.com

Pour supprimer un utilisateur : sudo htpasswd -D /etc/htpasswd/example.com USER2.

🪶 Option A : Apache avec .htaccess

Placez un fichier .htaccess dans le dossier à protéger, par exemple /var/www/example.com/private/.htaccess :

Apache
AuthType Basic AuthName "Zone restreinte" AuthUserFile /etc/htpasswd/example.com Require valid-user

Les fichiers .htaccess sont ignorés tant que le virtual host ne les autorise pas. Dans votre bloc <Directory> (fichier dans /etc/apache2/sites-available/ sous Debian/Ubuntu, /etc/httpd/conf.d/ sous AlmaLinux/Rocky) :

Apache
<Directory /var/www/example.com> AllowOverride AuthConfig </Directory>

Puis testez et rechargez :

Bash
sudo apachectl configtest sudo systemctl reload apache2 # Debian / Ubuntu sudo systemctl reload httpd # AlmaLinux / Rocky

Si vous préférez éviter .htaccess, placez les quatre lignes d'authentification directement dans un bloc <Directory> ou <Location> : c'est plus rapide et plus sûr.

🚀 Option B : Nginx avec auth_basic

Nginx ne lit pas .htaccess. Ajoutez les directives au bloc server :

Nginx
1server { 2 listen 443 ssl; 3 server_name example.com; 4 # lignes ssl_certificate ici 5 6 location /private/ { 7 auth_basic "Zone restreinte"; 8 auth_basic_user_file /etc/htpasswd/example.com; 9 } 10}

Pour protéger tout le site, placez ces deux lignes dans le bloc server. Pour laisser un chemin public dans un site protégé (par exemple un webhook), ajoutez auth_basic off; dans son propre location. Puis :

Bash
sudo nginx -t && sudo systemctl reload nginx

✅ Tester

Sans identifiants vous devez obtenir un 401, avec identifiants un 200 :

Bash
curl -I https://example.com/private/ curl -I -u USER https://example.com/private/

Première réponse attendue :

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Zone restreinte"

curl demande le mot de passe quand vous passez -u USER seul, ce qui évite de le laisser dans l'historique du shell.

🛠️ Dépannage

Aucune fenêtre de connexion sous Apache. AllowOverride vaut encore None, ou le .htaccess est dans le mauvais dossier. Revérifiez le bloc <Directory> et rechargez.

Toujours 401 avec le bon mot de passe. Le fichier n'est pas lisible par le serveur web (vérifiez chown et chmod), ou le chemin dans AuthUserFile ou auth_basic_user_file est faux. Le journal d'erreurs le dit : /var/log/apache2/error.log, /var/log/httpd/error_log ou /var/log/nginx/error.log.

Erreur 500 après l'ajout du .htaccess. Une directive est invalide ou le module nécessaire manque. Lancez sudo apachectl configtest et lisez le message.

Demande de mot de passe en HTTP. Redirigez d'abord le HTTP vers HTTPS, pour que les identifiants ne circulent jamais en clair.


🎉 Votre dossier privé demande maintenant une connexion, avec des mots de passe hachés stockés hors d'atteinte et servis uniquement en HTTPS.

Restez à jour avec les dernières offres, réductions et promotions spéciales.

Voir les promotions

Nous utilisons des cookies

Nous utilisons des cookies analytiques pour améliorer votre expérience sur notre site. Aucune donnée n'est revendue à des tiers. En savoir plus dans notre politique de confidentialité.