La directive Apache Directory est-elle censée être relative à DocumentRoot ou non?

14

La Directorydirective Apache est-elle censée être relative à DocumentRoot ou non? Je demande dans le contexte d'un VirtualHost, mais cela ne devrait faire aucune différence.

En d'autres termes, est-il censé être:

<VirtualHost>
    DocumentRoot /var/www
    <Directory /var/www>
    ...

ou

<VirtualHost>
    DocumentRoot /var/www
    <Directory />
    ...

Les deux fonctionnent. Les documents du répertoire Apache disent:

Répertoire-chemin est soit le chemin d'accès complet à un répertoire, soit une chaîne générique ...

... mais ils montrent ensuite deux exemples contredisant la déclaration "chemin complet".

ED: Il existe également des exemples contradictoires sur la page Apache Performance Tuning dans les sections FollowSymLinks et SymLinksIfOwnerMatch et AllowOverride .

Pour le plaisir, j'ai regardé la configuration par défaut de Vhost de Debian et j'ai trouvé ceci:

<VirtualHost *:80>
    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    ...
Jeff
la source

Réponses:

9

La documentation est correcte et la <Directory>directive doit être le chemin complet .

Votre premier exemple est de savoir comment configurer la directive pour VirtualHosts et appliquer les options de la directive uniquement à DocumentRoot. Votre deuxième exemple fait référence à la racine du système de fichiers (littéralement /).

Vous n'avez pas publié le reste de la directive, mais cela est généralement utilisé comme un moyen de tenter d'emprisonner Apache et de restreindre son accès, et est généralement (mais pas toujours) placé à l'intérieur des fichiers principaux apache2.confou de httpd.confconfiguration, vos VirtualHosts autorisant explicitement accès pour leurs propres DocumentRootrépertoires, donc les deux sont souvent utilisés ensemble.

De la documentation Apache :

Notez que l'accès par défaut pour <Répertoire /> est d'autoriser tous les accès. Cela signifie que Apache httpd servira tout fichier mappé à partir d'une URL. Il est recommandé de changer cela avec un bloc tel que:
    <Répertoire />
      Exiger que tout soit refusé
    </Directory>
puis remplacez-le pour les répertoires que vous souhaitez accessibles. Consultez la page Conseils de sécurité pour plus de détails.
Craig Watson
la source
Si le deuxième exemple fait littéralement référence au système de fichiers /, pourquoi Apache sert-il le /var/wwwrépertoire?
Jeff
1
Apache servira le DocumentRoot. La Directorydirective est totalement distincte et a pour effet de dire "appliquer la configuration jointe à ce répertoire et à tous les sous-répertoires". Les configurations plus spécifiques sont prioritaires, donc elles <Directory /var/www/>seront prioritaires <Directory />.
Craig Watson
Je vois. Ainsi, à <Directory />partir d'un contexte VirtualHost peut remplacer les options à l'échelle du serveur (ou d'autres paramètres) de <Directory />? Ça a du sens. Merci pour l'aide.
Jeff