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.

hta1.jpg

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 :

code_header Code:
spacer 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


code_header Code:
spacer
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 :

code_header Code:
spacer

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 :

code_header Code:
spacer 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,

code_header Code:
spacer 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 :

code_header Code:
spacer 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 :

code_header Code:
spacer

[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 :

code_header Code:
spacer

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 :

code_header Code:
spacer

[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?

code_header Code:
spacer

[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 Clin d'oeil )


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).

code_header Code:
spacer 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]

code_header Code:
spacer
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

code_header Code:
spacer
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 :

code_header Code:
spacer
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 :

code_header Code:
spacer 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 :

code_header Code:
spacer 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