Configuration de .htaccess et .htpasswd

Le fichier .htaccess est utilisé sur les serveurs Apache afin de définir les droits d’accès d’un répertoire et de ses sous répertoires sur un serveur web. Dans l’exemple que nous allons développer nous allons mettre en place un fichier filtrage par adresse IP et/ou mot de passe.

I- Pré recquis

Afin de pouvoir utiliser les .htaccess il faut que votre serveur Apache soit configuré pour que ces fichiers soient prient en compte. Généralement le serveur est pré configuré pour les prendre en charge. En cas de problème, ou de conscience professionnelle, vous pouvez vérifier le fichier de conf d’Apache. Dans ma version, Xampp, il s’agit du fichier httpd.conf qui se trouve dans apache\conf

Dans la configuration de <directory « le chemin de votre htdocs> doit figurer la ligne AllowOverride All

Vous pouvez également vérifier la configuration du nom du fichier qui autorisation d’accès. La ligne suivante doit apparaitre : AccessFileName . htaccess Cette ligne n’existe pas forcément dans le fichier de conf.

II- Création du fichier .htaccess sous Windows

Les utilisateurs de Windows peuvent rencontrer une première difficulté pour créer un fichier qui se nomme .htaccess Un clic droit nouveau fichier texte par exemple interdira l’opération, même chose si vous essayez de renommer via l’explorateur de fichiers.

Pour contourner ce problème plusieurs méthodes peuvent être utilisées comme par exemple le fait de créer un fichier avec un nom conventionnel du genre test.txt puis de le rénommer sous DOS avec un ren test.txt .htaccess Sous XP la solution la plus simple est sans doute de créer le fichier via le bloc note.
III- Configuration du fichier .htaccess

Maintenant que nous avosn créer le fichier .htaccess, reste à le remplir correctement.

III-1 Limiter l’accès à quelques machines

C’est le cas le plus facile à configurer. Le fichier comprendra les lignes suivantes :

AuthType Basic
Order Deny,Allow
Deny from all
Allow from 203.55.130.208

AuthType Basic c’est le type d’authentification classique d’Apache inutile de la modifier.
Order Deny,Allow cela signifie que si un utilisateur possède à la fois une autorisation et une interdiction c’est l’autorisation qui prévaut.

Deny from all signifie que l’accès est interdit pour tout le monde.

Allow from 203.55.130.208 signifie que seule l’@ 203.55.130.208 est autorisée à afficher la page.
A noter que le symbole # permet d’afficher un commentaire ce qui peut-être utile pour savoir par exemple à quelle machine correspond l’IP que l’on vient d’entrer.

L’accès peut-être donné à un classe d’IP il suffira pour cela d’entrer l’adresse du réseau et son masque de la manière suivante :

Allow from 203.55.130.0/24

L’accès peut également être donné à un domaine ou un sous domaine DNS. Ainsi si je ne veux autoriser l’accès qu’au ordinateurs de l’université de Caen j’ajouterai la ligne :

Allow from unicaen.fr


III-2 Limiter l’accès à des utilisateurs authentifiés

Là ça se complique un peu mais rien de tragique. Voilà à quoi cela va ressembler :

AuthUserFile D:\www\htdocs\mdp\.htpasswd
AuthName « Accès réservé aux amis »
AuthType Basic
Require valid-user

AuthUserFile D:\www\htdocs\mdp\.htpasswd Cette ligne indique l’endroit où se trouve le fichier .htpasswd Ce fichier est celui qui va contenir les noms des utilisateurs et leur mot de passe, nous verrons sa création au point 3. Bien faire attention selon qu’on se trouve sur un serveur unix ou Windows à l’utilisation dans le chemin de / pourt Unix et de \ pour Windows. Attention également aux espaces dans le chemin.

Le chemin pour ce fichier ne peut pas être un chemin relatif. Il faut entrer le chemin absolu que l’on ne connait pas forcément si l’on n’administre pas le serveur. L’excellent site du Zero propose un script php qui permet d’afficher le chemin complet du dossier. Le voici :
<?php echo realpath(‘chemin.php’); ?>
Ce fichier est à nommer chemin.php puis à placer dans le dossier où sera stocké le fichier .htpasswp Il suffit ensuite de l’afficher via un navigateur pour connaitre le chemin absolu du répertoire.

AuthName « Accès réservé aux amis » Ici on saisit une partie du message qui sera affiché dans la fenêtre réclamant l’authentification.

AuthType Basic authentification classique d’Apache.

Require valid-user Signifie que le qu’un nom d’utilisateur figurant dans le fichier .htpasswd est nécesssaire


III-3 Limiter l’accès à des groupes d’utilisateurs

Pour limiter l’accès à certains utilisateurs du fichier .htpasswd 2 méthodes sont envisageables. La première consiste à spécifier le nom des utilisateurs. A la place de Require valid-user nous aurons alors une ligne du genre require user pierre paul jacques Voilà à quoi ressemblera alors le .htaccess

AuthUserFile D:\www\htdocs\mdp\.htpasswd
AuthName « Acces Réserve aux amis »
AuthType Basic
require user pierre paul jacques

La seconde méthode consiste à créer des groupes. La création du fichier contenant le groups, que nous appellerons .groups sera étudié dans le point IV.
Le fichier .htaccess s’il fait appel aux groupes ressemblera alors à celui-ci :

AuthUserFile D:\www\htdocs\mdp\.htpasswd
AuthGroupFile D:\www\htdocs\mdp\.groups
AuthName « Acces Réserve aux amis »
AuthType Basic
require group profs etudiants

AuthGroupFile D:\www\htdocs\mdp\.groups indique le chemin, lui aussi absolu, du fichiers .groups qui contient la listes des groupes et des utilisateurs. Nous verrons sa création dans le point 3.

require group profs etudiants indique le nom des groupes autorisés à afficher la page.
III-4 Limiter l’accès à des utilisateurs et/ou des machines

Les 2 limitations que nous venons de voir, par IP et par utilisateurs peuvent se mixer. Nous pouvons définir que les 2 conditions (ip + user) doivent être remplies ou que simplement l’une des 2 doit être remplies.
Dans le cas où nous ne souhaitons autoriser l’accès qu’à l’utilisateur lucien depuis la machine dont l’@ip est le 203.55.130.208 le fichier se présentera comme ça :

AuthUserFile D:\www\htdocs\mdp\.htpasswd
AuthName « Zone réservée aux amis »
AuthType Basic
Order Deny,Allow
Deny from all
Satisfy all
Allow from 203.55.130.208
Require user lucien

Satisfy all indique que toutes les conditions doivent être respectées pour pouvoir afficher la page. Il y aura donc une demande d’authentification uniquement si l’@Ip est autorisée.

Si nous autorisons que simplement l’une ou l’autre des conditions soient remplies, pour que la page puisse s’afficher alors le fichier ce sera la ligne Satisfy any qui sera utilisée.
Le fichier ressemblera alors à ceci :

AuthUserFile D:\www\htdocs\mdp\.htpasswd
AuthName « Zone réservée aux amis »
AuthType Basic
Satisfy any
Order Deny,Allow
Deny from all
Allow from 203.55.130.208
Require user lucien

IV- Création des fichiers .htpasswd et .groups

Le fichier qui contient noms d’utilisateurs et mots de passe s’appelle dans notre exemple .httpasswd car c’est le nom que l’on rencontre communément cependant rien n’empêche de le nommer par exemples utilisateurs.txt L’avantage de choisir le nom .htpasswd est que par défaut la config Apache interdit l’accès à ces fichiers sensibles aux utilisateurs.
La structure du fichier .htpasswd est la suivante :
nom_utilisateur : mot_de_passe

Le fichier .htpasswd pour ra donc se présenter ainsi :

pierre:azerty
paul:medor
jacques:sylvia

Par mesure de sécurité, il est possible de crypter le mot de passe. Pour cela, un utilitaire est disponible dans le répertoire bin du répertoire apache, htpasswd.exe sous windows. Il s’exécute en ligne de commande de la manière suivante :
htpasswd.exe -c .htpasswd pierre

Ce commande va créer le fichier .htpasswd et va me demander quel mot de passe attribuer à l’utilisateur Pierre. Lorsque le premier utilisateur est crée, le suivant s’ajoute de la manière suivante :
htpasswd.exe .htpasswd paul

Voici comment se présentera mon fichier .htpasswd avec les mots de passe cryptés en MD5

pierre:$apr1$n55…..$uvJVh.2LUV06AYGZf64oj1
paul:$apr1$uD5…..$o0ONtQ1.FIVymTRaKNdMs0
jacques:$apr1$cE5…..$mIy0Ysl/SvKcw6tvnuHdw/

La création du fichiers .group qui définit les groupes et les utilisateurs se présentera elle de la manière suivante :
nom_du_groupe1:utilisateur1 utilisateur2 utilisateur3 utilisateur4
nom_du_groupe2:utilisateur1 utilisateur3

Voici donc à quoi peut ressembler un fichier .groups :

profs: pierre paul jacques
etudiants: christophe doriane alan

Afin de protéger ces dossiers on ajoutera dans le répertorie qui contient le .htaccess et le .groups un fichier .htaccess avec une seule ligne : deny from all

V Cas particulier des pages hébergées chez Free

Si vous êtes hébergé chez Free vous êtes habitué à ses particularismes. La gestion du .htaccess ne déroge pas à la règle. Tout d’abord les mots de passe du fichier .htpasswd ne doivent pas être cryptés. Ensuite, le fichier .htaccess doit faire appel à un script en Perl. Voici donc à quoi doit ressembler votre .htaccess chez Free.

PerlSetVar AuthFile fichiers/admin/password/.htpasswd
AuthName « Réservé aux amis »
AuthType Basic
Require valid-user

On notera que le PerlSetVar AuthFile définit le chemin absolu mais uniquement de votre hébergement.
En cas de soucis, une belle erreur 500 s’affichera et votre site sera inaccessible, il suffit de supprimer le .htaccess avec votre client FTP préféré pour un retour à la normal.

VI Remarques complémentaires

VI-1 Le fichier de log

En cas de problème de configuration avec le fichier .htaccess, d’abord c’est que vous avez mal lu ce passionnant article. Ensuite pensez à regarder le fichiers des logs d’erreurs de votre serveur web. Sous Windows il est située dans apache\logs et s’appelle error.log
Dans le même dossier on trouvera le fichier access.log qui vous permettra de voir quelles adresses IP et si demandé quels logins ont affiché quelles pages. Hum je me demande si cette dernière phrase est très claire…

VI-2 Les pages personnalisées d’erreur 401 et 403

Si vous avez pitié des utilisateurs qui ne pourront pas accéder aux pages protégées vous pouvez toujours leur faire une jolie page de réconfort et d’explication de pourquoi ils n’ont pu accéder. Les utilisateurs qui ne fournissent pas de login/mot de passe valides se verront afficher une erreur 401 et les utilisateurs qui sont rejetés par le filtre d’IP ou de domaine DNS se verront afficher une erreur 403. Afin d’afficher des pages personnalisées pour ces erreurs il suffit de d’ajouter dans la .htaccess la ligne suivante :
ErrorDocument N° de l’erreur URL de la page d’erreur personaliséee

Le fichier .htacess avec gestion des erreur 401 et 403 ressemblera donc à celui-là :

ErrorDocument 403 http://mon_site_web/erreurs/403.htm
ErrorDocument 401 http://mon_site_web/erreurs/401.htm
AuthUserFile D:\www\htdocs\mdp\.htpasswd
AuthName « Accès réservé aux amis »
AuthType Basic
Satisfy All
order deny,allow
deny from all
allow from 203.55.125.178
Require valid-user

Deux remarques concernant ces pages personnalisées :

  • Il est préférable d’entrer le chemin absolu de l’URL de la page personnalisée.
  • L’URL ne la page personnalisée n’est pas forcément un page HTML. Cela peut-être une image par exemple.
Ce contenu a été publié dans Administration, avec comme mot(s)-clef(s) , , , , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>