Banner Shishii
Pagina aggiornata il:  22/01/2005 12:09

Pagina Stampabile     Pagina Stampabile

Proteggere Web directory e files con password


Una delle esigenze maggiormente sentite nella costruzione di siti web è quella di potere disporre di aree protette ed accessibili solo tramite password da parte di utenti autorizzati. Le possibilità sono più di una.

Lasciando da parte le risibili soluzioni basate su JavaScript, su cui non vale la pena di spendere byte, le possibilità più usate sono:

  1. Utilizzo di CGI che utilizzando algoritmi di criptazione condizionano l'accesso ad un file o ad una directory al possesso di una password.
  2. Sfruttare le possibilità offerte dal web server "Apache"

In questa sede mi occuperò di spiegare la seconda soluzione, anche perchè è quella intrinsecamente più sicura.

Per prima cosa dobbiamo creare un file in formato puro testo, che chiameremo ad esempio ".htaccess".
Il nome non è casuale, infatti "Apache" riconosce questi files come files di configurazione. Si faccia attenzione al fatto che essendo preceduto dal "." sui sistemi UNIX-LINUX normalmente non sarà visibile. Per poterlo vedere si deve digitare il comando ls -la o attivare l'apposita opzione nel browser grafico.
Questo conterrà le seguenti righe:

AuthUserFile /home/shishii/www/protetta/.htpasswd
AuthGroupFile /dev/null
AuthName "prova password"
AuthType Basic
require valid-user

Nella riga:

AuthUserFile /home/shishii/www/protetta/.htpasswd
dobbiamo indicare il percorso completo per raggiungere la directory "protetta" che vogliamo creare e proteggere.

Nella riga:

AuthName "prova password"
inseriamo una descrizione della directory protetta.

Salviamo il file in puro testo.

Colleghiamoci con "telnet" o "ssh" al nostro server e compiamo le operazioni sotto indicate:

In corsivo avrai le righe scritte dal sistema, in neretto le righe che devi digitare tu.

Dopo il collegamento sarai nella directory principale del tuo sito e devi entrare nella directory superiore a quella che devi proteggere
[shishii@pluto shishii]$ cd www

Se la directory da proteggere non esiste ancora la puoi creare digitando:
[shishii@pluto www]$ mkdir protetta

Adesso devi entrare nella directory da proteggere con password:
[shishii@pluto www]$ cd protetta

Adesso devi creare il file segreto .htpasswd, che contiene l'accoppiata user - password, tramite l'utility di "Apache" "htpasswd":
[shishii@pluto protetta]$ htpasswd -c .htpasswd shishii
Ovviamente al posto di shishii dovrai mettere il login che ti interessa.

La risposta sarà:
Adding password for shishii
New password: < inserisci la tua password>
Re-type new password: <ripeti la password>

A questo punto senza chiudere "telnet" o "ssh", vai con un programma ftp nel tuo sito ed invia nella cartella da proteggere "protetta" il file ".htaccess". Mi raccomando a non sbagliarti, le conseguenze potrebbero essere gravi, ad esempio potrebbe diventare impossibile accedere al tuo sito dal web.

Torna a "telnet" o "ssh" che dovrebbe essere ancora aperto, se non lo fosse non ti preoccupare, basta che entri di nuovo nel tuo spazio e ti porti all'interno della directory da proteggere.

Controlliamo cosa c'è nella directory da proteggere "protetta":
[shishii@pluto protetta]$ ls -la
Risposta:
drwxr-xr-x 2 shishii shishii 4096 17 lug 23:09 .
drwxr-xr-x 23 root root 4096 17 lug 22:41 ..
-rw-r--r-- 1 shishii shishii 113 17 lug 22:45 .htaccess
-rw-rw-r-- 1 shishii shishii 22 17 lug 22:47 .htpasswd
-rw-r--r-- 1 shishii shishii 3430 13 dic 2003 tag.html

Adesso se vogliamo possiamo aggiungere uno o più utenti autorizzati ad entrare nella directory. Per fare ciò rientriamo nella directory protetta e digitiamo:
[shishii@pluto protetta]$ htpasswd .htpasswd marco

Marco è il nuovo utente di fantasia. Nota come è sparito rispetto a prima " -c".

La risposta sarà:
Adding user marco
New password: < inserisci la tua password>
Re-type new password: <ripeti la password>

A questo punto la procedura è terminata e nella directory http://www.shishii.com/protetta/ potranno entrare solo "shishii" e "marco" tramite le loro passwords.

Per verificarlo proviamo a cercare la pagina html che vi era contenuta, o ad entrarvi in qualunque altra maniera, ci troveremo di fronte ad un messaggio di errore.

Attenzione!!

Alcuni server, tra i quali i "Sun Cobalt" con sistema operativo LINUX, hanno delle configurazioni di "Apache" che richiedono una differente struttura del file ".htaccess". Ad esempio:

order allow,deny
allow from all
require valid-user
Authname "Eventuali indicazioni"
AuthPAM_Enabled off
Authtype Basic
AuthUserFile /path/.htpasswd 

Il resto della procedura è identica a sopra.

Conclusioni

Si tratta di un metodo molto semplice ed economico per proteggere delle intere sezioni di un sito da accessi non voluti. Comunque è bene tenere presente che è un sistema con una grave falla. Infatti benchè le password siano conservate in maniera criptata, le stesse viaggiano in rete in chiaro. Il seguente output di una sessione di sniffing operata tramite "ettercap" è più eloquente di ogni spiegazione:
[root@marco root]# ettercap -NCs 10.0.0.7 10.0.0.5

ettercap 0.6.b (c) 2002 ALoR & NaGA

Your IP: 10.0.0.7 with MAC: 00:23:76:9B:65:21 on Iface: eth0

Loading plugins... Done.
Building host list for netmask 255.255.255.0, please wait...

Resolving 1 hostnames...

* |=============================>| 100.00 %

Press 'h' for help...

Sniffing (IP based): 10.0.0.7:0 <--> 10.0.0.5:0

TCP + UDP packets... (default)

Collecting passwords...

22:55:49  10.0.0.5:32824 <--> 10.0.0.7:80  http

USER: shishii
PASS: prova

http://10.0.0.7/protetta/tag.html

Di conseguenza si deve avere coscienza del fatto che un livello di sicurezza "elevato" si potrà ottenere solo quando uscirà dalla fase sperimentale l'integrazione del modulo di "Apache" mod_auth_digest, che consente di scambiare le credenziali criptate tramite il meccanismo di hashing MD5.
Allo stato attuale l'unica soluzione solida è accoppiare quanto sopra ad una connessione HTTPS, criptata tramite SSL, che però ha un costo di base dovuto al fatto che i certificati ufficiali si pagano.


Indice del sito