11.4. Basic Authentication

Lo schema di autenticazione Basic era già disponibile in tutte le precedenti versioni di Squid, ma a partire dalla versione 2.5 la sintassi delle direttive di configurazione contenute in squid.conf é sensibilmente variata rispetto alla versione precedente, per completezza analizzeremo entrambe le versioni.

11.4.1. Configurazione in Squid 2.5

Lo schema di autenticazione basic utilizza i seguenti parametri

auth_param basic program cmdline
auth_param basic children numberofchildren
auth_param basic realm realmstring
auth_param basic credentialsttl timetolive
   

il TAG program cmdline

Specifica il comando che avvia il programma utenticatore esterno. Tale programma legge una riga da stdin contenente "username password" e risponde con "OK" o "ERR" in un loop senza fine. Come default, lo schema di autenticazione basic non viene attivato, a meno che non venga specificato un programma che si occupa di eseguire l'autenticazione, ad esempio

auth_param basic program /usr/local/squid/libexec/ncsa_auth \
/usr/local/squid/etc/passwd
   

il TAG children numberofchildren

Indica quante istanze del programma di autenticazione devono essere eseguite contemporaneamente. Se viene configurato un numero di autenticatori troppo basso, Squid potrebbe essere costretto ad attendere un autenticatore libero, rallentando la navigazione. Il valore predefinito è 5

auth_param basic children 5
   

il TAG realm realmstring

Specifica il nome realm che viene fornito ai client per lo schema di autenticazione Basic, ovvero il testo che l'utente vedrà nella dialog box di autenticazione proposta dal browser web. Il valore predefinito è "Squid proxy-caching web server"

auth_param basic realm Squid proxy-caching web server
   

il TAG credentialsttl timetolive

Specifica il tempo di vita (Time To Live o TTL) di una coppia username:password che viene validata esternamente. In altre parole, quanto spesso un programma helper debba validare nuovamente le credenziali per un dato utente. Il valore predefinito é due ore

auth_param basic credentialsttl 2 hours
   

è sempre possibile testare il corretto funzionamento di un helper per la Basic authentication semplicemente eseguendolo con la stessa riga comandi specificata in squid.conf e verificando che, immettendo delle coppie username:password, si ottengano le risposte "OK" o "ERR" previste.

11.4.2. Configurazione in Squid 2.4

Squid 2.4 supporta esclusivamente lo schema di autenticazione Basic ed utilizza i seguenti parametri

authenticate_program cmdline
authenticate_children numberofchildren
   

Il significato e la sintassi di queste direttive é analogo a quelle di Squid 2.5 che abbiamo trattato in precedenza

il TAG authenticate_program cmdline

Specifica il comando che avvia il programma utenticatore esterno. Questo programma legge una riga da stdin contenente "username:password" e risponde con "OK" o "ERR" in un loop senza fine. Come default, lo schema di autenticazione basic non viene attivato a meno che non sia specificato un programma che esegue l'autenticazione. Questo TAG equivale alla direttiva di Squid 2.5 auth_param basic program cmdline, ad esempio

authenticate_program /usr/local/squid/libexec/ncsa_auth /usr/local/squid/etc/passwd
   

il TAG authenticate_children numberofchildren

Indica quante istanze del programma di autenticazione devono essere eseguite contemporaneamente. Se viene configurato un numero di autenticatori troppo basso, Squid potrebbe essere costretto ad attendere un autenticatore libero, rallentando la navigazione. Questo TAG equivale alla direttiva di Squid 2.5 "auth_param basic children numberofchildren", il valore predefinito è 5.

authenticate_children 5
   

Nel seguito di questo documento saranno trattati in dettaglio gli autenticatori relativi a Squid 2.5, si tenga presente che le configurazioni indicate possono essere valide anche per Squid 2.4 sempre che si utilizzi la differente sintassi nelle direttive di configurazione in squid.conf.

11.4.3. helper NCSA

É storicamente il primo authentication helper utilizzato in Squid. Utilizza un file di password sullo stile di NCSA httpd (o piú recentemente Apache) per eseguire l'autenticazione con alcune varianti rispetto al formato originale

ecco un esempio di configurazione

auth_param basic program /usr/local/squid/libexec/ncsa_auth \
/usr/local/squid/etc/passwd
auth_param basic children 10
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 30 minutes
   

In questo caso ncsa_auth si trova in /usr/local/squid/libexec, il file contenente le password é /usr/local/squid/etc/passwd, il numero di helper in esecuzione é 10 ed il TTL dell'autenticazione é pari a 30 minuti. L'helper ncsa_auth é utilizzabile su tutte le piattaforme supportate da Squid.

11.4.3.1. Generare il DB degli utenti

Il file contenente le userid e le password che verranno interpretate da ncsa_auth può essere generato utilizzando l'applicazione htpasswd fornita come corredo standard del server web apache. Di seguito la corretta sintassi per la creazione del file /usr/local/squid/etc/passwd

% htpasswd -c /usr/local/squid/etc/passwd stefano 
New password: 
Re-type new password: 
Adding password for user stefano 
    

Pedro Lineu Orso ha realizzato due ottimi strumenti per la gestione tramite interfaccia WEB del file di password: admuser e chpasswd disponibili su http://web.onda.com.br/orso/.

11.4.4. helper PAM

Questo authentication helper consente a Squid l'utilizzo pratico di qualsiasi modulo PAM (Pluggable Authentication Module) per validare un utente. I moduli PAM piú utilizzati sono Unix, Radius, Kerberos e SMB. Sono comunque disponibili molti altri moduli meno noti presso varie fonti, ecco un esempio di configurazione

auth_param basic program /usr/local/squid/libexec/pam_auth
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 45 minutes
   

in questo caso pam_auth si trova in /usr/local/squid/libexec, il numero di helper in esecuzione é 5 ed il TTL dell'autenticazione é pari a 45 minuti. L'helper pam_auth é utilizzabile solamente sulle piattaforme supportate da Squid che forniscono i servizi PAM a livello di sistema. Il nome di default del servizio PAM utilizzato é squid. La configurazione del supporto PAM può variare in funzione della piattaforma utilizzata, sono disponibili le seguenti opzioni

-n service_name  The PAM service name (default squid)
-t ttl           PAM connection ttl in seconds (default 0)
                 during this time the same connection will be reused
                 to authenticate all users
-o               Do not perform account mgmt (account expiration etc)
-1               Only one user authentication per PAM connection
   

Per maggiori dettagli riferirsi a pam(8), "PAM Systems Administrator Guide".

11.4.4.1. Red Hat Linux

Creare il file /etc/pam.d/squid utilizzando il comando

% touch /etc/pam.d/squid 
    

Il file deve contenere le seguenti entry:

Auth required     /lib/security/pam_stack.so service=system-auth
Auth required     /lib/security/pam_nologin.so 
account required  /lib/security/pam_stack.so service=system-auth
password required /lib/security/pam_stack.so service=system-auth
session required  /lib/security/pam_stack.so service=system-auth
    

11.4.4.2. Unix Standard

Per utilizzare /etc/passwd standard modificare il file /etc/pam.conf

squid auth required /lib/security/pam_unix.so.1
squid account required /lib/security/pam_unix.so.1
    

si noti che alcuni moduli PAM, per esempio l'autenticazione tramite shadow password, necessitano che il programma sia installato con privilegio di root suid per poter avere accesso al database delle password utente.

11.4.5. helper LDAP

L'helper squid_ldap_auth consente a Squid di connettersi ad un Directory Service LDAP per validare username e password. Nel seguito di questo paragrafo verranno trattati alcuni argomenti la cui comprensione é strettamente dipendente da una buona conoscenza del protocollo LDAP, per maggiori dettagli al riguardo, riferirsi al sito del progetto OpenLDAP (http://www.openldap.org).

Il programma ha due modalità di funzionamento: nella modalità di funzionamento predefinita il DN (Distinguished Name) dell'utente da validare é costruito utilizzando un DN base e l'attributo user. Nell'altra modalità di funzionamento, viene utilizzato un filtro di ricerca per localizzare nella Directory un user DN valido rispetto al DN base. Questo autenticatore consente l'interfacciamento con tutti i maggiori Directory Service attualmente disponibili

ecco un esempio di configurazione

auth_param basic program /usr/local/squid/libexec/squid_ldap_auth -b \
dc=your,dc=domain 
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 30 minutes
   

in questo caso squid_ldap_auth si trova in /usr/local/squid/libexec, il numero di helper in esecuzione é 5 ed il TTL dell'autenticazione é pari a 30 minuti e il server LDAP si trova sulla macchina proxy. L'helper squid_ldap_auth é utilizzabile solamente sulle piattaforme supportate da Squid sui cui sono disponibili le librerie OpenLDAP od un un altra C-API LDAP compatibile. A riguardo dell'helper sono disponibili le seguenti opzioni

squid_ldap_auth -b basedn [-s searchscope]
               [-f searchfilter] [-D binddn -w bindpasswd]
               [-u attr] [-h host] [-p port] [-P] [-R] [ldap_server_name[:port]] ...
   

L'opzione -b deve essere sempre specificata. Per dettagli sulle opzioni si raccomanda di visionare la man page relativa a squid_ldap_auth fornita con Squid.

11.4.5.1. Esempi di configurazione

Di seguito vengono proposti alcuni esempi di utilizzo di squid_ldap_auth.

Nel caso in cui la Directory utilizzi il layout definito dalla RFC 2307 (http://www.faqs.org/rfcs/rfc2307.html) con un singolo dominio, é sufficiente specificare il nome del DN base sotto il quale si trovano gli utenti ed i server

squid_ldap_auth -b ou=people,dc=your,dc=domain ldapserver
    

se invece si utilizzano dei sottodomini, si rende necessario ricorrere ad un filtro per localizzare il DN dell'utente in quanto questo non può essere ricostruito a partire dal DN base e dal login name

squid_ldap_auth -b dc=your,dc=domain -f uid=%s ldapserver
    

In modo simile, se si intende concedere l'accesso solo agli utenti che hanno un attributo specifico

squid_ldap_auth -b dc=your,dc=domain -f (&(uid=%s)(specialattribute=value)) ldapserver
    

nel caso in cui l'attributo user del DN dell'utente sia "cn" invece di "uid" e non si vogliano fare ricerche per identificare l'utente, o nel caso di Active Directory, é possibile utilizzare qualcosa di simile

squid_ldap_auth -u cn -b cn=Users,dc=your,dc=domain ldapserver
    

nel caso in cui, volendo eseguire delle ricerche, la Directory non consenta ricerche di tipo anonimo, é possibile utilizzare le opzioni -D e -w per specificare un DN utente e relativa password per connettersi alla Directory ed eseguire la ricerca, come nel seguente esempio per Active Directory

squid_ldap_auth -P -R -b dc=your,dc=domain \
-D cn=squid,cn=users,dc=your,dc=domain -w secretsquidpassword \
-f (&(userPrincipalName=%s)(objectClass=Person)) activedirectoryserver
    

11.4.6. helper Winbindd

L'helper wb_auth consente la validazione degli utenti su di un dominio Windows NT 4 o Windows 2000 Active Directory. Per il suo corretto funzionamento necessita che Samba 2.2.4 (http://www.samba.org/) o seguenti siano installati sul sistema. Per i dettagli relativi alla configurazione di Samba, riferirisi alle sezioni relative all' Autenticazione con Samba 2.2.x e alla configurazione di Winbindd. Ecco un esempio di configurazione

auth_param basic program /usr/local/squid/libexec/wb_auth
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 30 minutes
   

In questo caso wb_auth si trova in /usr/local/squid/libexec, il numero di helper in esecuzione é 5 ed il TTL dell'autenticazione é pari a 30 minuti. L'helper wb_auth é utilizzabile solamente sulle piattaforme supportate da Squid per cui é disponibile Samba versione 2.2.4 o seguenti. Sono disponibili le seguenti opzioni:

-d enable debugging
-h this message
   

L'opzione -d consente una diagnostica abbastanza chiara e precisa dei problemi. Per controllare il funzionamento di winbindd, é possibile utilizzare il tool wbinfo fornito con Samba.

Attenzione: wb_auth non funziona con Samba 3.x, è necessario riferirsi alla sezione dedicata a Samba 3 per ottenere maggiori dettagli.

11.4.7. helper MSNT

Questo helper consente di verificare l'autenticazione degli utenti appartenenti a un dominio Windows NT 4 o Active Directory Windows 2000/2003. Tale funzionalità é attualmente resa disponibile con prestazioni migliori dall'helper Winbind. Ecco un esempio di configurazione

auth_param basic program /usr/local/squid/libexec/msntauth
auth_param basic children 8
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 15 minutes
   

In questo caso msntauth si trova in /usr/local/squid/libexec, il numero di helper in esecuzione é 8 ed il TTL dell'autenticazione é pari a 15 minuti. L'helper msntauth é utilizzabile solamente sulle piattaforme supportate da Squid su cui é possibile compilare le librerie Samba su cui é basato (Samba non é comunque richiesto).

A partire dalla versione 2, msntauth utilizza un file di configurazione denominato msntauth.conf, la directory di default del file msntauth.conf è /usr/local/squid/etc/msntauth.conf, il suo formato è il seguente:

# 
#      PDC       BDC         DOMAIN 
#      --------- ----------- ----------- 
server paperino  pippo       mio_dominio 
# 
denyusers /usr/local/squid/etc/denyusers 
allowusers /usr/local/squid/etc/allowusers
   

nell'esempio di cui sopra paperino e pippo sono i nomi dei server che svolgono le funzioni di domain controller, mio_dominio è il nome del dominio windows. Gli utenti non abilitati ad accedere alla rete internet possono essere indicati nel file identificato dalla direttiva denyusers. Questo file contiene una lista di nomi utente per i quali non è richiesta una struttura particolare. Se il file non esiste o è vuoto a nessun utente verrà applicata la negazione di accesso, il file deve essere leggibile dall'utente con cui gira Squid, specificato dalla direttiva cache_effective_user in squid.conf. Gli utenti abilitati per accedere alla rete internet vengono dichiarati nel file identificato dalla direttiva allowusers, questo file contiene una lista di utenti autorizzati la cui compilazione non richiede una particolare struttura, se il file non esiste o è vuoto verrà comunque ignorato.