• cerca

SEI GIA' REGISTRATO? EFFETTUA ADESSO IL LOGIN.



HAI DIMENTICATO LA PASSWORD? CLICCA QUI

NON SEI ANCORA REGISTRATO A WEBAREA? CLICCA QUI E REGISTRATI !

Proteggiamo l’accesso ad una directory del nostro sito tramite Basic Authentication in Apache. I file .htpasswd .htaccess e la configurazione dei Virtual Host.

di :: 05 marzo 2018

basic authentication

Quando si configura un Web Server Apache, capita di dover limitare l'accesso a determinate sezioni di un sito web.

E' possibile ricorrere ad autenticazioni basate su login, con inserimento di username e password, tramite l'utilizzo di strumenti di programmazione come ad esempio PHP abbinato a MySql per verificare le credenziali di un utente. Questo sistema di autenticazione è utile, e forse l'unica strada percorribile, nel caso accesso ad una area riservata di un sito web con un numero elevato di utenti, che magari si registrano direttamente dalle pagine del sito web stesso.

Apache tuttavia, tramite apposite sue direttive, consente di proteggere particolari directory dall'accesso indesiderato ad utenti di sistema, cioè creati all'interno del nostro server linux con i noti comandi "adduser" o "useradd".

Per proteggere particoli directories si ricorre all'utilizzo dei file .htpasswd e .htaccess

In questo articolo come configurazione Apache per blindare l'accesso ad una determinata direcorty, in un sistema operativo Centos 7.

L'ambiente di lavoro che utilizzerò in questo articolo è il seguente:

  • Il sistema operativo utilizzato è Centos 7 (che per comodità abbiamo installato su una Virtual Box) a cui dovete avere accesso come utenti root e dovete aver accesso alla rete.
  • Apache è configurato, e il nostro sito è creato sotto la directory "/var/www/html/ilmiosito"
  • Il dominio del nostro sito è www.ilmiosito.it ed abbiamo configurato Apache con questo Virtual Host (ma vedremo anche come operare se non abbiamo un dominio)

Creiamo una directory da progettere nel nostro sito

Ipotizziamo che il nostro sito web sia localizzato sotto questa directory: "/var/www/html/miosito".

Spostiamoci in questa directory

# cd /var/www/html/miosito

In questo sito vogliamo creare un directory accessibile solo tramite autenticazione, ad esempio la directory "area_riservata".

Creiamo la directory da proteggere

# mkdir area_riservata

Accediamo alla directory creata

# cd area_riservata

Al suo interno creiamo un file chiamato "index.html" (che sappiamo essere il file che di default viene visualizzato quando apriamo da browser un sito o una sua cartella senza indicare uno specifico file), e al suo interno scriviamo un testo qualunque

// creo il file index
# touch index.html
// assegnamo il file all'utente e al gruppo Apache
# chown apache.apache index.html
// scrivo al suo interno la frase "benvenuto in questa area riservata"
echo "benvenuto in questa area riservata > index.html

Verifichiamo che la pagina si apra correttamente da browser web digitandone la url completa "http://192.168.1.10/miosito/area_riservata" (oppure http://192.168.1.10/miosito/area_riservata/index.html").

In questo momento questa directory è accessibile liberamente, e la index.html visibile da tutti.

Vogliamo che alla index.html e in generale a tutto quello che c'è all'interno di questa directory "area_riservata" (quindi anche altri files o altre sotto directory in essa presenti) non si possa accedere liberamente, ma che ci si debba autenticare con l'inserimento username e password. Ricorriamo ad una autenticazione fornita da Apache, tramite l'utilizzo di file ".htpasswd" e ".htaccess"

Creiamo un utente di sistema

Come accennato, possiamo utilizzare l'autenticazione di Apache su utenti di sistema, cioè creati all'interno del nostro server linux con i noti comandi "adduser" o "useradd".

Vediamo rapidamente, perchè la creazione di un utente non è oggetto di questo articolo, come creare un utente di nome "pippo" usando il comando "adduser"

# adduser pippo

Fatto!

Creiamo la password di autenticazione

Adesso che abbiamo l'utente "pippo", vediamo come blindare la cartella "area_riservata" al solo utente "pippo".

Utilizziamo il comando "htpasswd" fornito da Apache per creare un file contentente la password, criptata, necessaria per accedere alla directory "area_riservata".

Il file della password, che dovrà chiamarsi ".htpasswd" con il punto davanti, può essere creato ovunque sul tuo disco rigido del server.

Possiamo creare una directory, ad esempio, "/etc/htpasswd" e mettere dentro il file, oppure possiamo salvarlo direttamente all'interno della directory che vogliamo proteggere "/var/www/html/ilmiosito/area_riservata". Dove voi tu.

Nel nostro esempio, per semplicità, lo localizziamo direttamente nella directory che vogliamo proteggere.

Il comando "htpasswd" va seguito da "-c" e dal path al file che stiamo creato, e infine dall'utente "pippo" da abbinare a questo file, cioè che potrà accedere alla directory riservata

# htpasswd -c /var/www/html/miosito/area_riservata/.htpasswd pippo

Verrà chiesto l'inserimento di una password, e di ripeterne poi l'inserimento

New password:
Re-type new password:
Adding password for user pippo

Il file ".htpasswd" è stato creato. 

Attenzione: utilizziamo il flag "-c" solo quando dobbiamo creare il file. Se dovessimo consentire ad altri utenti di accedere alla area_riservata, dovrò ripetere la stessa procedura SENZA usare "-c"

# htpasswd /var/www/html/miosito/area_riservata/.htpasswd pluto

Spostatevi nella directory "area_riservata"

cd /var/www/html/miosito/area_riservata

e verifichiamo con il comando "ls" cosa c'è al suo interno e vedremo che ...

# ls -l
-rw-r---r-- 1 apache apache 0 5 mar 09.14 index.html

.. ma dov'è il file appena creato? C'è. c'è!! E' solo nascosto da occhi indiscreti. Tutti i file precedenti dal punto, come il nostro ".htpasswd" sono file nascosti.

Per vedere i file nascosti usate l'opzione "a"

# ls -la
-rw-r---r-- 1 root   root   44 5 mar 09.16 .htpasswd
-rw-r---r-- 1 apache apache 0 5 mar 09.14 index.html

Abbiamo generato la password per consentire all'utente pippo, e pluto, di accedere alla area_riservata

Se vogliamo guardare come è stata salvata la password all'iterno del file creato, leggiamo il file usando il comando "cat"

# cat /var/www/html/miosito/area_riservata/.htpasswd
pippo:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
pluto:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Troveremo i nostri due utenti non le relative password criptate

Il nostro lavoro non è ancora finito, occorre ancora configurare Apache affinchè sappia che quella directory "area_riservata" va protetta con il file .htpasswd generato

Abbiamo due modi per operare: creando un file ".htaccess" oppure modificando la configurazione del Virtual Host in Apache associato al sito

Configurazione con VIrtual Host

Se hai accesso come utente root al server, questa via è preferibile.

Il vostro sito ha un dominio, e su Apache è configurato il relativo VirtualHost. Apri il file di configurazione del VirtualHost in Apache.

Questa configurazione può essere inserita al fondo del file di configurazione principale di Apache "/etc/httpd/conf/httpd.conf" ma è preferibile nel file dedicato "/etc/httpd/conf/conf.d/vhost.conf"

Per il tuo sito avrai, ad esempio, questa configurazione

<VirtualHost *:80>
     ServerName www.ilmiosito.it
     ServerAlias ilmiosito.it ilmiosito.com www.ilmiosito.com www.pippo.it pippo.it 
     DocumentRoot /var/www/html/miosito
     ErrorLog logs/ilmiosito_error_log
     CustomLog logs/ilmiosito_access_log
</VirtualHost>

Al suo interno occorre definire la directory da proteggere, in questo modo

<VirtualHost *:80>
     ServerName www.ilmiosito.it
     ServerAlias ilmiosito.it ilmiosito.com www.ilmiosito.com www.pippo.it pippo.it 
     DocumentRoot /var/www/html/miosito
     ErrorLog logs/ilmiosito_error_log
     CustomLog logs/ilmiosito_access_log

    <Directory "/var/www/html/miosito/area_riservata">
        AuthType Basic
        AuthName "Accesso ad area riservata"
        AuthUserFile /var/var/www/html/miosito/area_riservata/.htpasswd
        Require valid-user pippo,pluto
    </Directory>

</VirtualHost>

Vediamo nel dettagio cosa abbiamo aggiunto alla configurazione del Virtual Host

  • <Directory>: contiene il path alla cartella che stiamo proteggendo: "/var/www/html/miosito/area_riservata". Tra la sua apertura e chiusura indichiamo quanto segue.

  • AuthType: indica il tipo di autenticazione da utilizzare. Esistono infatti vari di di autenticazione. Noi utilizziamo l'autenticazione di tipo "Basic"

  • AuthName: qui indichiamo la frase che apparirà quando tenteremo di accedere, senza essere ancora autenticati, all'area riservata. Potete indicare quello che volete.

  • AuthUserFile: qui indichiamo dove è localizzato il file contenente la password dell'utente autorizzato (o degli utenti) ad accedere all'area riservata. Nel nostro caso "/var/var/www/html/miosito/area_riservata/.htpasswd"

  • Require: con il valore "valid-user" diciamo ad Apache quali sono gli utenti che possono accedere all'area riservata, nel nostro caso pippo e pluto. E' anche possibile indicare solo "Require valid-user" senza i nomi degli utenti, tanto sono già indicati nel file .htpasswd

La configurazione è completata, dobbiamo riavviare o ricaricare le configurazioni di Apache

# service httpd reload

Adesso proviamo ad accedere all'area riservata con il nostro browser web digitando la sua url "http://www.ilmiosito.it/area_riservata"

Come vediamo apparirà un prompt con la frase indicata nel file di configurazione del VirtualHost, e la richiesta di user e password. Se inserite correttamente avrete accesso all'area riservata.

Configurazione senza Virtual Host

Se state testando il vostro sito senza un dominio ma semplicemente in lan usando l'ip locale, quindi tramite la url "http://192.168.1.10/miosito/area_riservata".

In questo caso, l'istruzione <Directory> dovete inserirla direttamente nel file di configrazione di Apache e non nel blocco VirtualHost

<Directory "/var/www/html/miosito/area_riservata">
AuthType Basic
AuthName "Accesso ad area riservata"
AuthUserFile /var/var/www/html/miosito/area_riservata/.htpasswd
Require valid-user
</Directory>

Creazione di un file .htaccess

In alternativa alla procedura, quindi senza inserire quella direttiva nel file di configurazione di Apache, possiamo ottenere lo stesso risultato attraverso la creazione un file ".htaccess".

Questo file va inserito nella directory da proteggere: Apache, all'apertura della directory, leggerà il suo contenuto e saprà che quella directory è protetta.

Il contenuto del file ".htaccess" è identico al contenuto dell'istruzione <Directory> e cioè

AuthType Basic
AuthName "Accesso ad area riservata"
AuthUserFile /var/var/www/html/miosito/area_riservata/.htpasswd
Require valid-user

L'unica avvertenza è che in Apache l'istruzione <Directory> presente nella sua configurazione, e relativa al sito che stiamo esaminando, o se presente all'interno del suo specifico VirtualHost, sia indicato "AllowOverride All" al posto di "AllowOverride None".

<Directory "/var/www/html/miosito">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Se  "AllowOverride" fosse settata su None, tutti i files .htaccess sotto la directory in questione saranno ignorati e quindi la directory sarà accessibile liberamente.

Se avete modificato questa configurazione riavviate Apache altrimenti aprite direttamente la pagina web da browser.

Sicurezza dei file .htaccess e .htpasswd

Questi due file, come abbiamo capito, sono molto delicati e non devono essere accessibili via browser ma solo da Apache.

Scorrendo il file di configurazione di Apache troviamo una direttiva che serve proprio a proteggere l'apertura dei file che iniziano con ".ht"

<Files ".ht*">
Require all denied
</Files>

Con questa istruzione nessuno potrà aprire questi file da browser web.

Siti web in hosting

Se il vostro sito è localizzato in uno spazio web in hosting, non avete accesso come utenti root al server, tuttavia i provider normalmente forniscono un pannello di controllo del vostro sito web, e tra i vari strumenti che vi mettono a disposizione vi è anche la creazione di aree riservata. In questo caso tutta la procedura indicata in precedenza risulterà semplificata: vi verrà chiesta la directory da proteggere e la password da utilizzare per blindare la directory. Pochi istanti e il pannello di controllo vi creerà i file .htaccess e .htpasswd all'interno della directory da proteggere.

Potrebbe interessarti

x

ATTENZIONE