Directories, Files e Locazioni
Accesso a Directories
Ogni directory coinvolta nelle operazioni del server deve avere uno schema di permessi di accesso.
Lo schema di accesso della directory principale, per esempio, è:
<Directory />
AllowOverride none
Require all denied
</Directory>
Dalla directory radice in giù:
Require all denied- a tutti è negato l'accessoAllowOverride none- non sono consentite deroghe
Lo schema di accesso alla directory è:
<Directory "/var/www/localhost/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ove:
Require all granted- a tutti è permesso l'accessoOptions Indexes FollowSymLinks- gli indici di directory sono abilitati, e i link simbolici vengono seguitiAllowOverride none- non sono consentite deroghe
Una directory più specifica vince su una directory più generica. I parametri di /var/www/localhost/htdocs vincono su quelli di /.
Lo schema di accesso alla directory ove vengono posti programmi invocabili con il Common Gateway Interface è:
<Directory "/var/www/localhost/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
Override
Singole directories possono contenere configurazioni di accesso specifiche, in estensione o sostituzione (Override) di quelle del file principale di configurazione. Il file principale deve però permetterlo, e dichiarare quali overrides sono concessi.
Tali overrides sono nel file .htaccess della directory configurata.
AllowOverride può contenere uno o più dei seguenti argomenti separati da spazio:
AuthConfig- configurazioni di autenticazioneFileInfo- informazioni sui fileIndexes- indici: ilGETdi una directory ritorna l'indice della directoryLimit- lista di metodi HTTP consentiti nella directoryOptions=opzioni- lista delle opzioni, separate da virgolaall- tuttonone- niente
Options
Le opzioni possibili sono:
Indexes- indici della directoryFollowSymLinks- seguire tutti i link simbolici (default in assenza di altri)SymLinksIfOwnerMatch- seguire un link solo se dello stesso utente del file riferitoIncludes- usare i Server Side Includes (SSI). Richiede il modulomod_includeIncludesNOEXEC- usare gli SSI eccettoexecExecCGI- eseguire programmi configurati col Common Gateway Interface (CGI). Richiede il modulomod_cgiMultiViews- negoziazione di contenuto. Richiede il modulomod_negotiationsAll- tutte le opzioni tranneMultiViews
Require
Direttiva che implementa le autorizzazioni di accesso ad una risorsa. Richiede i moduli mod_authz_core e mod_authz_host.
La sintassi è flessibile. Alcuni esempi sono:
Require all granted- permesso a tuttiRequire all denied- negato a tuttiRequire valid-user- permesso ad utenti che si sono autenticati con uno schema di accesso, definito precedentemente in configurazioneRequire host starshell.sh- qualsiasi compclientuter appartenente al dominioRequire not host gov- clients non appartenenti al dominioRequire ip 192.168.27- clients con indirizzo IP in una certa retaRequire not ip 192.168.27.11- clients non col determinati indirizzo IPRequire expr %{HTTP_USER_AGENT} != 'BadBot'- espressione che testa un campo header della richiesta
Limitazioni di accesso basate sugli header, indirizzi IP o nomi di dominio non sono sicure. La richiesta può essere contraffatta. L'intero pacchetto IP e payload può essere un forgery, costruito con tecniche e strumenti di packet crafting.
Apache possiede una ricca sintassi di espressioni, con variabili, operatori, costrutti di controllo.
Accesso a Files
Oltre che schemi di accesso per directories, vi sono quelli per protezione di files.
Per esempio:
<Files ".ht*">
Require all denied
</Files>
Impediscono che i file .htaccess e .htpasswd vengano visti dagli utenti.
Questi sono files usati nel limitare l'accesso a directories solo a utenti che si devono autenticare con username e password.
Il file .htaccess è posto nella directory che si protegge e contiene un override di settaggi di configurazione.
Il file .htpasswd può essere posto nella stessa directory, e contiene nomi utenti e le corrispondenti password in formato hash.
Di solito si preferisce porlo fuori da DocumentRoot, in tal modo proteggendolo da accessi automaticamente.