¿Se supone que la directiva Apache Directory es relativa a DocumentRoot o no?


14

¿Se Directorysupone que la directiva Apache es relativa a DocumentRoot o no? Pregunto en el contexto de un VirtualHost, pero no debería hacer ninguna diferencia.

En otras palabras, se supone que es:

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

o

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

Ambos trabajan. Los documentos del directorio de Apache dicen:

Directory-path es la ruta completa a un directorio o una cadena comodín ...

... pero luego muestran dos ejemplos que contradicen la declaración de "camino completo".

ED: También hay ejemplos contradictorios en la página de ajuste de rendimiento de Apache en las secciones FollowSymLinks y SymLinksIfOwnerMatch y AllowOverride .

Por diversión, miré la configuración de vhost predeterminada de Debian y encontré esto:

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

Respuestas:


9

La documentación es correcta y la <Directory>directiva debe ser la ruta completa .

Su primer ejemplo es cómo debe configurar la directiva para VirtualHosts, y aplica las opciones dentro de la directiva solo a la DocumentRoot. Su segundo ejemplo se refiere a la raíz del sistema de archivos (literalmente /).

No ha publicado el resto de la directiva, pero esto generalmente se usa como una forma de intentar encarcelar a Apache y restringir su acceso, y generalmente (pero no siempre) se coloca dentro de los archivos principales apache2.confo de httpd.confconfiguración, con sus VirtualHosts permitiendo explícitamente acceso para sus propios DocumentRootdirectorios, por lo que los dos a menudo se usan juntos.

De la documentación de Apache :

Tenga en cuenta que el acceso predeterminado para <Directorio /> es permitir todo acceso. Esto significa que Apache httpd servirá cualquier archivo asignado desde una URL. Se recomienda que cambie esto con un bloque como:
    <Directorio />
      Requerir todo denegado
    </Directory>
y luego anule esto para los directorios a los que desea acceder. Vea la página de Consejos de seguridad para más detalles.

Si el segundo ejemplo se refiere literalmente al sistema de archivos /, ¿por qué Apache sirve el /var/wwwdirectorio?
Jeff

1
Apache servirá el DocumentRoot. La Directorydirectiva está totalmente separada y tiene el efecto de decir "aplicar la configuración adjunta a este directorio y a todos los subdirectorios". Más configuraciones específicas tienen prioridad, por lo <Directory /var/www/>anulará <Directory />.
Craig Watson

Veo. Entonces, <Directory />desde un contexto VirtualHost, puede anular las opciones de todo el servidor (u otras configuraciones) de <Directory />? Eso tiene sentido. Gracias por la ayuda.
Jeff
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.