Installation d'une protection HTACCESS
Par 4n9e le 27-07-2005
detail des commandes et création des fichiers .htaccess dans le cadre de la protection d'acces à tout ou partie d'un site web
Lorsqu'on met en ligne des documents, informations ou outils, il peut être necessaire de restreindre l'acces à ceux-ci à quelques personnes seulement qu'on aura choisi au préalable.
Dans ce cas, la protection offerte par le système htaccess présente un excellent compromis de puissance , de facilité de mise en place et de gestion (souplesse).
La sécurité liée à ce système a été présentée à l'occasion d'un précédant article, voyons à présent les différentes façons de déployer cette protection.
Sommaire :
I. Présentation
II. Fonctionnement basique
III. En pratique
IV. Les options
IV. 1. Définir les pages d'erreurs personnaliées
IV. 2. Restreindre l'accès à un domaine entier
IV. 3. Et si je ne veux pas protéger TOUT le contenu du repertoire
IV. 4. Autres exemples d'utilisation de Files combiné aux restrictions de domaine
IV. 5. Remplir certaines conditions seulement
IV. 6. Associer des fichiers à une application locale
V. Le fichier de mots de passe
VI. Cryptage des mots de passe
VII. Conclusion
I. Présentation
Le système htaccess a pour but d'établir les règles d'acces à un répertoire et ses sous repertoires eventuels sur Apache.
Ces règles de filtrage d'acces peuvent être basées sur :
- un nom ou groupe d'utilisateurs
- un mot de passe
- un domaine d'appartenance
Le but de ces règles va être de :
- protéger un repertoire
- protéger un fichier au sein d'un repertoire
- pouvoir definir ses propres pages d'erreur
II. Fonctionnement basique
Htaccess s'appuie avant tout sur un fichier appelé .htaccess (notez le point qui precede l'extension).
A partir du moment où on place ce fichier dans un répertoire du serveur ( ou pour parler plus simplement pour les particuliers : sur un repertoire du compte FTP), celui-ci protège d'office ce répertoire, et tous ses sous- répertoires.
Il est toutefois possible d'installer d'autres .htaccess dans un sous repertoire deja protégé par son repertoire-parent.
Point particulier : on va créer nos fichier .htaccess en local (sur notre machine) avant de les uploader sur le serveur. Le probleme est que, si le serveur accepte un fichier sans nom, un point, et l'extension « htaccess », il n'en est pas de meme si vous le créez sous Windows.
Il existe des manipulations savantes, mais le plus simple sera de le sauvegarder sous n'importe quoi.htaccess, de l'uploader sur le serveur, et de le renommer depuis le client FTP que vous utilisez directement sur le serveur (en enlevant donc « n'importe quoi »)
III. En pratique
Le fichier .htaccess se sépare en deux parties.
La première partie va definir
- le fichier de mots de passe,
- les utilisateurs ou groupes,
- le titre,
- le type
synthaxe :
 |
 |
AuthUserFile /chemin/de/l'acces au/.Fichier_contenant_les_pass
AuthGroupFile /chemin/de/l'acces au/.Fichier_contenant_les_groupes
AuthName "Titre" AuthType Basic
|
Point particulier : selon les cas, les chemins sont absolus ou relatifs, c'est-à-dire qu'il faille écrire l'url complete ou qu'ils se comprennent « à partir de ce repertoire ». Contacter le site de l'hebergeur ou l'admin du serveur afin de le savoir ou tester.
La commande
AuthName "Titre" va afficher dans le navigateur de l'utilisateur qui va se connecter
 |
 |
Tapez votre nom d'utilisateur et votre mot de passe. Domaine: Titre
|
La commande
AuthGroupFile devrait contenir les groupes autorisés, stockés dans un fichier. On peut s'en passer en indiquant à la place du chemin
/dev/null.
La deuxieme partie va fixer les conditions d'acces. Elle est composée d'une balise LIMIT :
 |
 |
Require valid-user
|
Les valeurs GET et/ou POST ajoutées à la balise précisent pour quelle méthode http la protection doit s'appliquer (voir le protocole http pour plus d'explications sur les méthodes)
Require indique d'autoriser l'acces aux utilisateurs authentifiés en général (
valid-user), ou à un utilisateur en particulier (
user ).
Il est possible de déclarer aussi plusieurs noms valides, par exemple les personnes d'une équipe :
Require user Deimos DDelec24 cZar Zeus
IV. Les options
Nous avons vu ce que contient obligatoirement le fichier .htaccess.
Avant de détailler les fichiers auxquels il fait appel (mot de passe, groupes?), voyons les commandes optionnelles qu'on peut y rajouter.
IV. 1. Definir des pages d'erreurs personnalisées
C'est la commande
ErrorDocument code d'erreur chemin de la page personalisée
Voici quelques codes d'erreur courants :
401 Unauthorized : l'utilisateur n'a pas entré le bon mot de passe ou le bon login.
403 Forbidden : cette requete est interdite.
404 Not Found : le document est introuvable.
On place cette commande dans la première partie du .htaccess, ce qui donne au final :
 |
 |
ErrorDocument 401 http://chemin/vers/.../acces/refusé.php
ErrorDocument 403 http://chemin/vers/.../requete/interdite.php
ErrorDocument 404 http://chemin/vers/.../document/introuvable.php
AuthUserFile /repertoire/.fichier_de_passwords
AuthGroupFile /dev/null AuthName "Cet acces est protégé"
AuthType Basic
Require valid-user
|
IV. 2. Restreindre l'accès à un domaine entier
Ce sont les commandes
Allow from (all, [domaine]), Deny from (all, [domaine]), Order (Allow,Deny ou Deny,Allow) . Elles se placent dans la deuxième partie du .htaccess.
Order sert a preciser quelle commande est plus forte que l'autre. Par exemple,
 |
 |
order deny,allow
deny from all
allow from 193.48.172.4
|
signifie
refuser a toute personne de s'authentifier,
sauf si elle a pour adresse IP 193.48.172.4
Voici pour illustrer tout ceci un exemple de fichier .htaccess qui n'autorise
que Gutek à accéder aux repertoires protégés, et
seulement si il s'authentifie avec l'IP 193.48.172.4. Si il ne se connecte pas depuis la bonne IP, on a prevu une page qui va le lui rappeler :
 |
 |
ErrorDocument 403 http://futurezone.biz/acces_refuse_wrong_IP.php
AuthUserFile /repertoire/.fichier_de_passwords
AuthGroupFile /dev/null AuthName "Restriction à une seule IP"
AuthType Basic
order deny,allow
deny from all allow from 193.48.172.4
require user Gutek
|
IV. 3. Et si je ne veux pas protéger TOUT le contenu du repertoire
L'htaccess nous permet de ne protéger par mot de passe que certains fichiers.
Imaginons par exemple que nous ayons un repertoire qui contient notre site, un panneau d'administration et une liste de clients.
Dans ce cas, il faut trouver un moyen pour que le public puisse naviguer sans pouvoir accéder à nos fichiers sensibles, appelons les « admin.php » et « clients.php »
C'est le role de la
balise
En fait, elle s'utilise comme pour délimiter plusieurs fichiers .htaccess dans un seul.
Dans l'idée, ca donne ca :
 |
 |
[Première structure .htaccess]
[Deuxieme structure .htaccess]
|
Voici un exemple concret, qui autorise l'utilisateur Gutek à accéder à admin.php, et l'utilisateur ResponsableClientele à accéder au fichier client.php :
 |
 |
ErrorDocument 403 http://Gutek.com/seul_gutek_peut_accéder.php
AuthUserFile /repertoire/.fichier_de_passwords
AuthGroupFile /dev/null
AuthName "Accès pour l'Admin"
AuthType Basic
require user Gutek
ErrorDocument 403 http://Gutek.com/réservé_au_responsable_clients.php
AuthUserFile /repertoire/.fichier_de_passwords
AuthGroupFile /dev/null
AuthName "Accès clientèle"
AuthType Basic
require user ResponsableClientele
|
Point particulier : Depuis la version 1.3 de Apache, on peut utiliser la balise .
IV. 4. Autres exemples d'utilisation de Files combiné aux restrictions de domaine
Vous avez fait un site denoncant la coupe des arbres au Cameroun ? il est possible d'empecher tous les camerounais d' accéder aux images du site :
 |
 |
[structure .htaccess]
Order Deny, Allow
Allow from all
Deny from .cm
|
Note de Gutek : je n'ai rien contre le Cameroun, c'est juste un exemple. Que les camerounais ne commencent pas à me jetter des buches !
Vous n'aimez pas les gens de chez Free ? Qu'à cela ne tienne?
 |
 |
[structure .htaccess]
Order Deny, Allow
Deny from .free.fr
|
ils seront privés d'images eux aussi ! (et puis comme ca, les camerounais m'en voudront moins à présent, ca équilibre

)
IV. 5. Remplir certaines conditions seulement
C'est le role de la commande
Satisfy. Elle prend en argument soit all (toutes les conditions), soit any (l'une de des conditions).
 |
 |
Order Allow, Deny
Deny from all
Allow from .futurezone.biz
Require user Europa Io Ikonos
Satisfy Any
|
cette facon de procéder permet l'acces SOIT à une personne venant du domaine futurezone.biz, SOIT à l'un des utilisateurs prévus (europa, io, ou ikonos)
Si on precisait Satisfy all, il faudrait alors que ce soit l'une de ces trois personnes, ET QUE la requete vienne du domaine futurezone.biz.
IV. 6. Associer des fichiers à une application locale
Pour finir avec les options, voyons les MIME-type.
Il s'agit de la fonction sans doute la plus dangereuse proposée par htaccess. En effet, le type MIME permet d'associer le lancement d'une application automatiquement à un type de fichier portant une extension donnée.
La puissance de cette fonction vient du fait qu'elle bypass toute association predefinie en local.
Syntaxe :
AddType mime/type [liste d'extension]
 |
 |
AddType image/x-photoshop PSD
|
le site envoie ainsi le fichier, en ordonnant de lancer Photoshop pour l'ouvrir dans cet exemple.
Le danger peut venir du fait qu'il est possible de rencontrer un fichier son qui devrait avoir une extension en .wav par exemple, mais qui en réalité a recu une extension .gif.
Et dans ce cas, il est possible d'indiquer au navigateur de considérer tout fichier .gif en tant que fichier son.
On force tous les fichiers, quelle que soit leur extension, à un MIME-type par la commande
ForceType mime/type
 |
 |
ForceType image/jpg
|
Ceci oblige à considérer tout fichier du répertoire, quelle que soit son extension, comme étant une image .jpg
Enfin,
DefaultType mime/type force l'extension par defaut (et par là le comportement du navigateur) de tout fichier d'extension inconnue :
 |
 |
DefaultType text/html
|
Dans cet exemple, tout fichier inconnu (par ex truc.chose) sera interpreté comme étant du Html.
V. Le fichier de mots de passe
Ce fichier est essentiel. Il s'agit d'un simple fichier texte, qui devra être composé ligne par ligne de chacun des comptes d'utilisateurs autorisés.
Synthaxe :
Login : Pass
Exemple :
 |
 |
Juju:amethiste
lulu:diamant
zorro:Tv4(tm
|
Evidement, dans ce cas là les pass sont en clair, et chaque utilisateur doit avoir de toutes facons un mot de passe suffisament compliqué.
Comme vous l'aurez remarqué dans les exemples précédants, le nom de ce fichier est lui aussi de la forme point+nom de fichier
Pour sa création, voir donc au debut de cet article.
VI. Cryptage des mots de passe
Avec htaccess, Apache fournit en outre le moyen de crypter les mots de passe de notre fichier.
On utilise pour ceci l'outil
htpasswd, qui se trouve dans le repertoire /bin/
Syntaxe :
 |
 |
création du fichier :
htpasswd -c [chemin du fichier] utilisateur
ajouter un compte (utilisateur et mot de passe):
htpasswd [chemin du fichier] utilisateur
Apache demande alors le mot de passe sur la ligne de commande
|
VII. Conclusion
Voila qui termine cette revue de detail de la mise en place d'une protection htaccess sous Apache. On l'a vu, dans sa version basique elle est extremement simple a installer, tout autant que difficile à attaquer.
Mais on a vu aussi que sa structure a base d'options est suffisament complexe pour permettre une grande souplesse d'utilisation.
4N9e pour FutureZone, 2005