Lorsque je travaille sur un projet de développement de site ou d’application web, il m’arrive de devoir le rendre accessible à un groupe restreint d’utilisateurs afin qu’ils puissent suivre son avancement ou valider certaines fonctionnalités avant sa mise en production.
La mise en place d’une authentification via Apache permet de contrôler l’accès au site sans le rendre public.
Étape 1 : Activez les modules nécessaires
Pour utiliser l’authentification par mot de passe, tu aura besoin des modules mod_authn_file
et mod_authz_user
. Ces modules sont généralement installés et activés par défaut avec Apache, mais tu peux vérifier leur présence et les activer si nécessaire.
sudo a2enmod authn_file
sudo a2enmod authz_user
sudo systemctl restart apache2
Étape 2 : Créer un fichier de mot de passe
Apache utilise un fichier de mot de passe pour stocker les informations d’authentification. tu peux créer ce fichier avec la commande htpasswd. Cett
e commande fait parti du package apache2-utils.
sudo apt install apache2-utils
Générons maintenant le fichier qui contiendra le nom d’utilisateur et le mot de passe :
sudo htpasswd -c /etc/apache2/monsite.htpasswd demo-user
Remplace demo-user
par le nom d’utilisateur que tu veux. Tu sera invité à entrer et confirmer le mot de passe pour cet utilisateur. Cette commande va générer le fichier avec le contenu suivant :
demo-user:$apr1$r1kdtlCU$/8.xPrUDMO6SvZGn5a4fA.
Comme tu peux le constater, le mot de passe est enregistré de façon haché et c’est mieux ainsi. Il s’agit d’un hash MD5 avec salt. Alors pense à bien le noter quelque part pour t’en souvenir. Sinon il te faudra régénérer ce fichier.
Étape 3 : Configurer Apache pour utiliser l’authentification
Maintenant, tu dois configurer Apache pour utiliser le fichier de mot de passe que tu as créé.
Ajoute les directives suivantes à ta configuration apache pour protéger un répertoire spécifique. Par exemple, pour protéger le répertoire /var/www/html
:
<Directory /var/www/html>
AuthType Basic
AuthName "Accès restreint"
AuthUserFile /etc/apache2/monsite.htpasswd
Require valid-user
# ... ta configuration
</Directory>
Enregistrez et redémarrez Apache pour appliquer les modifications :
sudo systemctl restart apache2
Pour vérifier que tout fonctionne, essaye d’accéder au répertoire protégé via votre navigateur web. Un couple utilisateur / mot de passe devrai t’être demandé !
Bonus : Quelques options de la commande htpasswd
Ajouter plusieurs utilisateurs sur le même fichier .htpasswd
Tu peux ajouter d’autres utilisateurs dans le même fichier en retirant l’option -c qui sert à créer un nouveau fichier .htpasswd :
sudo htpasswd /etc/apache2/monsite.htpasswd other-user
Visualiser le résultat dans la console sans créer de fichier .htpasswd
Ça peut être utile à savoir, il s’agit de l’option -n :
sudo htpasswd -n demo-user
Enregistrer le mot de passe avec un algorithme plus robuste :
Utiliser l’algorithme SHA
Pour utiliser sha1, utilise l’option -s :
sudo htpasswd -sc /etc/apache2/monsite.htpasswd demo-user
Pour utiliser sha256, utilise l’option -2 :
sudo htpasswd -2c /etc/apache2/monsite.htpasswd demo-user
Pour utiliser sha512, utilise l’option -5 :
sudo htpasswd -5c /etc/apache2/monsite.htpasswd demo-user
Avec sha256 et sha512, tu peux indiquer un nombre de cycle de hash avec la commande -r :
sudo htpasswd -5r 10000 -c /etc/apache2/monsite.htpasswd demo-user
Utiliser l’algorithme bcrypt
Pour utiliser bcrypt, le plus sécurisé disponible, utilise l’option -B :
sudo htpasswd -Bc /etc/apache2/monsite.htpasswd demo-user
Tu peux modifier le temps de calcul de bcrypt avec la commande -C en renseignant une valeur entre 4 et 17 (par défaut 5) :
sudo htpasswd -BC 10 -c /etc/apache2/monsite.htpasswd demo-user
Pour garder le mot de passe en clair
Ou encore enregistrer le mot de passe en clair, utilise l’option -p :
sudo htpasswd -pc /etc/apache2/monsite.htpasswd demo-user
De mon côté, la commande m’indique « Warning: storing passwords as plain text might just not work on this platform ». Et effectivement, ça ne fonctionne pas.
Il est très probable que selon la configuration de ton serveur, que le plain text ne fonctionne pas !
Retirer un utilisateur du fichier .htpasswd
Tu peux le retirer à la main en éditant le fichier .htpasswd. Mais htpasswd a quand même prévu une commande pour ça. Utilise l’option -D :
sudo htpasswd -D /etc/apache2/monsite.htpasswd demo-user
Cette commande retire l’utilisateur demo-user du fichier
Vérifier un mot de passe d’un utilisateur manuellement
Tu veux vérifier que tu as bien donné le bon mot de passe à un utilisateur avant de lui transmettre ses identifiants ? Tu peux utiliser la commande -v pour vérifier :
sudo htpasswd -v /etc/apache2/monsite.htpasswd demo-user
Tu es alors invité à saisir le mot de passe de demo-user pour avoir la confirmation :
sudo htpasswd -v /etc/apache2/monsite.htpasswd demo-user
Enter password:
Password for user demo-user correct.
Renseigner le mot de passe directement dans la commande
A utiliser uniquement lorsque tu fais de l’automatisation de création de .htpasswd. Sinon le mot de passe figurera dans ton historique de commande ou sera lisible par quelqu’un par dessus ton épaule.
Pour utiliser cette option, utilise -b puis indique le mot de passe à la suite du nom d’utilisateur :
sudo htpasswd -bc /etc/apache2/monsite.htpasswd demo-user mon-mot-de-passe
Bien sûr tu peux multiplier les options et par exemple définir le l’option -b avec -B pour utiliser bcrypt :
sudo htpasswd -bBC 12 -c /etc/apache2/monsite.htpasswd demo-user mon-mot-de-passe
C’est tout pour la commande htpasswd ! Aller une dernière pour la route :
htpasswd -h
Commentaires (0)