Serveur Apache HTTP Version 2.2

Apache > Serveur HTTP > Documentation > Version 2.2 > Modules

#### A savoir

Ce document concerne une version ancienne (2.2) du serveur HTTP Apache. La version actuelle est documentée ici. Si vous n'avez pas encore effectué la mise è jour, veuillez suivre ce lien pour plus d'informations.

Pour consulter la version actuelle de ce document, vous pouvez suivre ce lien.

# Module Apache mod_authz_host

Langues Disponibles: en | fr | ja | ko

Description: | Autorisations de groupe basées sur l'hôte (nom ou adresse IP)
Statut: | Base
Identificateur de Module: | authz_host_module
Fichier Source: | mod_authz_host.c
Compatibilité: | Disponible depuis les versions 2.1 et supérieures d'Apache

### Sommaire

Les directives fournies par le module `mod_authz_host` s'utilisent dans des sections `<Directory>`, `<Files>`, et `<Location>`, ou des fichiers `.htaccess` pour contrôler l'accès à certaines zones du serveur. Le contrôle d'accès peut être effectué en fonction du nom d'hôte, de l'adresse IP, ou d'autres caractéristiques de la requête client, telles qu'elles sont enregistrées dans des 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` vont interagir.

Les restrictions d'accès basées sur l'hôte et l'authentification à base de mots de passe peuvent être utilisées conjointement. Dans ce cas, la directive `Satisfy` permet de déterminer la manière dont ces deux méthodes de restriction interagissent.

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 ne restreindre l'accès que pour certaines méthodes, tout en laissant les autres méthodes sans protection, en plaçant les directives dans une section `<Limit>`.

### Directives

### Voir aussi

- `Satisfy`
- `Require`

- Commentaires

## Directive Allow

Description: | Contrôles quels hôtes peuvent accéder à une certaine zone du serveur
Syntaxe: | `Allow from all|hôte|env=[!]var-env [hôte|env=[!]var-env] ...`
Contexte: | répertoire, .htaccess
AllowOverride: | Limit
Statut: | Base
Module: | mod_authz_host
Compatibilité: | Le support de la négation de env=env-variable est assuré depuis la version 2.2.10 du serveur HTTP Apache

La directive `Allow` permet de contrôler quels hôtes peuvent accéder à une zone du serveur. On peut contrôler l'accès en fonction du nom d'hôte, de l'adresse IP, d'un intervalle d'adresses IP, ou d'autres caractéristiques de la requête client enregistrées dans des variables d'environnement.

Le premier argument de cette directive est toujours `from`. Les arguments suivants peuvent se présenter sous trois formes. Si `Allow from all` est spécifié, tous les hôtes ont l'autorisation d'accès, sauf si la configuration des directives `Deny` et `Order` apporte une restriction quelconque, comme décrit plus loin. Afin de n'accorder l'accès au serveur qu'à certains hôtes ou groupes d'hôtes, on peut utiliser l'argument hôte sous les formes suivantes :

Un nom de domaine, éventuellement partiel

  ### Exemple :

  `Allow from apache.org
  Allow from .net exemple.edu`

  Les hôtes dont les nom correspond à la chaîne spécifiée, ou se terminant par elle, sont autorisés à accéder. Seuls les éléments complets du nom de domaine sont comparés, si bien que l'exemple ci-dessus correspondra à `foo.apache.org`, mais pas à `fooapache.org`. Avec cette configuration, Apache va effectuer une double recherche DNS sur l'adresse IP du client, sans tenir compte de la définition de la directive `HostnameLookups`. Il effectue tout d'abord une recherche DNS inverse sur l'adresse IP afin de déterminer le nom d'hôte associé, puis une recherche directe sur le nom d'hôte pour vérifier s'il correspond bien à l'adresse IP originale. L'accès ne sera accordé que si le nom d'hôte correspond à la chaîne spécifiée et si les recherches DNS inverse et directe produisent un résultat cohérent.

Une adresse IP complète

  ### Exemple :

  `Allow from 10.1.2.3
  Allow from 192.168.1.104 192.168.1.205`

  L'adresse IP d'un hôte qui a l'autorisation d'accès

Une adresse IP partielle

  ### Exemple :

  `Allow from 10.1
  Allow from 10 172.20 192.168.2`

  Les 1 à 3 premiers octets d'une adresse IP, pour référencer un sous-réseau.

Une paire réseau/masque de sous-réseau

  ### Exemple :

  `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 la restriction plus fine d'un sous-réseau.

Une spécification CIDR réseau/nnn

  ### Exemple :

  `Allow from 10.1.0.0/16`

  Identique au cas précédent, mais le masque de sous-réseau se compose des nnn bits de poids forts.

Notez que les trois derniers exemples référencent exactement 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'arguments 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=var-env` est spécifié, la requête est autorisée si la variable d'environnement var-env existe. Lorsque `Allow from env=!var-env` est spécifié, la requête est autorisée à accéder si la variable d'environnement var-env n'existe pas. Le serveur fournit la possibilité de définir des variables d'environnement avec une grande souplesse en fonction des caractéristiques de la requête client à l'aide des directives fournies par le module `mod_setenvif`. On peut ainsi utiliser cette directive pour contrôler l'accès en fonction de certains en-têtes comme `User-Agent` (type de navigateur), `Referer`, etc...

### Exemple :

`SetEnvIf User-Agent ^KnockKnock/2\.0 laisse_moi_entrer
<Directory /docroot>
Order Deny,Allow
Deny from all
Allow from env=laisse_moi_entrer
</Directory>`

Dans cet exemple, les navigateurs dont la chaîne de description de l'en-tête user-agent commence par `KnockKnock/2.0` se verront accorder l'accès, alors que tous les autres se le verront refuser.

## Directive Deny

Description: | Détermine quels hôtes ont l'accès au serveur refusé
Syntaxe: | `Deny from all|hôte|env=[!]var-env [hôte|env=[!]var-env] ...`
Contexte: | répertoire, .htaccess
AllowOverride: | Limit
Statut: | Base
Module: | mod_authz_host

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 à ceux de la directive `Allow`..

## Directive Order

Description: | Détermine 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: | Base
Module: | mod_authz_host

La directive `Order`, utilisée avec les directives `Allow` et `Deny`, fournit un système de contrôle d'accès en trois passes. La première passe traite soit toutes les directives `Allow`, soit toutes les directives `Deny`, comme spécifié par la directive `Order`. La seconde passe traite le reste des directives (`Deny` ou `Allow`). La troisième passe s'applique à toutes les requêtes auxquelles aucune des deux premières passes ne s'appliquent.

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 convient est traitée. La dernière directive qui convient l'emporte sur les autres (à la différence là aussi d'un pare-feu classique). De plus, l'ordre dans lequel les lignes apparaissent dans les fichiers de configuration n'a aucune importance -- toutes les directives `Allow` sont traitées comme un groupe, toutes les directives `Deny` comme un autre, et le statut d'accès par défaut est indépendant.

Ordre peut être soit :

`Allow,Deny`
  Toutes les directives `Allow` sont évaluées en premier ; l'une d'elles au moins doit convenir, faute de quoi la requête sera rejetée. Vient ensuite le tour des directives `Deny`. Si l'une au moins convient, le requête est rejetée. Enfin, toute requête à laquelle ne convient aucune directive `Allow` ou `Deny` sera rejetée par défaut.
`Deny,Allow`
  Toutes les directives `Deny` sont évaluées en premier ; si l'une au moins convient, le requête est rejetée, sauf si une directive `Allow` convient aussi. Enfin, toute requête à laquelle ne convient aucune directive `Allow` ou `Deny` aura l'autorisation d'accès par défaut.
`Mutual-failure`
  Cet ordre est identique à l'ordre `Order Allow,Deny` qui le remplace.

Les mots-clés ne doivent être séparés que par des virgules ; aucun espace ne doit s'intercaler entre eux.

Directives qui conviennent | Résultat de Allow,Deny | Résultat de Deny,Allow
--- | --- | ---
Allow seulement convient | Requête autorisée | Requête autorisée
Deny seulement convient | Requête rejetée | Requête rejetée
Aucune directive ne convient | La seconde directive par défaut: Rejet | La seconde directive par défaut: Autorisation
Allow & Deny conviennent | La dernière directive qui convient prend le contrôle: Rejet | La dernière directive qui convient prend le contrôle: Autorisation

Dans l'exemple suivant, tous les hôtes du domaine apache.org ont l'autorisation d'accès ; tous les autres hôtes voient leur accès refusé.

`Order Deny,Allow
Deny from all
Allow from apache.org`

Dans l'exemple suivant, tous les hôtes du domaine apache.org ont l'autorisation d'accès, sauf les hôtes du sous-domaine foo.apache.org qui voient leur accès refusé. Tous les hôtes qui ne font pas partie du domaine apache.org voient leur accès refusé car le statut d'accès par défaut est défini à `Deny`.

`Order Allow,Deny
Allow from apache.org
Deny from foo.apache.org`

En revanche, si la directive `Order` du dernier exemple a pour valeur `Deny,Allow`, tous les hôtes auront l'autorisation d'accès. Ceci est dû au fait que l'on ne tient pas compte de l'ordre dans lequel apparaissent les directives dans le fichier de configuration, et que la directive `Allow from apache.org` est évaluée en dernier et l'emporte donc sur la directive `Deny from foo.apache.org`. Tous les hôtes qui ne font pas partie du domaine `apache.org` auront aussi l'autorisation d'accès, car le statut d'accès par défaut est défini à `Allow`.

Même en l'absence de directives `Allow` et `Deny` associées, la présence d'une directive `Order` peut affecter l'accès à une partie du serveur, à cause de son effet sur le statut d'accès par défaut. Par exemple,

`<Directory /www>
Order Allow,Deny
</Directory>`

interdira tout accès au répertoire `/www` car le statut d'accès par défaut est défini à `Deny`.

La directive `Order` ne contrôle l'ordre de traitement des directives d'accès qu'à l'intérieur de chaque phase du traitement de la configuration du serveur. Ceci implique, par exemple, qu'une directive `Allow` ou `Deny` apparaissant dans une section `<Location>` sera toujours évaluée après une directive `Allow` ou `Deny` apparaissant dans une section `<Directory>` ou un fichier `.htaccess`, sans tenir compte de la définition de la directive `Order`. Pour plus de détails sur la fusion des sections de configuration, voir la documentation Comment fonctionnent les sections Directory, Location et Files.

Langues Disponibles: en | fr | ja | ko

## Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.