Principe de fonctionnement
Afin de restreindre l’accès à un répertoire de site web, on peut utiliser une caractéristique propre aux serveurs web Apaches : les fichiers .htaccess. Ces fichiers (de type texte) doivent êtres placés dans les répertoires à protéger : lorsque le serveur apache doit extraire une page HTML du dossier, il constate la présence du fichier .htaccess et génère une boite de dialogue de demande de mot de passe.
La vérification du login + mot de passe se fait à partir d’un fichier .htusers qui stocke la liste des utilisateurs et de leurs mots de passe. On peut compléter cette configuration avec un fichier .htgroups qui permet de constituer des groupes d’utilisateurs et de configurer l’accès pour un groupe (c’est à dire tous les utilisateurs ayant un compte valide dans .htusers et inclus dans le groupe).
De façon complémentaire, il semble évident que les fichiers .htusers et .htgroups doivent êtres stockés dans un dossier centralisé lui-même protégé par un .htaccess (!).
Exemple de fichier .htaccess :
La syntaxe d’un fichier .htaccess est la suivante : exemple pour protéger le répertoire /stocks, accès réservé aux utilisateurs administrateurs admin1 et admin2 ou au groupe des administrateurs :
- # fichier .htaccess pour le répertoire www/stocks
- AuthType Basic
- AuthName "Répertoire réservé aux administrateurs de l'intranet"
- AuthUserFile /var/www/tech/.htusers
- AuthGroupFile /var/www/tech/.htgroups
- require user admin1 admin2
- # require group admins # alternative pour l'utilisation d'un groupe
Explications :
# met en commentaire la suite de la ligne
AuthType Basic => type d’authentification utilisée
AuthName "Répertoire réservé aux administrateurs de l’intranet" => message envoyé pour information lorsqu’un utilisateur se connecte
AuthUserFile /var/www/tech/.htusers => chemin du fichier des utilisateurs .htusers. Ce chemin est absolu par rapport à la machine, ici on suppose que l’on utilise le sous-répertoire /tech du répertoire www. [1]
Il faudra donc connaitre ce chemin absolu : cf l’aide technique de votre hébergeur et/ou sa FAQ hébergement web ou un simple fichier test.php placé dans le répertoire avec dedans pour récupérer la valeur de DOCUMENT_ROOT :
- <?php
- ?>
AuthGroupFile /var/www/tech/.htgroups => chemin absolu du fichier de définition des groupes .htgroups
require user admin1 admin2 => le nom des utilisateurs autorisés à l’accès, ici admin1 et admin2 (si login + mdp valides...)
require group admins => alternative pour l’utilisation d’un groupe d’utilisateurs, ici le groupe admins.
Exemple de fichier des utilisateurs .htusers
Ce fichier sera placé dans le répertoire défini par la directive AuthUserFile
- # Fichier d'utilisateurs pour le site intranet
- admin1:secret
- admin2:secret
- prof1:mdp_prof1
- prof2:mdp_prof2
- prof3:mdp_prof3
Ce fichier est constitué par les paires login:mot_de_passe de tous les comptes ayant accès à une zone protégée. Il sera donc unique pour l’ensemble de l’intranet. Pour un serveur sous Linux la sécurité est augmentée par le cryptage des mots de passe (alors qu’ils sont en clair sous Windows...), il est donc nécessaire d’utiliser un outils de cryptage pour générer les mots de passe. On peut utiliser l’application en ligne suivante : http://home.golden.net/generator/ pour générer les lignes du fichier .htusers.
Exemple de fichier des groupes .htgroups
Ce fichier sera placé dans le répertoire défini par la directive AuthUserFile :
- # Fichier de groupe pour le site intranet
- admins: admin1 admin2
- profs: prof1 prof2 prof3