Aree riservate con Apache e MySQL

5 febbraio 2008

Una delle situazioni più comuni che ci si trova ad affrontare nella gestione di un sito web è limitare l’accesso ai contenuti di una directory. Nei casi più semplici non è necessario ricorrere ad un sistema di autenticazione gestito da un’applicazione lato server, ma basta sfruttare gli strumenti messi a disposizione dal nostro web server apache, la cosiddetta autenticazione di base HTTP.

L’esempio classico consiste nell’utilizzare un file di configurazione per-directory .htaccess creato nella directory da proteggere e che riporta direttive di questo tipo:

AuthName "Area Riservata"
AuthType Basic
AuthUserFile /percorso_del_file/.htpasswd
require valid-user

Con l’utility da riga di comando htpasswd è semplice creare ed aggiornare un file di testo, nell’esempio chiamato .htpasswd, contenente, una per riga, le coppie <username>:<password>.

#crea il file e aggiunge l'utente testuser
[root]# htpasswd -c /percorso_del_file/.htpasswd testuser
#aggiunge l'utente testuser2
[root]# htpasswd /percorso_del_file/.htpasswd testuser2

Per approfondimenti sull’argomento vi rimando all’articolo I file .htaccess in Apache.

Questa soluzione, molto immediata, presenta però alcuni svantaggi. Innanzitutto scarsa scalabilità: quando il numero di utenti diventa consistente la loro gestione risulta macchinosa e le prestazioni di mod_auth (il modulo che gestisce questo tipo di autenticazione) tendono a peggiorare. Inoltre chi gestisce gli utenti deve avere i privilegi per accedere al server ed utilizzare l’utility htpasswd o almeno quelli per copiare il file delle password nella directory di destinazione. Se poi abbiamo già predisposto per altri scopi un database degli utenti, mantenere allineati i dati di entrambi può risultare complicato.

Una possibile soluzione è rappresentata da mod_auth_mysql, tale modulo consente di memorizzare le credenziali d’accesso in un database MySQL, rendendone la gestione molto più flessibile. In questo primo articolo vedremo come implementare il meccanismo di base, mentre un successivo sarà dedicato all’approfondimento e ad alcune configurazioni più avanzate.

Considerazioni preliminari

Di seguito faremo riferimento all’utilizzo di un file .htaccess, spesso unica soluzione per chi dispone di uno spazio in hosting e non ha accesso al/i file di configurazione di Apache. Questo presuppone che l’hoster abbia provveduto ad installare il modulo mod_auth_mysql, abbia abilitato l’utilizzo dei file .htaccess con la direttiva AccessFileName, abbia utilizzato l’opzione AuthConfig in AllowOverride….insomma abbia predisposto il web server per poter consentire l’autenticazione nella directory desiderata tramite un file di configurazione per-directory.

Chi ha libertà di azione sul server dovrebbe preferibilmente impostare le direttive all’interno di un contenitore <Directory> riferito alla directory da proteggere, a meno che non abbia l’esigenza di cambiare la configurazione run-time senza riavviare Apache. Ricordo brevemente che l’abilitazione della configurazione per-directory obbliga il web server a rilevare la presenza di un eventuale file .htaccess ad ogni richiesta, con un certo dispendio in termini di operazioni di I/O su disco. Tanto maggiore quanto più è articolata la struttura delle directory relativa alla nostra document root ed alle pagine del sito.

Detto questo cominciamo con l’installazione del modulo, chi non fosse interessato a questa sezione può passare direttamente ai paragrafi successivi che si riferiscono alla configurazione di MySQL e Apache.

Se vuoi aggiornamenti su Aree riservate con Apache e MySQL inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Aree riservate con Apache e MySQL

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy