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'accesso
  • AllowOverride 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'accesso
  • Options Indexes FollowSymLinks - gli indici di directory sono abilitati, e i link simbolici vengono seguiti
  • AllowOverride 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 autenticazione
  • FileInfo - informazioni sui file
  • Indexes - indici: il GET di una directory ritorna l'indice della directory
  • Limit - lista di metodi HTTP consentiti nella directory
  • Options=opzioni - lista delle opzioni, separate da virgola
  • all - tutto
  • none - niente

Options

Le opzioni possibili sono:

  • Indexes - indici della directory
  • FollowSymLinks - seguire tutti i link simbolici (default in assenza di altri)
  • SymLinksIfOwnerMatch - seguire un link solo se dello stesso utente del file riferito
  • Includes - usare i Server Side Includes (SSI). Richiede il modulo mod_include
  • IncludesNOEXEC - usare gli SSI eccetto exec
  • ExecCGI - eseguire programmi configurati col Common Gateway Interface (CGI). Richiede il modulo mod_cgi
  • MultiViews - negoziazione di contenuto. Richiede il modulo mod_negotiations
  • All - tutte le opzioni tranne MultiViews

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 tutti
  • Require all denied - negato a tutti
  • Require valid-user - permesso ad utenti che si sono autenticati con uno schema di accesso, definito precedentemente in configurazione
  • Require host starshell.sh - qualsiasi compclientuter appartenente al dominio
  • Require not host gov - clients non appartenenti al dominio
  • Require ip 192.168.27 - clients con indirizzo IP in una certa reta
  • Require not ip 192.168.27.11 - clients non col determinati indirizzo IP
  • Require 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.