Serveur Apache HTTP Version 2.4
Module Apache mod_access_compat
Description: | Autorisations de groupe à base de nom d'hôte (nom ou adresse IP) |
---|---|
Statut: | Extension |
Identificateur de Module: | access_compat_module |
Fichier Source: | mod_access_compat.c |
Compatibilité: | Disponible dans la version 2.3 du serveur HTTP Apache
à des fins de compatibilité
avec les précédentes versions d'Apache httpd 2.x. Les directives fournies par
ce module sont devenues obsolètes depuis la refonte d'authz. Voir
mod_authz_host |
Sommaire
Les directives fournies par le module
mod_access_compat
s'utilisent dans les sections
<Directory>
,
<Files>
et
<Location>
, ainsi
que dans les fichiers .htaccess
et permettent
de contrôler l'accès à certaines parties du serveur. On peut
contrôler cet accès en fonction du nom d'hôte du client, de son
adresse IP ou d'autres caractéristiques de la requête, telles
qu'elles sont enregistrées dans les variables
d'environnement. Les directives Allow
et Deny
permettent de spécifier
quels clients sont ou ne sont pas autorisés à accéder au serveur,
alors que la directive Order
définit le statut
d'accès par défaut, et détermine la manière dont les directives
Allow
et
Deny
interagissent
entre elles.
Les restrictions d'accès à base de nom d'hôte et
l'authentification à base de mot de passe peuvent être implémentées
simultanément. Dans ce cas, on utilise la directive Satisfy
pour déterminer la
manière dont ces deux modes de restrictions interagissent.
Note
Les directives fournies par le module
mod_access_compat
sont devenues obsolètes depuis
la refonte du module mod_authz_host
. Mélanger d'anciennes
directives comme Order
, Allow
ou Deny
avec des nouvelles comme
Require
est techniquement
possible mais déconseillé. En effet, mod_access_compat
a
été conçu pour supporter des configurations ne contenant que des anciennes
directives afin de faciliter le passage à la version 2.4. Voir le document
upgrading pour plus de détails.
En général, les directives de restriction d'accès s'appliquent à
toutes les méthodes d'accès (GET
, PUT
,
POST
, etc...). C'est d'ailleurs ce que l'on souhaite
dans la plupart des cas. Il est cependant possible de restreindre
certaines méthodes, alors que les autres méthodes ne se verront
imposée aucune restriction, en regroupant les directives à
l'intérieur d'une section <Limit>
.
Fusion des sections de configuration
Lorsqu'une directive fournie par ce module est utilisée dans une nouvelle section de configuration, cette dernière n'hérite d'aucune directive définie dans une section précédente.
Directive Allow
Description: | Spécifie quels hôtes peuvent accéder à une certaine zone du serveur |
---|---|
Syntaxe: | Allow from all|hôte|env=[!]variable
d'environnement
[hôte|env=[!]variable d'environnement] ... |
Contexte: | répertoire, .htaccess |
AllowOverride: | Limit |
Statut: | Extension |
Module: | mod_access_compat |
La directive Allow
permet de définir quels
hôtes ont le droit d'accéder à une certaine partie du serveur. On
peut contrôler l'accès par nom d'hôte, adresse IP, intervalle
d'adresses IP, ou toute autre caractéristique de la requête client
enregistrée dans les variables d'environnement.
Le premier argument de cette directive est toujours
from
. Les arguments suivants peuvent prendre trois
formes différentes. Si Allow from all
est spécifié,
tout hôte se voit accordé l'accès, en tenant compte des directives
Deny
et Order
comme décrit plus loin.
Pour ne permettre l'accès au serveur qu'à un hôte ou un groupe
d'hôtes particuliers, on peut spécifier un nom d'hôte sous
une des formes suivantes :
- Un nom de domaine (partiel)
-
Allow from example.org Allow from .net example.edu
Les hôtes dont les noms correspondent ou se terminent par la chaîne spécifiée ont l'autorisation d'accès. Seules les composantes entières du nom d'hôte doivent correspondre ; ainsi, dans l'exemple ci-dessus,
foo.example.org
correspondra, maisfooexample.org
ne conviendra pas. Avec cette configuration, Apache httpd va effectuer une double recherche DNS sur l'adresse IP du client, sans tenir compte de la définition de la directiveHostnameLookups
. Tout d'abord, une recherche DNS inverse sur l'adresse IP est effectuée pour déterminer le nom d'hôte associé, puis une recherche directe sur le nom d'hôte est effectuée afin de s'assurer qu'il correspond bien à l'adresse IP originale. L'accès ne sera accordé que si le nom d'hôte correspond et si les recherches DNS inverse et directe concordent. - Une adresse IP complète
-
Allow from 10.1.2.3 Allow from 192.168.1.104 192.168.1.205
L'adresse IP d'un hôte auquel on a accordé l'accès
- Une adresse IP partielle
-
Allow from 10.1 Allow from 10 172.20 192.168.2
De un à trois des premiers octets d'une adresse IP, afin de restreindre l'accès à un sous-réseau.
- Une paire réseau/masque de sous-réseau
-
Allow from 10.1.0.0/255.255.0.0
Un réseau a.b.c.d, et un masque de sous-réseau w.x.y.z, pour une définition plus précise de la restriction d'accès imposée à un sous-réseau.
- Une spécification CIDR réseau/nnn
-
Allow from 10.1.0.0/16
Identique au cas précédent, mis à part que le masque est constitué des nnn bits de poids fort.
Notez que les trois derniers exemples désignent le même ensemble d'hôtes.
On peut spécifier des adresses et sous-réseaux IPv6 de la manière suivante :
Allow from 2001:db8::a00:20ff:fea7:ccea Allow from 2001:db8::a00:20ff:fea7:ccea/10
Le troisième format d'argument de la directive
Allow
permet de contrôler l'accès au serveur
en fonction de l'existence d'une variable d'environnement. Lorsque Allow
from env=variable d'environnement
est spécifié, la
requête est autorisée si la variable d'environnement variable
d'environnement existe. En revanche, lorsque Allow from
env=!env-variable
est spécifié, la
requête est autorisée si la variable d'environnement variable
d'environnement n'existe pas. Le serveur permet de définir
avec souplesse des variables d'environnement en se basant sur les
caractéristiques de la requête client et en utilisant les directives
fournies par le module mod_setenvif
. Ainsi, on peut
utiliser la directive Allow
pour permettre
l'accès en fonction de paramètres comme le User-Agent
(type de navigateur) des clients, le Referer
, ou
d'autres champs d'en-tête de la requête HTTP.
SetEnvIf User-Agent ^KnockKnock/2\.0 let_me_in <Directory "/docroot"> Order Deny,Allow Deny from all Allow from env=let_me_in </Directory>
Dans cet exemple, les navigateurs dont la chaîne user-agent
commence par KnockKnock/2.0
se verront accorder
l'accès, alors que tous les autres seront rejetés.
Fusion des sections de configuration
Lorsqu'une directive fournie par ce module est utilisée dans une nouvelle section de configuration, cette dernière n'hérite d'aucune directive définie dans une section précédente.
Directive Deny
Description: | Définit quels hôtes ne sont pas autorisés à accéder au serveur |
---|---|
Syntaxe: | Deny from all|hôte|env=[!]variable
d'environnement
[hôte|env=[!]variable d'environnement] ... |
Contexte: | répertoire, .htaccess |
AllowOverride: | Limit |
Statut: | Extension |
Module: | mod_access_compat |
Cette directive permet de restreindre l'accès au serveur en
fonction du nom d'hôte, de l'adresse IP ou de variables
d'environnement. Les arguments de la directive
Deny
sont identiques aux arguments de la
directive Allow
.
Directive Order
Description: | Définit le statut d'accès par défaut et l'ordre dans lequel
les directives Allow et
Deny sont évaluées. |
---|---|
Syntaxe: | Order ordre |
Défaut: | Order Deny,Allow |
Contexte: | répertoire, .htaccess |
AllowOverride: | Limit |
Statut: | Extension |
Module: | mod_access_compat |
La directive Order
, associée aux
directives Allow
et Deny
,
implémente un système de contrôle d'accès en trois passes. Au cours
de la première passe, ce sont soit toutes les directives Allow
, soit toutes les
directives Deny
qui sont traitées, selon
la définition de la directive Order
. Le reste des
directives (Deny
ou Allow
) est
traité au cours de la seconde passe. La troisième passe s'applique à
toutes les requêtes qui ne sont concernées par aucune des deux
premières passes.
Notez que toutes les directives Allow
et Deny
sont traitées, à la
différence d'un pare-feu classique où seule la première règle qui
correspond est utilisée. La dernière directive qui correspond
s'applique ( à la différence là encore d'un pare-feu classique). De
plus, l'ordre dans lequel les lignes apparaissent dans le fichier de
configuration n'a pas d'incidence -- toutes les lignes Allow
sont considérées comme
un groupe, toutes les lignes Deny
comme un autre, et le
statut par défaut a son existence propre.
Ordre peut être :
Allow,Deny
- Dans un premier temps, toutes les directives
Allow
sont évaluées ; au moins une d'entre elles doit correspondre, sinon la requête est rejetée. Ensuite, toutes les directivesDeny
sont évaluées. Si au moins l'une d'entre elles correspond, la requête est rejetée. Enfin, toute requête qui ne correspond à aucune directiveAllow
ouDeny
est rejetée par défaut. Deny,Allow
- Dans un premier temps, toutes les directives
Deny
sont évaluées ; Si au moins une d'entre elles correspond, la requête est rejetée, à moins qu'elle corresponde aussi à une directiveAllow
. Toute requête qui ne correspond à aucune directiveAllow
ouDeny
est autorisée. Mutual-failure
- Cet argument a le même effet que
Allow,Deny
et est devenu de ce fait obsolète.
Les mots-clés ne peuvent être séparés que par des virgules ; aucun espace ne doit s'intercaler entre eux.
Match | Résultat Allow,Deny | Résultat Deny,Allow |
---|---|---|
Correspond à Allow seulement | Requête autorisée | Requête autorisée |
Correspond à Deny seulement | Requête rejetée | Requête rejetée |
Aucune correspondance | Par défaut la seconde directive : rejet | Par défaut la seconde directive : autorisation |
Correspond à Allow & Deny | La dernière correspondance l'emporte : rejet | La dernière correspondance l'emporte : autorisation |
Dans cet exemple, tous les hôtes du domaine example.org ont l'autorisation d'accès ; tous les autres voient leur accès refusé.
Order Deny,Allow Deny from all Allow from example.org
Dans l'exemple suivant, tous les hôtes du domaine example.org ont
l'autorisation d'accès, sauf ceux du sous-domaine foo.example.org qui
voient leur accès refusé. Tous les hôtes qui ne sont pas dans le
domaine example.org sont rejetés car le statut par défaut est positionné
sur Deny
, et consiste donc en un
refus d'accès.
Order Allow,Deny Allow from example.org Deny from foo.example.org
Par contre, si la valeur de la directive
Order
, dans l'exemple précédent, est
Deny,Allow
, tout le monde a l'autorisation d'accès.
Ceci est dû au fait que Allow from example.org
sera
évalué en dernier, sans tenir compte de l'ordre réel dans lequel les
directives apparaissent dans le fichier de configuration, et va
l'emporter sur Deny from foo.example.org
. Tout hôte qui
n'est pas dans le domaine example.org
aura aussi
l'autorisation d'accès car le statut par défaut est positionné sur
Allow
et constitue donc une
autorisation d'accès.
La présence d'une directive Order
peut
affecter le contrôle d'accès à une partie du serveur même en
l'abscence de directives Allow
et Deny
associées, à cause de
son influence sur le statut par défaut. Par exemple,
<Directory "/www"> Order Allow,Deny </Directory>
va interdire tout accès au répertoire /www
à cause
du statut d'accès par défaut qui est défini à Deny
.
La directive Order
ne contrôle l'ordre
dans lequel sont traitées les directives d'accès qu'au cours de
chaque phase du traitement de la configuration du serveur. Ceci
implique, par exemple, qu'une directive Allow
ou Deny
située dans une section
<Location>
sera
toujours évaluée après une directive Allow
ou Deny
située dans une section
<Directory>
ou un
fichier .htaccess
, sans tenir compte de la
définition de la directive Order
. Pour plus
de détails à propos de la fusion des sections de configuration, voir
le document Comment fonctionnent les sections Directory,
Location et Files.
Fusion des sections de configuration
Lorsqu'une directive fournie par ce module est utilisée dans une nouvelle section de configuration, cette dernière n'hérite d'aucune directive définie dans une section précédente.
Directive Satisfy
Description: | Interaction entre le contrôle d'accès en fonction de l'hôte et l'authentification utilisateur |
---|---|
Syntaxe: | Satisfy Any|All |
Défaut: | Satisfy All |
Contexte: | répertoire, .htaccess |
AllowOverride: | AuthConfig |
Statut: | Extension |
Module: | mod_access_compat |
Compatibilité: | Affecté par <Limit> et <LimitExcept> à partir de la version
2.0.51 |
Politique d'accès dans le cas où on utilise à la fois Allow
et Require
. L'argument est soit
All
, soit Any
. L'utilisation de cette
directive n'a de sens que si l'accès à une zone particulière du
serveur est restreinte par utilisateur/mot de passe et en fonction
de l'adresse IP de l'hôte client. Dans ce cas, par
défaut (All
), le client doit satisfaire à la
restriction d'adresse, et fournir un couple
utilisateur/mot de passe valide. Avec l'argument Any
,
le client se verra accorder l'accès s'il satisfait à la restriction
d'adresse ou fournit un couple utilisateur/mot de passe valide. On
peut utiliser cette dernière définition pour restreindre l'accès à
une zone par mot de passe, mais accorder l'accès aux clients
possédant certaines adresses IP sans qu'ils aient à fournir de mot
de passe.
Par exemple, si vous souhaitez que les utilisateurs de votre réseau accèdent à une zone de votre site web sans restriction, mais que l'accès à cette zone nécessite un mot de passe pour les autres utilisateurs, vous pouvez utiliser une configuration du style :
Require valid-user Allow from 192.168.1 Satisfy Any
Une autre utilisation fréquente de la directive
Satisfy
est l'allègement des restrictions
d'accès à un sous-répertoire par rapport aux restrictions d'accès au
répertoire parent :
<Directory "/var/www/private"> Require valid-user </Directory> <Directory "/var/www/private/public"> Allow from all Satisfy Any </Directory>
Dans l'exemple ci-dessus, l'accès au répertoire
/var/www/private
nécessitera une authentification,
alors que l'accès au répertoire /var/www/private/public
sera accordé sans restriction.
Depuis la version 2.0.51, les directives
Satisfy
peuvent être restreintes à certaines
méthodes particulières à l'aide des sections <Limit>
et <LimitExcept>
.
Fusion des sections de configuration
Lorsqu'une directive fournie par ce module est utilisée dans une nouvelle section de configuration, cette dernière n'hérite d'aucune directive définie dans une section précédente.