| <?xml version="1.0" ?> |
| <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd"> |
| <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?> |
| <!-- English Revision : 1555566 --> |
| <!-- French translation : Lucien GENTIS --> |
| <!-- Reviewed by : Vincent Deffontaines --> |
| |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <manualpage metafile="auth.xml.meta"> |
| <parentdocument href="./">Recettes / Tutoriels</parentdocument> |
| |
| <title>Authentification et autorisation</title> |
| |
| <summary> |
| <p>L'authentification est un processus qui vous permet de vérifier |
| qu'une personne est bien celle qu'elle prétend être. L'autorisation |
| est un processus qui permet à une personne d'aller là où elle veut |
| aller, ou d'obtenir les informations qu'elle désire.</p> |
| |
| <p>Pour le contrôle d'accès en général, voir le document <a |
| href="access.html">Tutoriel du contrôle d'accès</a>.</p> |
| |
| |
| </summary> |
| |
| <section id="related"><title>Modules et directives concernés</title> |
| |
| <p>Trois groupes de modules sont concernés par le processus |
| d'authentification et d'autorisation. Vous devrez utiliser au moins un |
| module de chaque groupe.</p> |
| |
| <ul> |
| <li>Type d'authentification (voir la directive <directive |
| module="core">AuthType</directive>) |
| <ul> |
| <li><module>mod_auth_basic</module></li> |
| <li><module>mod_auth_digest</module></li> |
| </ul> |
| </li> |
| <li>Fournisseur d'authentification (voir les directives <directive |
| module="mod_auth_basic">AuthBasicProvider</directive> et <directive |
| module="mod_auth_digest">AuthDigestProvider</directive>) |
| <ul> |
| <li><module>mod_authn_anon</module></li> |
| <li><module>mod_authn_dbd</module></li> |
| <li><module>mod_authn_dbm</module></li> |
| <li><module>mod_authn_file</module></li> |
| <li><module>mod_authnz_ldap</module></li> |
| </ul> |
| </li> |
| <li>Autorisation (voir la directive <directive |
| module="core">Require</directive>) |
| <ul> |
| <li><module>mod_authnz_ldap</module></li> |
| <li><module>mod_authz_dbm</module></li> |
| <li><module>mod_authz_groupfile</module></li> |
| <li><module>mod_authz_host</module></li> |
| <li><module>mod_authz_owner</module></li> |
| <li><module>mod_authz_user</module></li> |
| </ul> |
| </li> |
| </ul> |
| |
| <p>Le module <module>mod_authnz_ldap</module> est un fournisseur |
| d'authentification et d'autorisation. Le module |
| <module>mod_authn_alias</module> n'est pas un fournisseur |
| d'authentification lui-même, mais permet une configuration plus souple |
| des autres fournisseurs d'authentification.</p> |
| |
| <p>Le module <module>mod_authz_host</module> fournit une autorisation |
| et un contrôle d'accès basés sur le nom du serveur, l'adresse IP ou |
| certaines caractéristiques de la requête, mais ne fait pas partie du |
| système fournisseur d'authentification.</p> |
| |
| <p>Vous devriez aussi jeter un coup d'oeil au manuel de recettes <a |
| href="access.html">Contrôle d'accès</a>, qui décrit les différentes |
| méthodes de contrôle d'accès à votre serveur.</p> |
| |
| </section> |
| |
| <section id="introduction"><title>Introduction</title> |
| <p>Si votre site web contient des informations sensibles ou |
| destinées seulement à un groupe de personnes restreint, les |
| techniques exposées dans cet article vont vous aider à vous assurer |
| que les personnes qui ont accès à ces pages sont bien celles |
| auxquelles vous avez donné l'autorisation d'accès.</p> |
| |
| <p>Cet article décrit les méthodes "standards" de protection de |
| parties de votre site web que la plupart d'entre vous sont appelés à |
| utiliser.</p> |
| |
| <note><title>Note :</title> |
| <p>Si vos données ont un réel besoin de sécurisation, prévoyez |
| l'utilisation de <module>mod_ssl</module> en plus de toute méthode |
| d'authentification.</p> |
| </note> |
| </section> |
| |
| <section id="theprerequisites"><title>Les prérequis</title> |
| <p>Les directives décrites dans cet article devront être insérées |
| soit au niveau de la configuration de votre serveur principal (en |
| général dans une section <directive module="core" |
| type="section">Directory</directive>), soit au niveau de la |
| configuration des répertoires (fichiers <code>.htaccess</code>)</p> |
| |
| <p>Si vous envisagez l'utilisation de fichiers |
| <code>.htaccess</code>, la configuration de votre serveur devra |
| permettre l'ajout de directives d'authentification dans ces |
| fichiers. Pour ce faire, on utilise la directive <directive |
| module="core">AllowOverride</directive>, qui spécifie quelles |
| directives pourront éventuellement contenir les fichiers de |
| configuration de niveau répertoire.</p> |
| |
| <p>Comme il est ici question d'authentification, vous aurez besoin |
| d'une directive <directive module="core">AllowOverride</directive> |
| du style :</p> |
| |
| <example> |
| AllowOverride AuthConfig |
| </example> |
| |
| <p>Or, si vous avez l'intention d'ajouter les directives directement |
| dans le fichier de configuration principal, vous devrez bien entendu |
| posséder les droits en écriture sur ce fichier.</p> |
| |
| <p>Vous devrez aussi connaître un tant soit peu la structure des |
| répertoires de votre serveur, ne serait-ce que pour savoir où se |
| trouvent certains fichiers. Cela ne devrait pas présenter de grandes |
| difficultés, et j'essaierai de clarifier tout ça lorsque le besoin |
| s'en fera sentir.</p> |
| |
| </section> |
| |
| <section id="gettingitworking"><title>Mise en oeuvre</title> |
| <p>Nous décrivons ici les bases de la protection par mot de passe |
| d'un répertoire de votre serveur.</p> |
| |
| <p>Vous devez en premier lieu créer un fichier de mots de passe. La |
| méthode exacte selon laquelle vous allez créer ce fichier va varier |
| en fonction du fournisseur d'authentification choisi. Mais nous |
| entrerons dans les détails plus loin, et pour le moment, nous nous |
| contenterons d'un fichier de mots de passe en mode texte.</p> |
| |
| <p>Ce fichier doit être enregistré à un endroit non accessible |
| depuis le web, de façon à ce que les clients ne puissent pas le |
| télécharger. Par exemple, si vos documents sont servis à partir de |
| <code>/usr/local/apache/htdocs</code>, vous pouvez enregistrer le |
| fichier des mots de passe dans |
| <code>/usr/local/apache/passwd</code>.</p> |
| |
| <p>L'utilitaire <program>htpasswd</program> fourni avec Apache |
| permet de créer ce fichier. Vous le trouverez dans le répertoire |
| <code>bin</code> de votre installation d'Apache. Si vous avez |
| installé Apache à partir d'un paquetage tiers, il sera probablement |
| dans le chemin par défaut de vos exécutables.</p> |
| |
| <p>Pour créer le fichier, tapez :</p> |
| |
| <example> |
| htpasswd -c /usr/local/apache/passwd/passwords rbowen |
| </example> |
| |
| <p><program>htpasswd</program> vous demandera d'entrer le mot de |
| passe, et de le retaper pour confirmation :</p> |
| |
| <example> |
| # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br /> |
| New password: mot-de-passe<br /> |
| Re-type new password: mot-de-passe<br /> |
| Adding password for user rbowen |
| </example> |
| |
| <p>Si <program>htpasswd</program> n'est pas dans le chemin par |
| défaut de vos exécutables, vous devrez bien entendu entrer le chemin |
| complet du fichier. Dans le cas d'une installation par défaut, il se |
| trouve à <code>/usr/local/apache2/bin/htpasswd</code>.</p> |
| |
| <p>Ensuite, vous allez devoir configurer le serveur de façon à ce |
| qu'il demande un mot de passe et lui préciser quels utilisateurs disposent |
| de droits d'accès. Pour ce faire, vous pouvez soit éditer le |
| fichier <code>httpd.conf</code>, soit utiliser un fichier |
| <code>.htaccess</code>. Par exemple, si vous voulez protéger le |
| répertoire <code>/usr/local/apache/htdocs/secret</code>, vous pouvez |
| utiliser les directives suivantes, soit dans le fichier |
| <code>/usr/local/apache/htdocs/secret/.htaccess</code>, soit dans le |
| fichier <code>httpd.conf</code> à l'intérieur d'une section <Directory |
| /usr/local/apache/apache/htdocs/secret> :</p> |
| |
| <example> |
| AuthType Basic<br /> |
| AuthName "Fichiers réservés"<br /> |
| # (La ligne suivante est facultative)<br /> |
| AuthBasicProvider file<br /> |
| AuthUserFile /usr/local/apache/passwd/passwords<br /> |
| Require user rbowen |
| </example> |
| |
| <p>Examinons ces directives une à une. La directive <directive |
| module="core">AuthType</directive> définit la méthode |
| utilisée pour authentifier l'utilisateur. La méthode la plus |
| courante est <code>Basic</code>, et elle est implémentée par |
| <module>mod_auth_basic</module>. Il faut cependant garder à l'esprit |
| que l'authentification Basic transmet le mot de passe en clair depuis le |
| client vers le serveur. Cette méthode ne devra donc pas |
| être utilisée pour la transmission de données hautement sensibles si |
| elle n'est pas associée au module <module>mod_ssl</module>. Apache |
| supporte une autre méthode d'authentification : <code>AuthType |
| Digest</code>. Cette méthode est implémentée par le module <module |
| >mod_auth_digest</module> et a été conçue pour |
| améliorer la sécurité. Ce but n'a cependant pas été atteint et il est préférable |
| de chiffrer la connexion avec <module>mod_ssl</module>.</p> |
| |
| <p>La directive <directive module="core">AuthName</directive> définit |
| l'<dfn>Identificateur</dfn> (Realm) à utiliser avec |
| l'authentification. L'identificateur possède deux fonctions. Tout |
| d'abord, le client présente en général cette information à |
| l'utilisateur dans le cadre de la boîte de dialogue de mot de passe. |
| Ensuite, le client l'utilise pour déterminer quel mot de passe |
| envoyer pour une zone authentifiée donnée.</p> |
| |
| <p>Ainsi par exemple, une fois un client authentifié dans la zone |
| <code>"Fichiers réservés"</code>, il soumettra à nouveau |
| automatiquement le même mot de passe pour toute zone du même serveur |
| marquée de l'identificateur <code>"Fichiers réservés"</code>. De |
| cette façon, vous pouvez éviter à un utilisateur d'avoir à saisir |
| plusieurs fois le même mot de passe en faisant partager le même |
| identificateur entre plusieurs zones réservées. Bien entendu et pour |
| des raisons de sécurité, le client devra redemander le mot |
| de passe chaque fois que le nom d'hôte du serveur sera modifié.</p> |
| |
| <p>La directive <directive |
| module="mod_auth_basic">AuthBasicProvider</directive> est, dans ce |
| cas, facultative, car <code>file</code> est la valeur par défaut |
| pour cette directive. Par contre, cette directive sera obligatoire |
| si vous utilisez une autre source d'authentification comme |
| <module>mod_authn_dbm</module> ou |
| <module>mod_authn_dbd</module>.</p> |
| |
| <p>La directive <directive |
| module="mod_authn_file">AuthUserFile</directive> définit le chemin |
| du fichier de mots de passe que nous venons de créer avec |
| <program>htpasswd</program>. Si vous possédez un grand nombre |
| d'utilisateurs, la durée de la recherche dans un fichier texte pour |
| authentifier un utilisateur à chaque requête va augmenter |
| rapidement, et pour pallier cet inconvénient, Apache peut aussi |
| stocker les données relatives aux |
| utilisateurs dans des bases de données rapides. Le module |
| <module>mod_authn_dbm</module> fournit la directive <directive |
| module="mod_authn_dbm">AuthDBMUserFile</directive>. Le programme <program> |
| dbmmanage</program> permet de créer et manipuler ces fichiers. Vous |
| trouverez de nombreuses options d'autres types d'authentification |
| fournies par des modules tiers dans la <a |
| href="http://modules.apache.org/">Base de données des modules |
| d'Apache</a>.</p> |
| |
| <p>Enfin, la directive <directive module="core">Require</directive> |
| implémente la partie |
| autorisation du processus en définissant l'utilisateur autorisé à |
| accéder à cette zone du serveur. Dans la section suivante, nous |
| décrirons les différentes méthodes d'utilisation de la directive |
| <directive module="core">Require</directive> directive.</p> |
| </section> |
| |
| <section id="satisfy"><title>Satisfy</title> |
| |
| <p>La directive <directive module="core">Satisfy</directive> permet de |
| spécifier que plusieurs critères peuvent être considérés pour décider si |
| l'on peut accorder l'accès à un utilisateur particulier. Satisfy accepte |
| comme argument une des deux options - <code>all</code> ou |
| <code>any</code>. La valeur par défaut est <code>all</code>, ce qui |
| signifie que dans le cas où plusieurs critères sont spécifiés, |
| l'ensemble de ces derniers doit être satisfait pour que l'accès soit |
| accordé. Par contre, si la valeur est <code>any</code>, si plusieurs |
| critères sont spécifiés et si l'utilisateur satisfait à au moins un |
| d'entre eux, l'accès lui sera accordé.</p> |
| |
| <p>Un exemple d'utilisation de cette directive est un contrôle d'accès |
| afin de s'assurer que, bien qu'une ressource soit protégée par mot de |
| passe depuis l'extérieur de votre réseau, tous les hôtes de votre réseau |
| pourront y accéder sans authentification. Voici comment y parvenir en |
| utilisant la directive Satisfy :</p> |
| |
| <example> |
| <Directory /usr/local/apache/htdocs/sekrit><br /> |
| <indent> |
| AuthType Basic<br /> |
| AuthName intranet<br /> |
| AuthUserFile /www/passwd/users<br /> |
| AuthGroupFile /www/passwd/groups<br /> |
| Require group customers<br /> |
| Order allow,deny<br /> |
| Allow from internal.com<br /> |
| Satisfy any<br /> |
| </indent> |
| </Directory> |
| </example> |
| |
| </section> |
| |
| <section id="lettingmorethanonepersonin"><title>Autorisation d'accès à |
| plusieurs personnes</title> |
| <p>Les directives ci-dessus n'autorisent qu'une personne (quelqu'un |
| possédant le nom d'utilisateur <code>rbowen</code>) à accéder au |
| répertoire. Dans la plupart des cas, vous devrez autoriser |
| l'accès à plusieurs personnes. C'est ici |
| qu'intervient la directive <directive module="mod_authz_groupfile" |
| >AuthGroupFile</directive>.</p> |
| |
| <p>Si vous voulez autoriser l'accès à plusieurs personnes, vous |
| devez créer un fichier de groupes qui associe des noms de groupes |
| avec une liste d'utilisateurs de ce groupe. Le format de ce fichier |
| est très simple, et vous pouvez le créer avec votre éditeur de texte favori. |
| Son contenu se présente comme suit :</p> |
| |
| <example> |
| Nom-de-groupe: rbowen dpitts sungo rshersey |
| </example> |
| |
| <p>Il s'agit simplement d'une liste des membres du groupe sous la |
| forme d'une ligne séparée par des espaces.</p> |
| |
| <p>Pour ajouter un utilisateur à votre fichier de mots de passe |
| préexistant, entrez :</p> |
| |
| <example> |
| htpasswd /usr/local/apache/passwd/passwords dpitts |
| </example> |
| |
| <p>Vous obtiendrez le même effet qu'auparavant, mais le mot de passe |
| sera ajouté au fichier, plutôt que d'en créer un nouveau (C'est le |
| drapeau <code>-c</code> qui permet de créer un nouveau fichier de |
| mots de passe)..</p> |
| |
| <p>Maintenant, vous devez modifier votre fichier |
| <code>.htaccess</code> ou la directive <directive module="core" |
| type="section">Directory</directive> comme suit :</p> |
| |
| <example> |
| AuthType Basic<br /> |
| AuthName "By Invitation Only"<br /> |
| # Ligne facultative :<br /> |
| AuthBasicProvider file<br /> |
| AuthUserFile /usr/local/apache/passwd/passwords<br /> |
| AuthGroupFile /usr/local/apache/passwd/groups<br /> |
| Require group Nom-de-groupe |
| </example> |
| |
| <p>Maintenant, quiconque appartient au groupe |
| <code>Nom-de-groupe</code>, et possède une entrée dans le fichier |
| <code>password</code> pourra accéder au répertoire s'il tape le bon |
| mot de passe.</p> |
| |
| <p>Il existe une autre méthode moins contraignante pour autoriser |
| l'accès à plusieurs personnes. Plutôt que de créer un fichier de |
| groupes, il vous suffit d'ajouter la directive suivante :</p> |
| |
| <example> |
| Require valid-user |
| </example> |
| |
| <p>Le remplacement de la ligne <code>Require user rbowen</code> par |
| la ligne <code>Require valid-user</code> autorisera l'accès à |
| quiconque possédant une entrée dans le fichier password, et ayant |
| tapé le bon mot de passe.</p> |
| </section> |
| |
| <section id="possibleproblems"><title>Problèmes possibles</title> |
| <p>L'authentification Basic est spécifiée d'une telle manière que |
| vos nom d'utilisateur et mot de passe doivent être vérifiés chaque |
| fois que vous demandez un document au serveur, et ceci même si vous |
| rechargez la même page, et pour chaque image contenue dans la page |
| (si elles sont situées dans un répertoire protégé). Comme vous |
| pouvez l'imaginer, ceci ralentit un peu le fonctionnement. La mesure |
| dans laquelle le fonctionnement est ralenti est proportionnelle à la |
| taille du fichier des mots de passe, car ce dernier doit être ouvert |
| et la liste des utilisateurs parcourue jusqu'à ce que votre nom soit |
| trouvé, et ceci chaque fois qu'une page est chargée.</p> |
| |
| <p>En conséquence, ce ralentissement impose une limite pratique au |
| nombre d'utilisateurs que vous pouvez enregistrer dans un fichier de |
| mots de passe. Cette limite va varier en fonction des performances |
| de votre serveur, mais vous commencerez à remarquer un |
| ralentissement lorsque vous atteindrez quelques centaines |
| d'utilisateurs, et serez alors appelé à utiliser une méthode |
| d'authentification différente.</p> |
| </section> |
| |
| <section id="dbmdbd"><title>Autre méthode de stockage des mots de |
| passe</title> |
| |
| <p>Suite au problème évoqué précédemment et induit par le stockage |
| des mots de passe dans un fichier texte, vous pouvez être appelé à |
| stocker vos mots de passe d'une autre manière, par exemple dans une |
| base de données.</p> |
| |
| <p>Pour y parvenir, on peut utiliser les modules |
| <module>mod_authn_dbm</module> ou <module>mod_authn_dbd</module>. |
| Vous pouvez choisir comme format de stockage <code>dbm</code> ou |
| <code>dbd</code> à la place de <code>file</code> pour la directive |
| <directive module="mod_auth_basic">AuthBasicProvider</directive>.</p> |
| |
| <p>Par exemple, pour sélectionner un fichier dbm à la place d'un |
| fichier texte :</p> |
| |
| <example> |
| <Directory /www/docs/private><br /> |
| <indent> |
| AuthName "Private"<br /> |
| AuthType Basic<br /> |
| AuthBasicProvider dbm<br /> |
| AuthDBMUserFile /www/passwords/passwd.dbm<br /> |
| Require valid-user<br /> |
| </indent> |
| </Directory> |
| </example> |
| |
| <p>D'autres options sont disponibles. Consultez la documentation de |
| <module>mod_authn_dbm</module> pour plus de détails.</p> |
| |
| </section> |
| |
| |
| |
| <section id="moreinformation"><title>Pour aller plus loin . . .</title> |
| <p>Vous pouvez aussi lire la documentation de |
| <module>mod_auth_basic</module> et <module>mod_authz_host</module> |
| qui contient des informations supplémentaires à propos du |
| fonctionnement de tout ceci. |
| Certaines configurations d'authentification peuvent aussi être |
| simplifiées à l'aide du module <module>mod_authn_alias</module>.</p> |
| |
| <p>Les différents algorithmes de chiffrement supportés par Apache |
| pour authentifier les données sont expliqués dans <a |
| href="../misc/password_encryptions.html">PasswordEncryptions</a>.</p> |
| |
| <p>Enfin vous pouvez consulter la recette <a href="access.html">Access |
| Control</a>, qui décrit un certain nombre de situations en relation |
| avec le sujet.</p> |
| |
| </section> |
| |
| </manualpage> |
| |