15/11/2024

Apache

Protéger une page web avec .htaccess et .htpasswd

I. Présentation

Il peut parfois être utile d'avoir à protéger certains contenus ou pages web par une authentification simple. Le but est alors de ne laisser passer que ceux qui ont les identifiants requis. Cela se fait trés simplement grace aux fichiers ".htaccess" et ".htpasswd" avec Apache2, c'est ce que nous allons voir dans ce tutoriel.

Nous allons ici supposer qu'au moins Apache2 est installé sur le serveur et que votre architecture web démarre de "/var/www/". Pour l'exemple du tutoriels, nous allons protéger le dossier "/var/www/site1" par un fichier ".htaccess".

II. Construction des fichiers

On se rend dans donc le dossier en question :

cd /var/www/site/

Ensuite, nous allons créer le premier fichier qui sera ".htaccess". Le fichier ".htaccess" est un fichier caché (il commence par un "."). Cela signifie qu'on ne pourra pas le voir avec un simple "ls" mais qu'il faudra utiliser "ls -a" pour le voir.

Le fichier ".htaccess" est le fichier qui contient les paramètres qui s'appliquerons au dossier web dans lequel il se situe. Il peut servir à modifier localement la configuration d'Apache 2 afin de faire des choses trés puissantes maisi ici nous l'utiliserons simplement pour demander une authentification et aller vérifier les champs saisis par l'utilisateur avec un fichier contenant ces identifiants.

Voici ce qu'il faut mettre dans ce fichier :

AuthUserFile /var/www/site/.htpasswd
AuthGroupFile /dev/null
AuthName "Accès restreints - Veuillez vous authentifier"
AuthType Basic
require valid-user

Nous allons maintenant expliquer les différents paramètres ce ce fichier :

  • AuthUserFile : Désigne le chemin du fichier où seront stockés les identifiants qui seront valident pour la connexion.
  • AuthGroupFile /dev/null : Ce fichier peut désigner un fichier où seront stockés un ou plusieurs groupes d'utilisateurs qui seront acceptés à l'authentification. Nous l'utiliserons pas dans notre cas mais il s'agit d'un paramètre qui doit obligatoirement être présent , nous pointerons donc vers un répertoires vide.
  • AuthName "Accés restreints - Veuillez vous authentifier" : C'est ce qui va être affiché sur la boite de dialogue d'authentification qui apparaitra sur l'écran de l'utilisateur. On y indique généralement un avertissement à l'utilisateur. Il est nécessaire de l'entourer de guillemets si il contient des espaces.
  • AuthBasic : Désigne le type d'authentification à utilisateur. Ce paramètre peut être "None" qui désactive l'authentification, "Basic" qui utilise le module "mod_auth_basic", le "digest" qui utilise le module "mod_auth_digest" où "Form" qui utilise le module "mod_auth_form".
  • require valid-user : Désigne les conditions qui doivent être validées pour laisser passer l'utilisateur. Ici il ne s'agit que de la validation des identifiants saisis par l'utilisateur. Tous les utilisateurs valident pourront donc accéder à la ressources en question

Nous allons maintenant créer le fichier ".htpasswd" en question, celui contiendra donc les identifiants valident à la connexion. La création du fichier et des identifiants utilisateurs peut donc se faire directement en ligne de commande :

htpasswd -c /var/www/site/.htpasswd nom_utilisateur

Htpasswd01

On doit ensuite saisir le mot de passe.Il faut noter que l'option "-c" (pour créer) n'intervient que si le fichier n'existe pas déja. Nous pourrons alors aller jeter une œil dans ce nouveau fichier ".htpasswd".

Htpasswd02

vim /var/www/site/.htpasswd

Nous voyons alors que notre mot de passe n'est pas en clair dans notre fichier mais hashé en md5. Ce qui est une sécurité supplémentaire native à Apache 2 lors de la création de fichier .htpasswd".

Pour ajouter une utilisateur dans un fichier ".htpasswd" déja existant, on pourra utiliser la même commande en ommetant le "-c" qui a pour fonction de créer le fichier en même temps. Par sécurité, il est possible de nommer le fichier ".htpasswd" autrement, le tout est qu'il commence par un "." et qu'il soit bien indiqué dans le fichier ".htaccess".

III. Configuration d'Apache

Nous devons maintenant aller modifier quelque peu la configuration d'Apache dans le fichier "/etc/apache2/sites-available/default" :

Htpasswd03

Nous devons ici changer le paramètre "AllowOverride" de "None" à "All". Si votre site fait partie d'une architecture avec des vHosts, vous devrez aller dans le fichier de ce vHost plutôt que dans le fichiers "default". Le paramètre "AllowOverride" permet de déterminer quel fichier ou configuration est autorisé a prendre en priorité la configuration d'Apache 2. Paramétré à "None", tout fichier ".htaccess" ou qu'il soit situé sera ignoré par Apache 2. Si on le paramètre à "All", Apache 2 pourra lire les fichier ".htaccess" qui modifieront ainsi localement (dans la partie de notre site à protéger) la configuration d'Apache en demandant une authentification.

Une fois cette modification faite, nous pourrons vérifier la configuration d'Apache pour voir si elle est correcte avant de redémarrer (pour ne pas stopper le service sans savoir le rallumer)

apachectl configtest

Puis si cette commande nous renvoie un retour positif, redémarrer le service Apache2 :

service apache2 restart

IV. Aller plus loin : rendre publique une sous-partie du site protégé

Dans notre site "/var/www/site", nous souhaitons rendre une partie publique la partie "/var/www/site/open". Nous allons recréer un fichier ".htaccess" dans "/var/www/site/open" dans lequel nous allons mettre les directives suivantes :

AuthType None
Satisfy Any

Le fichier ".htaccess" de "/var/www/site/open" va donc être lu par Apache2 et se substituer au fichier ".htaccess" de "/var/www/site/" pour affecter d'autres règles au dossier "/var/www/site/open". Ici nous indiquons donc qu'aucune méthode d'authentification n'est à utiliser et que toutes demandes d'accès seront satisfaites.

Nous aurons donc un accès restreints à "/var/www/site/" mais pas à "/var/www/site/open/"

author avatar
Mickael Dorigny Co-founder
Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

5 commentaires sur “Protéger une page web avec .htaccess et .htpasswd

  • Merci pour ce superbe tuto et pour toutes ces infos utiles.
    Je vous recommande d installer le plugin de sécurité Itheme security il est simple d utilisation et bien noté par les utilisateurs.
    Cette extension détecte tout ce qui ne vas pas il suffit juste de cliquer afin de corriger les problèmes de sécurité …
    Si vous êtes pas totalement sur de ce que vous faites ne touchez pas aux options avancés .

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.