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 sudoper 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
Output
sammy:$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:

/etc/apache2/sites-enabled/000-default.conf
<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:

/etc/apache2/sites-enabled/000-default.conf
<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:

/etc/apache2/sites-enabled/000-default.conf
<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”:

/etc/apache2/apache2.conf
. . .<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:

/var/www/html/.htaccess
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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.