Les fichiers htaccess, htpasswd et htgroup



  [0x01] Présentation :



 Auteur : GangstucK
 Date début : 28/08/2001
 System : Tout systèmes
 For : Subkulture 2001
 Mail : k0deback@yahoo.fr
 Date fin : 03/09/2001
 Type : Introduction
 Version : 1.0

 How to use .htaccess, .htpasswd and .htgroup files.


Comprendre le fonctionnement des fichiers .htaccess, .htpasswd et .htgroup est trés important lors de l'administration d'un serveur web.. Lorsque l'on héberge un contenu (quel qu'il soit..), restreindre son accés par un quelconque moyen est trés important...

Sommaire :
        [0x02Introduction
        [0x03Authentification
        [0x04Le fichier .htpasswd
        [0x05Le fichier .htgroup
          [5.1Structure du fichier
          [5.2Création du fichier
        [0x06Le fichier .htaccess
          [6.1Structure du fichier
          [6.2Authentification par mot de passe
          [6.3Authentification par nom d'utilisateur
          [6.4Authentification par domaine Internet
          [6.5Authentification par domaine Internet et .htpasswd/.htgroup
        [0x07Divers
          [7.1Introduction
          [7.2Messages d'erreurs personnalisés
          [7.3Page d'index personnalisable
        [0x08Références
          [8.1Pages de manuels
          [8.2Documents
        [0x09Remerciements et conclusion




  [0x02] Introduction :



Dans la plupart des cas, les ressources que propose les serveurs web sont consultables depuis Internet par tout le monde. Dans notre cas, nous voulons offrir un ensemble de services accessible uniquement à des personnes ciblées possédant un login (nom d'utilisateur) et un password (mot de passe).

J'entends par 'services' l'accés aux fichiers composants le répertoire...

Pour ce faire, nous alons utiliser les fichiers .htaccess. Leurs utilisations, trés diverses, peuvent régir les répertoires/sous répertoires, les fichiers... Dans la plupart des cas, nous pouvons voir :
  • Accés autorisé aux utilisateurs via saisie d'un Login et d'un Password.
    Base de données "nom_utilisateur/mot_de_passe" contenu dans un fichier .htpasswd. Le fichier "/etc/passwd" est un fichier système régissant les utilisateurs systèmes.. il n'a donc aucun rapport avec les fichiers ".htpassword" renfermant toutes personnes pouvant accéder aux ressources protégées du serveur web.

  • Accés autorisé/refusé aux utilisateurs d'un domaine internet spécifique...

  • Accés autorisé aux utilisateurs d'un même domaine internet spécifique aprés authentification (login/pass).

  • Définition de pages d'erreurs (404, 403...) personnalisées.




  [0x03] Authentification :



Lorsque le serveur détecte la présence d'un fichier ".htaccess" dans un répertoire, il va l'analyser (grace à sa syntaxe) et appliquer ensuite le type de protection à mettre en oeuvre dans le répertoire.

Du fait de sa diversité au niveau des différents types de protections, le système de fichiers ".htaccess" est trés puissant..





  [0x04] Le fichier .htpasswd :



Nous avons vu précedemment que les fichiers ".htaccess" puisés directement dans une base d'utilisateurs appellé couramment ".htpasswd" comportant une série de "login/pass". Chaque entrée du fichier se verra délivrer un accés aux données du répertoire (aprés authentification)...

Tous serveurs de types NCSA offrent un utilitaire nommé "htpasswd" permettant de créer et ainsi de gérer les fichiers type ".htpasswd".

Nous allons maintenant voir l'utilisation du programme "htpasswd" :


 [root@subkulture bin]$ htpasswd

  Usage:
          htpasswd [-cmdps] passwordfile username
          htpasswd -b[cmdps] passwordfile username password

   -c  Create a new file.
   -m  Force MD5 encryption of the password (default).
   -d  Force CRYPT encryption of the password.
   -p  Do not encrypt the password (plaintext).
   -s  Force SHA encryption of the password.
   -b  Use the password from the command line rather than prompting for it.
 
  On Windows and TPF systems the '-m' flag is used by default.
  On all other systems, the '-p' flag will probably not work.
  
 [root@subkulture bin]$

Ensuite, nous créons un répertoire (repass) qui va héberger le(s) fichier(s) ".htpasswd". On lui donnera les droits d'accés qui lui sont du (lecture / éxecution) :


 [root@subkulture bin]$ mkdir repass
 [root@subkulture bin]$ chmod o+rx repass

Le répertoire est crée, il nous manque maintenant le fichier ".htpasswd" :


 [root@subkulture bin]# ./htpasswd -c repass/.htaccess gang
 
 New password:
 Re-type new password:
 Adding password for user gang
 
 [root@subkulture bin]$

On a affiché le fichier ".htpasswd" et il contient bien l'utilisateur GangstucK ainsi que son mot de pass crypté.

Nous allons ajouter un utilisateur (Martony) au fichier ceci à l'aide de "htpasswd" :


 [root@subkulture bin]# ./htpasswd repass/.htpasswd Martony
 
 New password: 
 Re-type new password: 
 Adding password for user Martony
 
 [root@subkulture repass]# cat .htaccess
 
 gang:.4hPKMT39vA
 Martony:p9uvwlyUDbq
 
 [root@subkulture repass]#

Pour modifier le mot de passe d'un utilisateur, il suffit de recommencer l'étape précedente :


 [root@subkulture bin]$ htpasswd repass/.htpasswd Martony
 
 New password: 
 Re-type new password: 
 Adding password for user Martony
 
 [root@subkulture bin]$

Pour supprimer un utilisateur présent dans le fichier, il suffit de retirer la ligne correspondant à l'utilisateur...


Voyons maintenant comment mettre en oeuvre le fichier ".htaccess" (ensemble de rêgles de protection)... car la nous avons uniquement notre base utilisateur...






  [0x05] Le fichier .htgroup :



Il est possible de spécifier des groupes d'utilisateurs (comme sous les systèmes de types *nix).

Il permettra d'indiquer pour chaque groupe, chaque utilisateur qui le compose.

- Structure du fichier :


  groupe1:nom1 
  groupe2:nom1 nom2
  groupe3:nom1 nom2 nom3

Nous allons créer un fichier .htgroup comprenant 2 groupes à savoir :
  • Administrateurs
  • Utilisateurs
- Création du fichier :


  administrateurs:gang marty
  utilisateurs:nick1 nick2 nick3 nick4





  [0x06] Le fichier .htaccess :



Le fichier ".htaccess" est le fichier qui va contenir les "régles de protection" à mettre en oeuvre.

Il est crée simplement, à l'aide d'un éditeur de texte. Il est placé ensuite dans le répertoire à "protéger".


Structure du fichier :

  • AuthUserFile chemin_du_fichier
    spécifie le chemin d'accés (depuis la racine) au fichier ".htpasswd".
  • AuthGroupFile chemin_du_fichier
    spécifie le chemin d'accés (depuis la racine) au fichier ".htgroup"
  • AuthName "message"
    spécifie le texte à afficher dans la boite de dialogue d'authentification...
  • AuthType type
    type d'authentification à mettre en oeuvre.

Authentification par mot de passe :

Méthode permettant une identification de type "login/password". L'utilisateur donne son nom et ensuite le mot de passe qui lui correspond. Le serveur procéde alors à une vérification depuis le fichier ".htpasswd". L'accés est ensuite autorisé ou, au cas échéant, refusé...


 AuthUserFile /usr/local/bin/www/repass/.htpasswd
 AuthGroupFile /dev/null
 AuthName "Bienvenue"
 AuthType Basic

 <limit GET>
 require valid-user
 </Limit>

- Structure :
  • AuthUserFile /usr/local/bin/www/repass/.htpasswd :
    spécifie le chemin d'accés (depuis la racine) au fichier ".htpasswd".
  • AuthGroupFile /dev/null :
    spécifie le chemin d'accés (depuis la racine) au fichier ".htgroup" (/dev/null).
  • AuthName "Bienvenue" :
    spécifie le texte à afficher dans la boite de dialogue d'authentification...
  • AuthType basic :
    type d'authentification à utiliser.

  • <Limit GET> :
    bloc contenant des directives concernant les différentes méthodes d'accés (ici GET).
  • require valid-user :
    permet l'accés à tous utilisateurs possédant une entrée dans "AuthUserFile".
  • </Limit> :
    fermeture du bloc Limit (similaire au HTML...).
Dans notre exemple seul les utilisateurs "Gangstuck et Martony" pourront accéder aux données...


Authentification par nom d'utilisateur :

Cette méthode permet de s'identifier uniquement grace à un nom d'utilisateur valide (sans mot de passe). Biensur, cette authentification est trés dangereuse du fait de sa simplicitée...


 AuthUserFile /usr/local/bin/www/repass/.htpasswd
 AuthGroupFile /usr/local/bin/www/repass/.htgroup
 AuthName "identification utilisateur"
 AuthType Basic

 <limit GET>
 require user medgi rox lionel ohm ad
 </Limit>

- Structure :
  • AuthUserFile /usr/local/bin/www/repass/.htpasswd :
    spécifie le chemin d'accés (depuis la racine) au fichier ".htpasswd".
  • AuthGroupFile /usr/local/bin/www/repass/.htgroup :
    spécifie le chemin d'accés (depuis la racine) au fichier ".htgroup" (authentification de type group).
  • AuthName "identification utilisateur" :
    spécifie le texte à afficher dans la boite de dialogue d'authentification...
  • AuthType basic :
    type d'authentification à utiliser.

  • <Limit GET> :
    bloc contenant des directives concernant les différentes méthodes d'accés (ici GET).
  • require user medgi rox lionel ohm ad :
    permet l'accés aux utilisateurs "medgi, rox, lionel, ohm et ad" d'accéder au répertoire. Chaque utilisateur ne spécifiera aucun mot de passe.. uniquement son nom d'utilisateur (contenu dans la liste).
  • </Limit> :
    fermeture du bloc Limit (similaire au HTML...).

Authentification par domaine Internet :

Cette méthode va nous permettre d'autoriser ou de refuser l'accés aux pages HTML à toutes personnes venant d'un même domaine. Dans notre cas, on accepte toutes personnes venant des domaines "univ.fr" et "univ.mc", les autres requêtes sont rejetées...

Ici, on aura uniquement besoin d'un fichier .htaccess pour effectuer ce type de protection... nous verrons par la suite comment doubler cette authentification avec, en plus, une identification par mot de passe...


 
 AuthUserFile /dev/null
 AuthGroupFile /dev/null
 AuthName "identification Internet"
 AuthType Basic
 
 <limit GET>
  order deny,allow
  deny from all
  allow from univ.fr
  allow from univ.mc
 </Limit>


- Structure :
  • AuthUserFile /dev/null :
    Dans ce cas "/dev/null" car l'authentification ne se base pas sur le fichier .htpasswd.
  • AuthGroupFile /dev/null :
    Dans ce cas "/dev/null" car l'authentification ne se base pas sur le fichier .htgroup.
  • AuthName "identification Internet" :
    spécifie le texte à afficher dans la boite de dialogue d'authentification...
  • AuthType basic :
    type d'authentification à utiliser.

  • <Limit GET> :
    bloc contenant des directives concernant les différentes méthodes d'accés (ici GET).
  • order deny,allow :
    déclaration de l'ordre des régles à savoir : deny (refuse) puis allow (autorise).
  • deny from all :
    Directive indiquant le refus d'accés concernant toutes requetes.
  • allow from univ.fr / univ.mc :
    Directive indiquant l'autorisation d'accés des domaines "univ.fr" et "univ.mc".
  • </Limit> :
    fermeture du bloc Limit (similaire au HTML...).


Nous allons maintenant voir comment refuser l'accés à un domaine internet en particulier :


 
 AuthUserFile /dev/null
 AuthGroupFile /dev/null
 AuthName "identification Internet"
 AuthType Basic
 
 <limit GET>
  order allow,deny
  allow from all
  deny from pasbo.fr
 </Limit>


- Structure :
  • AuthUserFile /dev/null :
    Dans ce cas "/dev/null" car l'authentification ne se base pas sur le fichier .htpasswd.
  • AuthGroupFile /dev/null :
    Dans ce cas "/dev/null" car l'authentification ne se base pas sur le fichier .htgroup.
  • AuthName "identification Internet" :
    spécifie le texte à afficher dans la boite de dialogue d'authentification...
  • AuthType basic :
    type d'authentification à utiliser.

  • <Limit GET> :
    bloc contenant des directives concernant les différentes méthodes d'accés (ici GET).
  • order allow,deny :
    déclaration de l'ordre des régles à savoir : allow (autorise) puis deny (refuse).
  • allow from all :
    Directive indiquant l'autorisation d'accés à tout le monde.
  • deny from pasbo.fr :
    Directive indiquant le refus d'accés au domaine "pasbo.fr".
  • </Limit> :
    fermeture du bloc Limit (similaire au HTML...).

Authentification par domaine Internet et .htpasswd/.htgroup :

Cette méthode va nous permettre d'authentifier une connection par domaine mais également par mot de passe.

Ici, on mettra en oeuvre un fichier .htaccess ainsi qu'un fichier .htpasswd. Nous verrons par la suite comment varier cette authentification avec par exemple, la présence d'un fichier type .htgroup.


 
 AuthUserFile /usr/local/bin/www/repass/.htpasswd
 AuthGroupFile /dev/null
 AuthName "identification Internet et utilisateur"
 AuthType Basic
 
 <limit GET>
  order deny,allow
  deny from all
  allow from univ.fr 
  require valid-user
  satisfy any
 </Limit>


- Structure :
  • AuthUserFile /usr/local/bin/www/repass/.htpasswd :
    spécifie le chemin d'accés (depuis la racine) au fichier ".htpasswd".
  • AuthGroupFile /dev/null :
    Dans ce cas "/dev/null" car l'authentification ne se base pas sur le fichier .htgroup.
  • AuthName "identification Internet et password" :
    spécifie le texte à afficher dans la boite de dialogue d'authentification...
  • AuthType basic :
    type d'authentification à utiliser.

  • <Limit GET> :
    bloc contenant des directives concernant les différentes méthodes d'accés (ici GET).
  • order deny,allow :
    déclaration de l'ordre des régles à savoir : deny (refuse) puis allow (autorise).
  • deny from all :
    Directive indiquant le refus d'accés concernant toutes requetes.
  • allow from univ.fr :
    Directive indiquant l'autorisation d'accés au domaine "univ.fr".
  • require valid-user :
    permet l'accés à tous utilisateurs possédant une entrée dans "AuthUserFile".
  • satisfy any :
    permet de définir l'accés selon le respect d'une des deux conditions (sous-domaine ou password). L'utilisateur qui n'appartient pas au sous-domaine univ.fr pourra, s'il posséde un accés dans le fichier .htpasswd, accéder aux données.. Quand aux personnes d'univ.fr, ils accéderont aux données normalement.
  • </Limit> :
    fermeture du bloc Limit (similaire au HTML...).


Ici nous allons mettre en oeuvre deux authentifications différentes à savoir authentification par sous-domaine et par groupe. Les deux conditions doivent être respéctée :


 
 AuthUserFile /usr/local/bin/www/repass/.htpasswd
 AuthGroupFile /usr/local/bin/www/repass/.htgroup
 AuthName "identification Internet et group"
 AuthType Basic
 
 <limit GET>
  order deny,allow
  deny from all
  allow from univ.fr 
  require group intranet
  satisfy all
 </Limit>


- Structure :
  • AuthUserFile /usr/local/bin/www/repass/.htpasswd :
    spécifie le chemin d'accés (depuis la racine) au fichier ".htpasswd".
  • AuthGroupFile /usr/local/bin/www/repass/.htgroup :
    spécifie le chemin d'accés (depuis la racine) au fichier ".htgroup" (authentification de type group).
  • AuthName "identification Internet" :
    spécifie le texte à afficher dans la boite de dialogue d'authentification...
  • AuthType basic :
    type d'authentification à utiliser.

  • <Limit GET> :
    bloc contenant des directives concernant les différentes méthodes d'accés (ici GET).
  • order deny,allow :
    déclaration de l'ordre des régles à savoir : deny (refuse) puis allow (autorise).
  • deny from all :
    Directive indiquant le refus d'accés concernant toutes requetes.
  • allow from univ.fr :
    Directive indiquant l'autorisation d'accés au domaine "univ.fr".
  • require group administrateurs :
    permet l'accés à tous utilisateurs possédant une entrée dans "AuthUserFile" et faisant partie du groupe "administrateurs" (gang, marty).
  • satisfy all :
    les deux contraintes doivent être respéctée à savoir : toutes personnes devra être connectée depuis le sous-domaine "univ.fr" et faire partie du groupe "administrateurs" contenu dans le fichier ".htgroup" (voir plus haut). Uniquement dans les deux cas suivant l'utilisateur se verra délivrer un accés aux ressources...
  • </Limit> :
    fermeture du bloc Limit (similaire au HTML...).




  [0x07] Divers :



Introduction

Tout les exemples ci dessous peuvent prendre place directement dans le fichier de configuration d'Apache, httpd.conf, situé dans votre répertoire de configuration /conf... C'est la solution que je préfére, mais il est vrai que si vous disposez uniquement d'un simple accés utilisateur sur un serveur web acceptant l'usage des fichiers .htaccess, dans ce ca, l'utililté se fait ressentir...


Messages d'erreurs personnalisés

Nous allons utiliser les fichiers .htaccess afin de personnaliser les messages d'erreurs.

Dans mon cas, je crée un répertoire qui va accueillir toutes les pages d'erreurs : /error.

Syntaxe :
    ErrorDocument code-réponse (chemin du fichier, texte ou url)

  
  # 40x : requête incorrecte.
    ErrorDocument 401 /error/401.php
    ErrorDocument 403 /error/403.php
    ErrorDocument 404 /error/404.php
  # 50x : erreur interne du serveur.
    ErrorDocument 500 /error/500.php


C'est quand même plus propre de balancer tout ça dans httpd.conf... enfin bon.


Page d'index personnalisable

Vous savez tout comme moi que le fichier index est un fichier qui est affiché par défaut, lorsque un utilisateur ne précise pas de nom de fichiers dans sa requête (http://www.mondomaine.com/ va en fait pointé sur http://www.mondomaine.com/index.html). Ceci est invisible aux yeux de l'utilisateur, mais est en réalité d'une importance capitale pour des raisons de confidentialité... Par défault nous rencontrons les fichiers index.html et index.htm.

Syntaxe :
    DirectoryIndex index1, index2, index3, ...

  
  # Indexs
  DirectoryIndex index.php index.php3 index.html index.htm /error/403.php3


Le serveur va tout d'abord rechercher la présence d'un des fichiers index.php, index.php3, index.html et index.htm. Si aucun de ces fichiers existent, la page 403.php3 (page d'erreur 404) s'affichera, évitant ainsi le listage du répertoire...






  [0x08] Références :



Je ne sais pas... peut-être :





  [0x09] Remerciements et conclusion :



Remerciements
    - All the Subkulture team..
    - NoRoute, Noway, Cryptel, HVU, TS63...
    - Secu-fr, Phreakon, Frstylez, Tipiak, MVM, KoM, Organiks...

    - Psirac, phreaking party tour rulez (toulouse 2000).
    - Lionel et Descript, coding/fumette party tour rulez (toulouse 2001).
    - Medgi et Martony, phreaking/coding party tour rulez (strasbourg 2001).

    Un petit merci à Marijeanne (quand même...).

Conclusion

En ésperant que cet article (si je puis dire) aura éclairé votre lanterne... dans tout les cas moi je pars me rouler un oinj... Une petite dédicace à descript et à lionel :)

Questions/critiques/bonjour : k0deback@yahoo.fr.


================================================================================
 - J'ai plus d'temps à perdre pleurer sur mon sort en clair j'ai bouffé l'tonnerre ma bouche recrache l'éclair -
================================================================================





- top -