La direttiva Directory di Apache dovrebbe essere relativa a DocumentRoot o no?


14

La Directorydirettiva Apache dovrebbe essere relativa a DocumentRoot o no? Chiedo nel contesto di un VirtualHost, ma non dovrebbe fare alcuna differenza.

In altre parole, dovrebbe essere:

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

o

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

Entrambi funzionano. I documenti di Apache Directory dicono:

Directory-path è il percorso completo di una directory o una stringa di caratteri jolly ...

... ma poi mostrano due esempi in contraddizione con l'affermazione "percorso completo".

ED: Esistono anche esempi contraddittori nella pagina Ottimizzazione delle prestazioni di Apache nelle sezioni FollowSymLinks e SymLinksIfOwnerMatch e AllowOverride .

Per divertimento ho guardato l'installazione del vhost predefinita di Debian e ho trovato questo:

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

Risposte:


9

La documentazione è corretta e la <Directory>direttiva dovrebbe essere il percorso completo .

Il primo esempio è come configurare la direttiva per VirtualHosts e applicare le opzioni all'interno della direttiva solo a DocumentRoot. Il tuo secondo esempio si riferisce alla radice del filesystem (letteralmente /).

Non hai pubblicato il resto della direttiva, ma questo è in genere utilizzato come modo per tentare di eseguire il jailing di Apache e limitarne l'accesso, e di solito (ma non sempre) viene inserito nei file principali apache2.confo di httpd.confconfigurazione, con VirtualHosts che consente esplicitamente accesso per le proprie DocumentRootdirectory, quindi i due sono spesso usati insieme.

Dalla documentazione di Apache :

Si noti che l'accesso predefinito per <Directory /> è consentire tutto l'accesso. Ciò significa che Apache httpd servirà qualsiasi file mappato da un URL. Si consiglia di modificarlo con un blocco come:
    <Directory />
      Richiedi tutto negato
    </ Directory>
e quindi sovrascriverlo per le directory che si desidera accedere. Consulta la pagina Suggerimenti per la sicurezza per maggiori dettagli.

Se il secondo esempio si riferisce letteralmente al filesystem /, allora perché Apache serve la /var/wwwdirectory?
Jeff,

1
Apache servirà il DocumentRoot. La Directorydirettiva è totalmente separata e ha l'effetto di dire "applica la configurazione allegata a questa directory e a tutte le sottodirectory". Configurazioni più specifiche hanno la priorità, quindi <Directory /var/www/>avranno la precedenza <Directory />.
Craig Watson,

Vedo. Quindi, <Directory />da un contesto VirtualHost, è possibile ignorare le Opzioni (o altre impostazioni) dell'intero server <Directory />? Ha senso. Grazie per l'aiuto.
Jeff,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.