3 votes

Problème de configuration d'Apache avec le <Directory> et le <Location>.

Je suis coincé avec un problème plutôt désagréable. J'ai ici un système de mise à disposition auquel seuls nos clients et notre société doivent avoir accès. Ceci est fait en utilisant la configuration suivante :

<Directory "/srv/www/example.com">
    AllowOverride All
    Options FollowSymlinks -Indexes
    Order deny,allow
    Allow from 127.0.0.0/8 1.2.3.4 5.6.7.8
    # our IP
    Allow from 4.3.2.1
    # PayPal IPN
    Allow from 216.113.191.33
#    Deny from all

    AuthType Basic
    AuthName "Restricted Files"
    AuthUserFile /srv/www/htdocs/.htpasswd
    Require valid-user
    Satisfy Any
</Directory>

Maintenant, je veux rendre une URL publique pour que tout le monde y ait accès. Comme il s'agit d'une URL, j'ai choisi l'option Location directive. J'ai donc essayé ce qui suit :

<Location /url/to/config.xml>
    Order allow,deny
    Allow from all
</Location>

Mais peu importe la combinaison que j'essaie d'obtenir. Order il ne fonctionne pas et le serveur demande toujours des informations d'identification. Est-ce que quelque chose m'échappe ? D'après ce que j'ai compris dans la documentation d'apache.org, la directive Location est analysée après Directory et devrait donc être capable de passer outre les limitations d'accès.

Une idée/un conseil ?

2voto

dialt0ne Points 3017

Vous devriez pouvoir le faire avec plusieurs blocs <Directory>. Voici un lien vers la documentation apache applicable :

http://httpd.apache.org/docs/2.2/sections.html

Je pense que les éléments clés de votre affaire sont :

Que faut-il utiliser ?

Le choix entre les conteneurs de système de fichiers et les conteneurs d'espace web est en fait assez facile. Lorsque vous appliquez des directives à des objets qui résident dans le système de fichiers, utilisez toujours <Directory> ou <Files>. Lorsque vous appliquez des directives à des objets qui ne résident pas dans le système de fichiers (comme une page web générée à partir d'une base de données), utilisez <Location>.

Il est important de ne jamais utiliser <Location> lorsqu'on essaie de restreindre l'accès à des objets du système de fichiers. En effet, de nombreux emplacements d'espace web (URL) différents pourraient correspondre au même emplacement du système de fichiers, ce qui permettrait de contourner vos restrictions.

Aussi http://httpd.apache.org/docs/2.2/sections.html#mergin - spécifiquement :

En dehors de <Directory>, chaque groupe est traité dans l'ordre où il apparaît dans les fichiers de configuration. <Directory> (groupe 1 ci-dessus) est traité dans l'ordre du composant de répertoire le plus court au plus long. Ainsi, par exemple, <Directory /var/web/dir> sera traité avant <Directory /var/web/dir/subdir>. Si plusieurs sections <Directory> s'appliquent au même répertoire, elles sont traitées dans l'ordre du fichier de configuration. Les configurations incluses via la directive Include seront traitées comme si elles se trouvaient à l'intérieur du fichier d'inclusion à l'emplacement de la directive Include.

Je pense que ça va marcher :

<Directory "/srv/www/example.com">
    AllowOverride All
    Options FollowSymlinks -Indexes
    Order deny,allow
    Allow from 127.0.0.0/8 1.2.3.4 5.6.7.8
    # our IP
    Allow from 4.3.2.1
    # PayPal IPN
    Allow from 216.113.191.33
#    Deny from all

    AuthType Basic
    AuthName "Restricted Files"
    AuthUserFile /srv/www/htdocs/.htpasswd
    Require valid-user
    Satisfy Any
</Directory>
<Directory "/srv/www/example.com/url/to/config.xml">
    Order allow,deny
    Allow from all
</Directory>

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X