Serveur Apache HTTP Version 2.4

Apache > Serveur HTTP > Documentation > Version 2.4 > Modules

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

### Directives

### Traitement des bugs

- Journal des modifications de httpd
- Problèmes connus
- Signaler un bug

### Voir aussi

- `Require`
- `mod_authz_host`
- `mod_authz_core`

## 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, mais `fooexample.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 directive `HostnameLookups`. 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 directives `Deny` 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 directive `Allow` ou `Deny` 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 directive `Allow`. Toute requête qui ne correspond à aucune directive `Allow` ou `Deny` 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.

### Voir aussi

- `Allow`
- `Require`