====== Proteggere directory in Apache2 ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//10/09/2009//** \\ \\ [[http://www.apache.org/|Apache]] puo' rendere visibili ed elencabili i file di una determinata directory tramite il browser ed una opportuna autenticazione.Il che puo' essere utile quando si vuole permettere ad alcuni utenti di scaricare file attraverso internet. \\ Passeremo adesso alla configurazione di apache per quanto riguarda la condivisione della directory, ma affronteremo la questione in due modi. Il primo modo di risolvere la questione e' quello di creare un **virtualhost** ed il secondo invece quello di permettere l'override in modo tale che anche un non-amministratore possa configurare a piacimento alcune direttive su una determinata directory mediante l'utilizzo dei file **.htaccess** . [[http://www.apache.org/|Apache]] se correttamente configurato, permette agli utenti che hanno accesso al server di "sovrascrivere" alcune direttive di configurazione generali per porzioni di sito. In pratica l'amministratore, root per esempio, puo' decidere di far amministrare una parte del sito ad un altro utente, con un altro file di configurazione che in pratica aggiunge altre direttive a quelle gia' attive della configurazione generale. Questa procedura e' nota come **Override** e viene realizzata creando un file di nome **.htaccess** nella sottodirectory che diamo in gestione. \\ La procedura per l'abilitazione dell'override viene effettuata da root direttamente sul file di configurazione di apache. \\ ===== Primo metodo - creare un virtualhost ===== Tramite questa procedura e' possibile creare un "sito virtuale" configurato secondo le nostre esigenze. Ovvero un sito che mostri il contenuto di una directory dopo aver chiesto un'autenticazione. \\ In questo esempio metteremo in ascolto Apache sulla porta 8080 quindi aggiungiamo al file **/etc/apache2/ports.conf** la riga : Listen 8080 Se vogliamo che apache rimanga in ascolto sulla porta di default (80) non e' necessario modificare ''port.conf'' . Possiamo aggiungere le seguenti direttive al file di configurazione di default di apache (su debian/ubuntu) **/etc/apache2/sites-enabled/000-default** : #Per la condivisione file via web #Apache resta in ascolto sulla porta 8080 ServerAdmin webmaster@localhost DocumentRoot /var/www AllowOverride None Order deny,allow deny from all #alias che permette di raggiungere la directory aggiungendo alla url "/deposito-web" Alias /deposito-web "/home/utente/deposito-web/" #Autenticazione (in basso per uteriori spiegazioni) AuthName "web" AuthType Basic AuthUserFile /etc/apache2/utenti-web require valid-user #La directory potra mostrare i file(Indexes) e seguire i link (FollowSymLinks) Options Indexes FollowSymLinks MultiViews #Non permettiamo agli utenti di utilizzare i file .htaccess per configurare le directory AllowOverride None Order allow,deny allow from all ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined * **AuthName "web" ** e' l'etichetta della finestra di login; * **AuthType Basic** e' il tipo di autenticazione (al momento esiste solo questo tipo); * **AuthUserFile /etc/apache2/utenti-web** indica il file di testo contenente gli utenti e le password (vedremo in eguito); * **require valid-user** indica che solo gli utenti validi potranno accedere al sito; ===== Secondo metodo - predisposizione dell' Override ===== Immaginiamo di voler far accedere via web il pubblico ad una certa directory ,per esempio ''/var/www/web'', e quindi di richiedere utente/password per l'autenticazione. Dobbiamo aggiungere al file di configurazione di Apache (su Debian **/etc/apache2/sites-enabled/000-default ** oppure **/etc/apache2/apache2.conf**) la seguente sezione: ... AllowOverride All ... Come si puo' notare stiamo consentendo l'override completo sulla directory ''/var/www/web'' , in pratica con questa direttiva il file .htaccess sara' ingrado di specificare quasi qualsiasi opzione per la suddetta directory e ricorsivamente su tutte le altre. Se si vuole abilitare l'override solo per alcune direttive si deve cambiare ''AllowOverride All'' con ''AllowOverride '' . Per l'elenco delle direttive e' utile dare uno sguardo ad un manuale di apache (come [[http://httpd.apache.org/docs/|Apache HTTP Server Documentation]]) . ==== Il file .htaccess per la protezione della directory==== Ecco il file .htaccess che specifica i parametri per la protezione della nostra directory. AuthName "web" AuthType Basic AuthUserFile /etc/apache2/utenti-web require valid-user Il file deve essere posto nella stessa directory da proteggere. \\ * **AuthName "web" ** e' l'etichetta della finestra di login; * **AuthType Basic** e' il tipo di autenticazione (al momento esiste solo questo tipo); * **AuthUserFile /etc/apache2/utenti-web** indica il file di testo contenente gli utenti e le password (vedremo in eguito); * **require valid-user** indica che solo gli utenti validi potranno accedere al sito; ===== Come creare il file di testo contenente gli utenti e le password ===== Ci avvarremo dell'utility da riga di comando ,fornita con apache, **htpasswd** . Immaginiamo di dovere aggiungere l'utente pippo, ecco il comando: htpasswd -c /etc/apache2/utenti-web pippo La password verra chiesta, in maniera interattiva . \\ Qualora il file non esiste lo crea, qualora il file delle password esiste lo tronca e lo ricrea con il solo utente pippo. Per aggiungere altri utenti รจ sufficiente il commando htpasswd senza il parametro -c htpasswd /etc/apache2/utenti-web pippo \\ \\ Adesso e' sufficiente riavviare apache con ''apachectl restart '' per vedere i risultati. Ogni volta che si apportano modifiche al solo file .htaccess non e' necessario riavviare apache.