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.
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>
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) .
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.
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.