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: ilGET
di 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_include
IncludesNOEXEC
- usare gli SSI eccettoexec
ExecCGI
- eseguire programmi configurati col Common Gateway Interface (CGI). Richiede il modulomod_cgi
MultiViews
- negoziazione di contenuto. Richiede il modulomod_negotiations
All
- 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.