
Benvenuto! Se sei un nuovo visitatore ti consiglio di iscriverti al mio Feed RSS in modo da essere sempre aggiornato riguardo l'uscita di nuovi articoli oppure sbirciare tra i tutorials ed i progetti.
Per avere un'idea del best-content presente in questo blog puoi leggere il post intitolato "Ed ora è il momento di rilanciare alcune iniziative! (1a parte e 2a parte)".
Buona navigazione e grazie per la visita!
Requisiti
Differenza tra autenticazione e autorizzazione
Nel momento in cui noi proteggiamo una directory possiamo vedere come l'utente deve passare obbligatoriamente in due passaggi:
Entrambi questi passaggi in caso di errore restituiscono il codice 401 corrispondente al unauthorized.
Cos'è il file .htaccess
Questo file ci permette di modificare delle direttive di configurazione del webserver Apache senza riavviarlo: ciò risulta molto utile nel caso di server affollati dove ogni utente ha richieste particolari.
Se non ci fosse l'.htaccess dovremmo chiedere al gestore del server di proteggerci una determinata cartella, di dove redirezionare l'errore 404, quali regole usare per il rewrite, ecc... quindi in tal caso ogni richiesta da parte dell'utente corrisponderebbe al riavvio del webserver e all'allergia che proverà il gestore del webserver ogni volta che sentirà la nostra voce :P.
Quindi il vantaggio risulta essere l'estrema flessibilità ma dall'altra parte della medaglia vedremo una diminuzione delle performance generali visto che questo file viene letto ad ogni richiesta (e in modo ricorsivo seguendo tutta la path).
Il file .htaccess di esempio (che metteremo nella directory da proteggere) che studieremo è il seguente:
Ora esaminiamolo riga per riga.
AuthName (nome)
Essa ci permette di indicare praticamente il titolo della finestra che apparirà all'utente, con l'unica precauzione di racchiudere la stringa tra le virgolette doppie nel caso in cui contenga degli spazi.
AuthType (tipo)
Questa direttiva ci permette di specificare che tipo di controllo verrà utilizzato per l'esame delle credenziali.
Esistono 2 tipi di controlli:
AuthUserFile (nomefile)
La seguente direttiva ci permette di indicare la posizione del file (con il path assoluto) contenente le varie coppie username/password.
Per creare questo file Apache (nel caso dell'autenticazione Basic) ci mette a disposizione il tool htpasswd.
Vediamone alcuni esempi:
htpasswd -c credenziali daniele
In questo caso viene creato un file di nome credenziali nella quale viene inserito l'username daniele. La password verrà richiesta in seguito.
htpasswd credenziali matteo
In questo modo viene aggiunto un nuovo username (in questo caso matteo) al file credenziali. La password verrà richiesta in seguito.
htpasswd -b credenziali luca lapwddiluca
In questo modo viene aggiunto un nuovo username (in questo caso luca) al file credenziali con la password lapwddiluca corrispondente. Il flag -b indica che la password è stata passata tramite linea di comando e quindi non verrà richiesta in seguito.
Gli algoritmi che ci permette di usare sono il crypt e l'md5 a seconda delle nostre preferenze e del sistema che ospita il webserver.
La sintassi di htdigest come ci si poteva aspettare è molto simile a quella dell'htpasswd.
Bisogna notare inoltre come in Windows le password non vengano criptate ma devono essere scritte in chiaro sul file delle passwords.
Per facilitare la vita a chi deve comporre questo file (e non gli piace htpasswd) ho creato una piccola applicazione in flash che spero vi risulti utile:
Come potete vedere vi basta inserire username e password e dopo la pressione del tasto OK vi verrà creata la stringa da mettere nel vostro file delle passwords.
AuthGroupFile (nomefile)
Ci permette di indicare il nome di un file (con il path assoluto) contenente i vari gruppi di utenti e i suoi membri.
Nell'esempio non è stata utilizzata questa direttiva ma risulta molto utile quando bisogna gestire un numero di utenti elevato.
Il file che indicheremo potrà essere fatto in questo modo:
amministratori: daniele matteo
nullafacenti: luca
In questo caso abbiamo due gruppi di utenti alla quale potremmo in seguito discriminarne l'accesso a determinate directory o files.
Questa direttiva ci permette quindi di dividere logicamente un vasto numero di utenti facilitandoci di molto la vita.
Require ([user utente1 utente2] [group gruppo1 gruppo2] [valid-user] [valid-group])
Questa è la direttiva che ci permette di indicare chi può avere accesso e chi no.
Possiamo specificare in vari modi quali sono gli utenti e i gruppi che avranno accesso alla directory:
Dalla versione di Apache 1.3.20 sono stati aggiunti gli argomenti file-owner e file-group che permettono l'accesso nel caso in cui l'utente (o gruppo) che si autorizza è pure l'owner del file. Questo permette ai vari utenti (o gruppi) di accedere unicamente ai propri files che "possiede".
L'ultima cosa da dire riguardo questi due argomenti è che in ogni caso l'utente deve essere presente nella lista degli users nel file indicato dalla direttiva AuthUserFile.
Altri esempi di utilizzo
Per vedere le varie modalità d'uso eccovi un paio di esempi:
L'esempio appena citato può essere scritto anche in questo modo (considerando i gruppi formati prima):
Concludiamo
Bene ora sapete come si fa a proteggere facilmente una directory usando l'.htaccess dell'Apache; ovviamente ci sono altre direttive e altri tipi di controllo che si possono fare in modo incrociato per aumentare considerevolmente la sicurezza ma per approfondimenti vi rimando al sito Apache.org.
Fonti
Libri:
Daniele Simonin 9 Settembre 2005 alle 13:04 Trackback URI
| L | M | M | G | V | S | D |
|---|---|---|---|---|---|---|
| « Apr | ||||||
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
Scrivi un commento
Tags di formattazione:
Leggi i 6 commenti
Ho seguito passo passo il tuo bellissimo tutorial, e sono riuscito a proteggere una directrory e le sue sottodirectory da accessi non autorizzati.
Infatti digitando l'url delle directory protetta mi viene chiesto di autentificarmi con login e password.
E' talmente protetta questa directory che nemmeno io riesco ad entrarci.
La sicurezza è tutto ma questo è un pò troppo.
Così ho cercato di venirci a capo: visto che le tue istruzioni sono come al solito altamente precise ed esaustive , ho pensato di aver saltato qualche passaggio così ho resettato il mio lavoro e l ho rifatto da capo.
In questo modo mi è saltato all'occhio un particolare: come mai ogni volta che inserisco login e password (sempre gli stessi) nel tuo script per calcolare la stringa da inserire nel file .htpassword mi viene restituita sempre una stringa differente?
Esempio
login: attilio
password :attilio
alle ore 21:32 mi restituisce :
attilio:$1$4p1OSDe$vmEmNtxurlsHgZpaW0PHF1
login: attilio
password :attilio
alle ore 21:33 mi restituisce :
attilio:$1$zeC7hLd0$rTX9MPvRr/TPfry/zU.qy.
Scusa ma la stringa non dovrebbe essere sempre la stessa?
Oppure varia in base al tempo, all'umidità o agli influssi astrologici.
Certo di una tua precisa ed esaustiva risposta, ti saluto e ti ringrazio mio pudico amico.
Commento di Attilio 19 Marzo 2008 alle 21:37
Ohi Attilio, ancora che lavori a sta ora? Mi raccomando di fare "rm -rf"!
Come ti dicevo devo rivedere lo script, probabilmente ero ubriaco quando l'ho fatto oppure tiene veramente conto dell'umidità e delle condizioni mentali di chi lo esegue.
PS: Ti uccido!
Commento di Daniele Simonin 20 Marzo 2008 alle 07:13
Una domanda, spero saprai rispondermi: come bisogna eseguire l'autenticazione per il protocollo digest? Se il mio vero nome è davide e il mio username è xx cosa devo inserire nel "box di autenticazione" del broswar? Grazie mille.
Commento di Davide 7 Aprile 2008 alle 18:20
Ciao per il digest non sono informato quindi ti consiglio di vedere la documentazione ufficiale.
Commento di Daniele Simonin 9 Aprile 2008 alle 10:05
Ciao come posso creare un file .htaccess il pc non me lo permette me lo puoi inviare posso anche pagare
Commento di Giacomo 24 Aprile 2008 alle 12:26
Crealo come un normale file di testo (senza il . iniziale) e dopo averlo messo tramite ftp nella tua macchina linux lo rinomini (rimettendo il .).
Commento di Daniele Simonin 24 Aprile 2008 alle 15:10