back to top

Apache: gestione dinamica e metodi di controllo

Come abbiamo avuto modo di osservare, Apache risponde a decine di direttive che stabiliscono i diversi comportamenti del Web server. Dato che sarebbe abbastanza scomodo dove indicare una particolare direttiva e modificare il file di configurazione ogni volta che si presentano determinate fattispecie, caso che per esempio si verifica per l’introduzione di un nuovo “modulo”, httpd.conf possiede alcune istruzioni grazie alle quali è in grado di gestire dinamicamente diverse situazioni a seconda dei casi e delle necessità.

Riguardiamo un esempio già visto in precedenza:

<IfModule mod_setenvif.c>
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" 
nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
rowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
</IfModule>
Grazie al “mod_setenvif.c” è possibile stabilire le differenti risposte da inviare alle richieste che possono provenire da specifiche tipologie di browser.

Alla base di tutto abbiamo il costrutto di controllo IfModule che permette di dar luogo alle istruzioni indicate nella direttiva sole se (if) il “modulo” è presente ed abilitato; in caso contrario non avremo la necessità di intervenire su httpd.conf in quanto questa possibilità è già prevista da IfModule.

Oltre ad IfModule, abbiamo IfDefine che per quanto riguarda la sua funzione non si differenzia molto dal primo ma entra in gioco soltanto in casi specifici come per esempio test del Web server e debugging; quando il sistema è in queste fasi, IfDefine consente l’esecuzione di determinate direttive che ne rendono più semplice l’esecuzione. Se IfModule e IfDefine gestiscono risorse interne, Include permette di richiamare file di configurazione esterni alla DocumentRoot anche se questi sono indicati all’interno di direttive che richiamano risorse ad essa interne; in Linux per esempio abbiamo:

Include /etc/httpd/conf.d
un istruzione che richiama all’interno di una direttiva le risorse relative al percorso specificato.

Per quanto riguarda i metodi di controllo, Apache viene regolato in particolare da due istruzioni chiamate Options e Overrides.

La prima direttiva, Options, configura i rapporti tra il Web server e il sistema in cui esso è installato. Avremo quindi nove reazioni diverse (opzioni) di Apache a seconda degli stimoli provenienti dal File System:

  1. All: è una “Global Option”, ciò vuol dire che viene settata di default; essa ha la funzione di abilitare l’esecuzione delle funzionalità a cui è riferita.
  2. None: è anch’essa una “Global Option”, disabilita l’esecuzione delle funzionalità a cui è riferita; può comunque essere modificata accertandosi prima che gli interventi da effettuare non pregiudichino la sicurezza del sistema.
  3. FollowSymLinks: abilita i percorsi indicati dai “link simbolici” che richiamano PATH realmente esistenti nel server.
  4. SymLinksIfOwnerMatch: svolge la stessa funzione di FollowSymLinks ma solo se il proprietario coincide
  5. Includes: rende possibile l’esecuzione di scripts lato server.
  6. IncludesNOEXEC: svolge la stessa funzione di Includes ma impedisce l’esecuzione di comandi locali.
  7. MultiViews: permette la “Content Negotiation”; contrariamente a quanto viene spesso detto riguardo a MultiViews, essa non elimina le estensioni dei file, più semplicemente crea molteplici rappresentazioni di una stessa risorsa web, si pensi per esempio ai siti internet “multilingua”. Soltanto nel caso di MultiViews le “Global Option” All e None non sono settate di default.
  8. Indexes: nel caso in cui non esista una pagina “index” (pagina d'”ingresso” del sito internet), permetterà di visualizzare l’elenco delle risorse interne alla directory indicata.
  9. ExecCGI: permette l’esecuzione dei CGI ed è necessaria per qualsiasi eseguibile.
Per quanto riguarda Overrides, dobbiamo sottolineare la funzione svolta dalla direttiva AllowOverride con la quale si definiscono le funzionalità che non verranno abilitate o limitate dai noti file “.htaccess”; questi ultimi sono dei file che opzionalmente possono essere usati per definire delle configurazioni specifiche riferite alle directory in cui vengono creati. Nel caso di AllowOverride, abbiano a disposizione sette opzioni per la configurazione:
  1. All: autorizza il non rispetto delle direttive.
  2. None: impedisce il non rispetto delle direttive.
  3. AuthConfig: consente l’impiego di direttive di autorizzazione.
  4. FileInfo: consente l’impiego di direttive per il controllo delle tipologie di documenti.
  5. Indexes: consente l’impiego di direttive per il controllo della visualizzazione dell’elenco delle directory.
  6. Limit: consente l’impiego di direttive per il controllo degli accessi.
  7. Options: consente l’impiego della direttiva Options
Per chiarire le idee proponiamo un piccolo esempio:
<Directory /PATH/html>
Options Indexes
AllowOverride All
</Directory>
Come è facile osservare, il codice appena proposto rende possibile visualizzare l’elenco dei contenuti interni alla DocumentRoot, ed è inoltre consentito ignorare le direttive espresse tramite un file “.htaccess”.

In ogni caso, per questioni di sicurezza o di ottimizzazione del sistema sarà sempre possibile disabilitare gli “.htaccess” tramite il metodo AllowOverride utilizzando un semplice script da inserire in httpd.conf:

<Directory /> 
AllowOverride None 
</Directory>
questo script avrà efficacia per tutte le directory a parte quelle in cui saremo noi ad autorizzare l’Override.

Pubblicitร 
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.