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:
- Utilizzo di CGI che utilizzando algoritmi di criptazione condizionano l'accesso ad un file o ad una directory al possesso di una password.
- 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/.htpasswddobbiamo 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 |
