Czy dyrektywa Apache Directory ma być względna w stosunku do DocumentRoot, czy nie?

14

Czy Directorydyrektywa Apache ma być względna w stosunku do DocumentRoot, czy nie? Pytam w kontekście VirtualHost, ale to nie powinno mieć znaczenia.

Innymi słowy, czy powinno to być:

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

lub

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

Oba działają. The Apache katalog docs powiedzieć:

Ścieżka do katalogu to pełna ścieżka do katalogu lub ciąg znaków wieloznacznych ...

... ale potem pokazują dwa przykłady zaprzeczające stwierdzeniu „pełnej ścieżki”.

ED: Istnieją również sprzeczne przykłady na stronie dostrajania wydajności Apache w sekcjach FollowSymLinks i SymLinksIfOwnerMatch i AllowOverride .

Dla zabawy spojrzałem na domyślną konfigurację vhost Debiana i znalazłem to:

<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
źródło

Odpowiedzi:

9

Dokumentacja jest poprawna, a <Directory>dyrektywa powinna być pełną ścieżką.

Pierwszym przykładem jest konfiguracja dyrektywy dla VirtualHosts i zastosowanie opcji w dyrektywie tylko do DocumentRoot. Drugi przykład odnosi się do katalogu głównego systemu plików (dosłownie /).

Pozostała część dyrektywy nie została opublikowana, ale jest to zwykle używane jako próba uwięzienia Apache i ograniczenia jego dostępu, i zwykle (ale nie zawsze) jest umieszczane w plikach głównych apache2.conflub httpd.confkonfiguracyjnych, a VirtualHosts wyraźnie zezwalają dostęp do własnych DocumentRootkatalogów, więc oba są często używane razem.

Z dokumentacji Apache :

Zauważ, że domyślny dostęp dla <Directory /> to zezwala na cały dostęp. Oznacza to, że httpd Apache będzie obsługiwał każdy plik zmapowany z adresu URL. Zaleca się zmienić to za pomocą bloku takiego jak:
    <Katalog />
      Wymagaj wszystkich odrzuconych
    </Directory>
a następnie zastąp to w przypadku katalogów, które mają być dostępne. Aby uzyskać więcej informacji, zobacz stronę Wskazówki dotyczące bezpieczeństwa .
Craig Watson
źródło
Jeśli drugi przykład dosłownie odnosi się do systemu plików /, to dlaczego Apache obsługuje /var/wwwkatalog?
Jeff
1
Apache będzie służyć DocumentRoot. DirectoryDyrektywa jest całkowicie odrębny i ma wpływ mówiąc „zastosować konfigurację załączonego do tego katalogu i wszystkich podkatalogach”. Bardziej szczegółowe konfiguracje mają pierwszeństwo, więc <Directory /var/www/>zostaną zastąpione <Directory />.
Craig Watson,
Widzę. Zatem <Directory />w kontekście VirtualHost można zastąpić opcje (lub inne ustawienia) dla całego serwera <Directory />? To ma sens. Dzięki za pomoc.
Jeff