- Introduzione
- Prequisiti
- Installare il pacchetto di utilità di Apache
- Creare il file password
- Configura l’autenticazione della password di Apache
- Configurare il controllo dell’accesso all’interno della definizione dell’host virtuale
- Configurare il controllo degli accessi con i file .htaccess
- Conferma la password di autenticazione
- Conclusione
Introduzione
Quando si imposta un server web, ci sono spesso sezioni del sito a cui si desidera limitare l’accesso. Le applicazioni web spesso forniscono i propri metodi di autenticazione e autorizzazione, ma il server web stesso può essere usato per limitare l’accesso se questi sono inadeguati o non disponibili.
In questa guida, dimostreremo come proteggere con password le risorse su un server web Apache in esecuzione su Ubuntu 14.04.
Prequisiti
Per iniziare, avrete bisogno di accedere a un ambiente server Ubuntu 14.04. Avrete bisogno di un utente non root con privilegi sudo
per eseguire compiti amministrativi. Per sapere come creare un tale utente, seguite la nostra guida alla configurazione iniziale del server di Ubuntu 14.04.
Installare il pacchetto di utilità di Apache
Per creare il file che memorizzerà le password necessarie per accedere ai nostri contenuti riservati, useremo un’utilità chiamata htpasswd
. Questa si trova nel pacchetto apache2-utils
nei repository di Ubuntu.
Aggiornare la cache locale dei pacchetti e installare il pacchetto digitando questo comando. Ne approfitteremo per prendere anche il server Apache2 nel caso non sia ancora installato sul server:
- sudo apt-get update
- sudo apt-get install apache2 apache2-utils
Creare il file password
Ora abbiamo accesso al comando htpasswd
. Possiamo usarlo per creare un file di password che Apache può usare per autenticare gli utenti. Creeremo un file nascosto per questo scopo chiamato .htpasswd
all’interno della nostra directory di configurazione /etc/apache2
.
La prima volta che usiamo questa utility, dobbiamo aggiungere l’opzione -c
per creare il file specificato. Specifichiamo un nome utente (sammy
in questo esempio) alla fine del comando per creare una nuova voce nel file:
- sudo htpasswd -c /etc/apache2/.htpasswd sammy
Vi verrà chiesto di fornire e confermare una password per l’utente.
Tralascia l’argomento -c
per qualsiasi altro utente che desideri aggiungere:
- sudo htpasswd /etc/apache2/.htpasswd another_user
Se visualizziamo il contenuto del file, possiamo vedere il nome utente e la password criptata per ogni record:
- cat /etc/apache2/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.
Configura l’autenticazione della password di Apache
Ora che abbiamo un file con i nostri utenti e password in un formato che Apache può leggere, dobbiamo configurare Apache per controllare questo file prima di servire il nostro contenuto protetto. Possiamo farlo in due modi diversi.
La prima opzione è quella di modificare la configurazione di Apache e aggiungere la nostra protezione con password al file host virtuale. Questo darà generalmente migliori prestazioni perché evita la spesa di leggere i file di configurazione distribuiti. Se hai questa opzione, questo metodo è raccomandato.
Se non hai la possibilità di modificare il file host virtuale (o se stai già usando i file .htaccess files for other purposes), you can restrict access using an
.htaccessfile. Apache uses
.htaccess` per permettere di impostare certi elementi di configurazione in un file in una directory di contenuto. Lo svantaggio è che Apache deve rileggere questi file ad ogni richiesta che coinvolge la directory, il che può avere un impatto sulle prestazioni.
Scegliete l’opzione che meglio si adatta alle vostre esigenze di seguito.
Configurare il controllo dell’accesso all’interno della definizione dell’host virtuale
Partite aprendo il file dell’host virtuale a cui volete aggiungere una restrizione. Per il nostro esempio, useremo il file 000-default.conf
che contiene l’host virtuale predefinito installato attraverso il pacchetto apache di Ubuntu:
- sudo nano /etc/apache2/sites-enabled/000-default.conf
All’interno, con i commenti rimossi, il file dovrebbe essere simile a questo:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>
L’autenticazione è fatta su una base per directory. Per impostare l’autenticazione, è necessario indirizzare la directory che si desidera limitare con un blocco <Directory ___>
. Nel nostro esempio, limiteremo l’intera radice del documento, ma puoi modificare questo elenco per indirizzare solo una specifica directory all’interno dello spazio web:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/var/www/html"> </Directory></VirtualHost>
In questo blocco di directory, specifica che vogliamo impostare l’autenticazione Basic
. Per il AuthName
, scegliete un nome di realm che verrà mostrato all’utente quando verranno richieste le credenziali. Usate la direttiva AuthUserFile
per puntare Apache al file delle password che abbiamo creato. Infine, richiederemo un valid-user
per accedere a questa risorsa, il che significa che chiunque possa verificare la propria identità con una password potrà entrare:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory "/var/www/html"> AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require valid-user </Directory></VirtualHost>
Salva e chiudi il file quando hai finito. Riavvia Apache per implementare la tua politica sulle password:
- sudo service apache2 restart
La directory che hai specificato dovrebbe ora essere protetta da password.
Configurare il controllo degli accessi con i file .htaccess
Se invece vuoi impostare la protezione delle password usando i file .htaccess
, dovresti iniziare modificando il file di configurazione principale di Apache per permettere i file .htaccess
:
- sudo nano /etc/apache2/apache2.conf
Trova il blocco <Directory>
per la directory /var/www
che contiene la root del documento. Attiva l’elaborazione di .htaccess
cambiando la direttiva AllowOverride
all’interno di quel blocco da “None” a “All”:
. . .<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted</Directory>. . .
Salva e chiudi il file quando hai finito.
In seguito, dobbiamo aggiungere un file .htaccess
alla directory che vogliamo limitare. Nella nostra dimostrazione, limiteremo l’intera radice del documento (l’intero sito web) che si trova a /var/www/html
, ma puoi mettere questo file in qualsiasi directory a cui desideri limitare l’accesso:
- sudo nano /var/www/html/.htaccess
In questo file, specifica che vogliamo impostare l’autenticazione Basic
. Per il AuthName
, scegliete un nome di realm che verrà mostrato all’utente quando verranno richieste le credenziali. Usate la direttiva AuthUserFile
per puntare Apache al file delle password che abbiamo creato. Infine, richiederemo un valid-user
per accedere a questa risorsa, il che significa che chiunque possa verificare la propria identità con una password potrà entrare:
AuthType BasicAuthName "Restricted Content"AuthUserFile /etc/apache2/.htpasswdRequire valid-user
Salvare e chiudere il file. Riavvia il server web per proteggere con password tutto il contenuto nella o sotto la directory con il file .htaccess
:
- sudo service apache2 restart
Conferma la password di autenticazione
Per confermare che il tuo contenuto è protetto, prova ad accedere al tuo contenuto limitato in un browser web. Ti dovrebbe essere presentato un prompt di nome utente e password che assomiglia a questo:
Se inserisci le credenziali corrette, ti sarà permesso di accedere al contenuto. Se inserisci le credenziali sbagliate o premi “Annulla”, vedrai la pagina di errore “Non autorizzato”:
Conclusione
Ora dovresti avere tutto il necessario per impostare l’autenticazione di base del tuo sito. Tieni presente che la protezione della password dovrebbe essere combinata con la crittografia SSL in modo che le tue credenziali non siano inviate al server in chiaro. Per imparare a creare un certificato SSL autofirmato da usare con Apache, segui questa guida. Per sapere come installare un certificato commerciale, segui questa guida.