Indice

Proteggere directory in Apache2

Autore: Fabio Di Matteo
Ultima revisione: 10/09/2009

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 .

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
<VirtualHost *:8080>
        ServerAdmin webmaster@localhost
 
        DocumentRoot /var/www
        <Directory /var/www/>
                AllowOverride None
                Order deny,allow
                deny from all
        </Directory>
 
        #alias che permette di raggiungere la directory aggiungendo alla url "/deposito-web"
        Alias /deposito-web "/home/utente/deposito-web/"
 
        <Directory /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
        </Directory>
 
 
        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
 
</VirtualHost>

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:

...
<Directory "/var/www/web">
        AllowOverride All
</Directory>
...

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 <direttiva> . Per l'elenco delle direttive e' utile dare uno sguardo ad un manuale di apache (come 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.

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.