Progetto di gestione dell`Accesso in un sistema di Identity and

Transcript

Progetto di gestione dell`Accesso in un sistema di Identity and
Università degli studi di Parma
Facoltà di Scienze Matematiche Fisiche Naturali
Corso di Laurea in Informatica
Tesi di Laurea in
Reti di Calcolatori
Progetto di gestione dell’Accesso in un
sistema di Identity and Access Management
di Ateneo
Relatore
Candidato
Prof. Roberto Alfieri
Andrea Zanelli
Corelatore
Ing. Marco Panella
Anno Accademico 2008/2009
A mia madre Gabriella
e a mio padre Sandro.
Indice
1 Obiettivo del progetto
11
2 IAM (Identity and Access Management)
15
2.1
Cos’è un sistema IAM . . . . . . . . . . . . . . . . . . . . . .
15
2.2
IAM federato . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
2.3
Identità e ciclo di vita dell’identità . . . . . . . . . . . . . . .
20
2.3.1
Identità . . . . . . . . . . . . . . . . . . . . . . . . . .
21
2.3.2
Ciclo di vita delle identità . . . . . . . . . . . . . . . .
22
Accesso: autenticazione e autorizzazione . . . . . . . . . . . .
23
2.4.1
Autenticazione degli utenti . . . . . . . . . . . . . . .
23
2.4.2
Autorizzazione . . . . . . . . . . . . . . . . . . . . . .
24
Implementare un server IAM . . . . . . . . . . . . . . . . . .
24
2.5.1
LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
2.5.2
Database e DBMS . . . . . . . . . . . . . . . . . . . .
31
2.4
2.5
3 Gestione dell’accesso
35
3.1
Cosa significa gestire l’accesso . . . . . . . . . . . . . . . . . .
35
3.2
Le risorse informatiche . . . . . . . . . . . . . . . . . . . . . .
36
3.2.1
WiFi . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
3.2.2
VPN . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
3.2.3
Posta elettronica . . . . . . . . . . . . . . . . . . . . .
40
3.2.4
Risorse web . . . . . . . . . . . . . . . . . . . . . . . .
41
3.2.5
Postazioni computer . . . . . . . . . . . . . . . . . . .
41
Soluzioni e tecnologie per l’accesso . . . . . . . . . . . . . . .
42
3.3.1
Username e password
. . . . . . . . . . . . . . . . . .
42
3.3.2
Single Sign On . . . . . . . . . . . . . . . . . . . . . .
43
3.3.3
RADIUS . . . . . . . . . . . . . . . . . . . . . . . . . .
44
3.3
5
3.3.4
Kerberos . . . . . . . . . . . . . . . . . . . . . . . . . .
47
3.3.5
Public Key Infrastructure . . . . . . . . . . . . . . . .
50
4 Situazione attuale nell’Università di Parma
4.1
4.2
53
Il contesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
4.1.1
Risorse disponibili agli utenti . . . . . . . . . . . . . .
53
Attuale gestione dell’accesso . . . . . . . . . . . . . . . . . . .
54
4.2.1
Struttura del server LDAP
. . . . . . . . . . . . . . .
55
4.2.2
Accesso alle risorse informatiche . . . . . . . . . . . . .
56
4.2.3
Problematiche della gestione attuale . . . . . . . . . .
57
5 Progetto: gestione centralizzata dell’accesso
59
5.1
Vincoli progettuali . . . . . . . . . . . . . . . . . . . . . . . .
60
5.2
Architettura generale . . . . . . . . . . . . . . . . . . . . . . .
61
5.3
LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
5.3.1
Quale server LDAP . . . . . . . . . . . . . . . . . . . .
62
5.3.2
Struttura e schema . . . . . . . . . . . . . . . . . . . .
64
5.3.3
Attributi per l’identità . . . . . . . . . . . . . . . . . .
67
5.3.4
Attributi per l’accesso . . . . . . . . . . . . . . . . . .
72
5.3.5
Esempio di una entry LDAP
. . . . . . . . . . . . . .
78
Gestione cetralizzata dell’accesso con LDAP . . . . . . . . . .
80
5.4.1
RADIUS e LDAP . . . . . . . . . . . . . . . . . . . . .
80
5.4.2
WiFi . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
5.4.3
VPN . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87
5.4.4
Risorse web . . . . . . . . . . . . . . . . . . . . . . . .
88
5.4.5
Posta elettronica . . . . . . . . . . . . . . . . . . . . .
91
5.4.6
Windows e Linux . . . . . . . . . . . . . . . . . . . . .
92
5.4.7
Schema del progetto . . . . . . . . . . . . . . . . . . .
95
5.5
Trasmissione sicura dei dati riservati . . . . . . . . . . . . . .
96
5.6
Gestione del carico: affidabilità e performance . . . . . . . . .
97
5.6.1
Heartbeat . . . . . . . . . . . . . . . . . . . . . . . . .
98
5.6.2
Linux Virtual Server . . . . . . . . . . . . . . . . . . .
99
5.6.3
Architettura per il bilanciamento del carico . . . . . . 100
5.4
5.7
IDEM: federazione della rete GARR . . . . . . . . . . . . . . 101
5.7.1
Attributi IDEM . . . . . . . . . . . . . . . . . . . . . . 101
6 Conclusioni
105
6
A Schema LDAP
107
Bibliografia
123
7
8
Elenco delle figure
2.1
Ogni risorsa gestisce gli accessi in modo autonomo. . . . . . .
16
2.2
Gestione centralizzata degli accessi. . . . . . . . . . . . . . . .
16
2.3
Federazione senza AAI.
. . . . . . . . . . . . . . . . . . . . .
20
2.4
Federazione con AAI. . . . . . . . . . . . . . . . . . . . . . . .
21
2.5
Ciclo di vita dell’identità. . . . . . . . . . . . . . . . . . . . .
23
2.6
Server IAM. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
2.7
Esempio di un albero delle entry (DIT). . . . . . . . . . . . .
26
2.8
Distinguished name (DN) di una entry. . . . . . . . . . . . . .
27
2.9
Possibile struttura di una entry. . . . . . . . . . . . . . . . . .
27
3.1
Schema di una rete wireless collegata ad una rete wired
. . .
38
3.2
Roaming tra access point . . . . . . . . . . . . . . . . . . . .
39
3.3
Remote Access VPN su rete Internet . . . . . . . . . . . . . .
39
3.4
Scambio di ticket per l’autenticazione con kerberos. . . . . . .
48
5.1
Architettura generale del progetto. . . . . . . . . . . . . . . .
61
5.2
Schema logico dell’architettura del progetto. . . . . . . . . . .
62
5.3
Esempio di infrastruttura per l’autenticazione al WiFi con
PPPoE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4
84
Schema di una infrastruttura per l’autenticazione al WiFi con
802.1x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
5.5
Autenticazione ad una risorsa web tramite CAS. . . . . . . .
89
5.6
Schema di funzionamento di Shibboleth. . . . . . . . . . . . .
91
5.7
Clients Windows configurati per autenticare gli utenti tramite
il server SAMBA, che a sua volta prende gli attributi degli
5.8
utenti dal server LDAP. . . . . . . . . . . . . . . . . . . . . .
93
Connessioni sicure con SAMBA. . . . . . . . . . . . . . . . . .
94
9
5.9
Autenticazione di client Linux sfruttando direttamente il server
LDAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
94
5.10 Schema di tutte le risorse illustrate in precedenza, con uno
sguardo anche ai protocolli di sicurezza utilizzati. . . . . . . .
10
95
Capitolo 1
Obiettivo del progetto
In una qualunque organizzazione dove vi sono risorse informatiche, come
la posta elettronica, postazioni computer oppure anche una rete locale, ed
un buon numero di utenti che utilizzano queste risorse, diventa necessario (e
a volte anche obbligatorio) gestire in modo appropriato le identità digitali
degli utenti e le credenziali di accesso alle risorse informatiche per tali utenti.
È evidente che una qualunque università fa parte di questa categoria di
organizzazioni, quindi richiede una gestione delle identità e dell’accesso.
Un sistema di Identity and Access Management (brevemente IAM) è
l’insieme di tutte le componenti, le procedure e le tecnologie che servono
a gestire le identità e l’accesso. Attraverso un sistema IAM centralizzato,
nel quale ogni persona ha una e una sola identità digitale, ed a cui tutte
le risorse informatiche fanno riferimento per gestire l’accesso, si riesce ad
ottenere una situazione che offre diversi vantaggi: ogni utente avrà infatti
sempre le stesse credenziali di accesso, evitando così di doversi ricordare
una password diversa per ogni risorsa che vuole utilizzare, ma anche dal
punto di vista amministrativo le cose migliorano, gli utenti vengono gestiti
in un’unica infrastruttura alla quale le risorse informatiche si riferiscono per
gestire l’accesso, semplificando l’intero processo di amministrazione degli
utenti.
Attualmente, nell’Università di Parma, le identità digitali sono mantenute
separate in base al ruolo ricoperto all’interno dell’università, in questo modo
se una persona ricopre più ruoli (ad esempio uno studente-ricercatore) si
trova ad avere più identità digitali. Inoltre si ha una gestione degli accessi per
la quale si possono avere chiavi di accesso diverse a seconda della risorsa che
11
si vuole utilizzare. Questa situazione è quindi ben diversa a quella accennata
poco sopra, con uno IAM centralizzato.
Lo scopo di questo progetto è proprio studiare e progettare una soluzione
reale per un sistema di Identity and Access Management per l’Università di
Parma, in cui ogni persona avrà un’unica identità digitale, ed in cui l’accesso
alle risorse avverrà utilizzando sempre le stesse credenziali. In particolare si
ci concentrerà sulla gestione dell’accesso, ovvero di come creare un sistema in
cui tutte le risorse informatiche dell’università possano fare riferimento ad
un’infrastruttura comune per gestire l’accesso, e di come si può implemetare
questa infrastruttura che si deve interfacciare con le risorse e deve contenere
le identità digitali degli utenti e le loro credenziali di accesso. Altro problema,
che però non viene affrontato in questo testo, è invece come creare e mantenere
le identità digitali, partendo dalle fonti, cioè da dove arrivano le informazioni
sugli utenti, e come gestire il loro ciclo di vita.
La gestione dell’accesso dovrà tenere conto anche di una serie di vincoli
tecnici assolutamente non trascurabili: sicurezza, affidabilità ed efficenza,
vincoli che in generale si trovano in una qualunque infrastruttura centralizzata,
dove vi è evidentemente un punto critico. Dovendo gestire dati riservati (come
le password) la sicurezza del sistema assume un ruolo fondamentale, si vuole
infatti evitare che utenti malintenzionati possano venire a conoscenza di
dati riservati di altri utenti o addirittura di riuscire ad accedere a risorse
normalmente non accessibili. Gli altri vincoli da rispettare sono chiaramente
l’efficenza e l’affidabilità: il sistema dovrà essere in grado di rispondere in
tempi accettabili anche a fronte di un numero elevato di richieste e, soprattutto,
dovrà essere sempre presente cercando di minimizzare i tempi di downtime
in caso di guasti o incidenti.
Nei prossimi capitoli vediamo meglio cos’è un sistema IAM, accennando,
senza entrare troppo nei particolari, allo IAM federato, e specificando cosa
intendiamo per identità digitale, ciclo di vita dell’identità, ed accesso ad una
risorsa informatica. Subito dopo vengono descritti quali strumenti si possono
utilizzare per implementare realmente un server IAM, cioè un server per la
gestione delle identità e dell’accesso, tenendo presente che uno degli obiettivi
del progetto è proprio implementare un server di questo tipo. Siccome si
parte dal presupposto che le identità degli utenti siano, in qualche modo,
opportunamente create e mantenute nel server IAM, non si entra nei dettagli
di come questo avviene, ed invece si illustra, nel capitolo 3, la gestione
12
dell’accesso ad un livello generale, descrivendo le risorse informatiche in
genere presenti in una università e gli strumenti che si possono utilizzate per
la gestione dell’accesso. Dopo tutta l’introduzione dei concetti generali, si
entra nel dettaglio dell’Università di Parma, descrivendo prima la situazione
attuale dell’accesso alle risorse informatiche, mettendone in evidenza i limiti e i
problemi, per arrivare infine al progetto che punta a risolvere tali problemi ed a
introdurre diversi vantaggi nella gestione dell’accesso alle risorse informatiche.
13
14
Capitolo 2
IAM (Identity and Access
Management)
2.1
Cos’è un sistema IAM
Il problema del riconoscimento dell’utente e dell’attribuzione dei relativi
permessi è un problema tipico di tutte quelle situazioni in cui vengono fornite
particolari risorse informatiche (risorse web, accesso a Internet, postazioni
computer, posta elettronica, ecc.) che richiedono autenticazione e autorizzazione. Queste problematiche sono gestite da un sistema di Identity and
Access Management (IAM) che lo si può quindi definire come l’intero
processo (applicazione di policy appropriate ed impiego di strumenti tecnologici) volto a gestire le informazioni riguardanti le identità degli utenti e
controllarne l’accesso alle risorse informatiche.
Esistono due diverse metodologie per affrontare tale problema:
1. Ogni risorsa gestisce in modo autonomo l’autenticazione e l’autorizzazione ai servizi offerti (figura 2.1).
2. La gestione degli accessi è centralizzata (figura 2.2).
Nella realtà si possono avere anche casi misti, in cui alcune risorse hanno
una gestione degli accessi centralizzata ed esistono risorse che gestiscono gli
accessi in proprio; questo caso lo si può chiaramente ricondurre al primo
punto in quanto non si ha una vera e propria centralizzazione degli accessi,
ma sottoinsiemi di risorse che gestiscono automamente l’autenticazione e
l’autorizzazione in modo autonomo.
15
Figura 2.1: Ogni risorsa gestisce gli accessi in modo autonomo.
Figura 2.2: Gestione centralizzata degli accessi.
Il primo metodo comporta evidentemente diversi problemi, dal punto di
vista del gestore delle risorse:
• le informazioni delle identità sono replicate per ogni risorsa;
• l’aggiunta di una nuova risorsa comporta l’aggiunta di un’intera infrastruttura di accesso;
• la replica delle informazioni su molti sistemi significa dover gestire la
sicurezza in molti punti, quindi si ha un minor controllo sulla sicurezza;
e dal punto di vista dell’utente:
• ogni utente si trova ad avere credenziali di accesso diverse a seconda
della risorsa a cui vuole accedere;
• a causa delle numerose password che si ritrova, è più facile che un utente
scelga password troppo semplici o addirittura le annoti su foglietti, il
che implica una minor sicurezza per i suoi dati.
Allora il secondo metodo sembra quasi una soluzione a tutti i problemi
del primo, infatti l’amministrazione degli utenti viene fatta solo nell’infrastruttura centralizzata, eliminando tutti i problemi del fornitore di servizi,
16
e, siccome gli utenti sono mantenuti in un’unica infrastruttura, si ha una
sola chiave di accesso per ogni utente, evitando così la proliferazione delle
password. Nonostante questo si introducono però problemi non trascurabili,
tipici dei sistemi centralizzati: performance e affidabilità. Portando in una
sola infrastruttura tutta la gestione degli accesi è necessario innanzitutto
stimare il carico di richieste a cui sarà sottoposto, quindi dimensionare opportunamente l’intero sistema in modo che riesca a rispondere a tutte le richieste
in tempi sempre accettabili; l’altra problematica da prevedere e da risolvere
opportunamente è l’affidabilità, ovvero fare in modo che l’infrastruttura sia
sempre presente anche in caso di guasti accidentali o compromissione del
sistema.
Solitamente accade che da una situazione in cui ogni risorsa gestisce
autonomamente le identità e gli accessi si passi ad un sistema centralizzato
per via dei vantaggi all’intero sistema che porta quest’ultima soluzione. Uno
dei problemi di questo passaggio è il consolidamento delle identità digitali,
poiché può essere che le informazioni sugli utenti arrivino da più fonti. È
necessario prevedere allora una serie di meccanismi che unificano tutte le
informazioni in un’unica struttura, facendo particolare attenzione a quelle
identità digitali le cui informazioni possono arrivare da più fonti. Vediamo
allora quali sono i passi, in generale, da compiere per il consolidamento delle
identità:
1. Analizzare i database esistenti e vedere quali sono autoritativi.
2. Decidere quali informazioni prendere, mantenere ed eventualmente
aggiungere.
3. Consolidare (una persona può essere presente in più fonti) per creare
quella che chiamiamo identità digitale.
4. Tenere aggiornato automaticamente il database unificato.
.
I benefici ottenuti dal sistema dopo il consolidamento dell’identità sono
molteplici:
• I decision makers possono attivare cambiamenti più velocemente (per
esempio aggiungere una nuova risorsa, oppure modificare i privilegi di
accesso ad un gruppo di risorse).
17
• L’evoluzione dei requisiti si riflette nei cambiamenti che devono essere
fatti solo in un posto.
• Secondo EduCause (http://www.educause.edu) i costi di implementazione di nuove risorse sono ridotti del 30 per cento.
• Le decisioni prese si applicano in un punto e si vedono i risultati e le
conseguenze delle decisioni stesse.
• Il logging è consolidato pertanto si possono applicare regole di privacy,
di conservazione dei dati di auditing, si possono fare dei report, si
monitora la sicurezza in modo efficace.
• Si elimina il problema del deprovisioning (disattivazione) relativo alla
gestione delle identità in sistemi disgiunti.
• Si riduce il numero di credenziali da conoscere da parte dell’utente.
• L’organizzazione può modificare più velocemente i diritti di accesso
basandosi sui ruoli.
• Nel processo di garantire che una persona è “quello che dice di essere”
l’istituzione incrementa il suo livello di riservatezza.
Nell’Università di Parma attualmente si ha una situazione in cui alcune
risorse gestiscono in modo centralizzato gli accessi, ma in generale non si ha
una sistema centralizzato, poiché vi sono alcuni sistemi che che hanno una
gestione autonoma degli accessi. I dettagli della situazione attuale vengono
illustrati nel capitolo 4.
L’obiettivo finale dichiarato di una qualsiasi soluzione di IAM è comunque
quello di aumentare la produttività e la facilità d’uso del sistema informatico
da parte degli utenti finali, aumentare il livello generale della sicurezza,
diminuendo i costi associati alla gestione degli utenti e delle loro identità,
dei loro attributi e delle loro credenziali. In sintesi, si vuole fornire uno
strumento che supporti il processo che stabilisce chi ha accesso a quali risorse,
l’assegnazione delle autorizzazioni, la loro modifica o revoca quando necessario,
nonché la gestione del processo stesso ed il monitoraggio delle attività, nel
rispetto delle politiche di sicurezza.
18
2.2
IAM federato
Con il termine federazione si ci riferisce ad un insieme di organizzazioni,
enti o erogatori di servizi che decidono di creare delle relazioni di fiducia
tra loro per potersi scambiare informazioni sulle identità. Spesso si vuole
permettere ad utenti che appartengono ad una certa organizzazione di poter
accedere a servizi di altre organizzazioni che fanno parte di una federazione
comune, per fare questo le organizzazioni devono condividere meccanismi
per lo scambio di informazioni sugli utenti e per la gestione degli accessi
alle risorse che si vogliono condividere all’interno di una federazione. Con
IAM federato intendiamo la gestione delle identità e degli accessi a livello
di federazione, quindi non più limitata ad una singola organizzazione ma una
gestione che prevede il coinvolgimento di un insieme di organizzazioni.
Una AAI1 federata è una infrastruttura che permette ad un utente,
appartenente ad una organizzazione che fa parte di una federazione, di potersi
autenticare e poter accedere ai servizi offerti da altre organizzazioni (oltre
ovviamante alla sua di afferenza) interne alla federazione, utilizzando sempre
le stesse credenziali di accesso. Nella figura 2.3 è illustrata una federazione
senza una AAI: un utente ha una chiave d’accesso differente per ogni servizio
che richieda l’autenticazione, ed ogni organizzazione gestisce l’autenticazione
ai suoi servizi anche per utenti esterni, perciò diventa obbligata a gestire
in proprio anche le identità di utenti di altre organizzazioni, oltre ai suoi.
Con una AAI federata, illustrata in figura 2.4, il processo di autenticazione
viene gestito dalla AAI, in tal modo ogni utente possiede una chiave di
accesso unica valida per ogni servizio, e se un utente deve accedere ad un
servizio di un’organizzazione esterna, il processo di autenticazione viene
gestito dalla AAI, che preleva le informazioni necessarie dall’organizzazione
di appartenenza dell’utente.
Attraverso una AAI federata si riescono ad ottenere vari vantaggi:
• Possibilità di utilizzare sempre le credenziali della propria organizzazione.
• Maggiore privacy e controllo dei propri dati personali, poiché vengono
gestiti solamente dall’organizzazione di afferenza.
• Informazioni sempre aggiornate.
1
AAI: Authentication and Authorization Infrastructure
19
Figura 2.3: Federazione senza AAI.
• Minore carico amministrativo per la gestione delle identità e delle
credenziali.
• Più controllo sui sistemi di autenticazione e autorizzazione, quindi
maggior sicurezza.
• Scambio di informazioni e contenuti tra i “soci” più semplice.
• Accesso alle risorse online da ovunque all’interno della federazione.
Un sistema software, sempre più diffuso, che permette di implementare
una AAI federata è Shibboleth (che verrà ripreso più avanti), che però è
limitato solamente ad applicazioni WEB.
2.3
Identità e ciclo di vita dell’identità
Vediamo ora una definizione dettagliata di identità e cos’è il ciclo di
vita dell’identità.
20
Figura 2.4: Federazione con AAI.
2.3.1
Identità
L’identità digitale è l’insieme delle informazioni mantenute nel sistema
informatico che rappresentano un’entità che accede alle risorse concesse dal
sistema informatico stesso. Un’identità digitale è composta da:
• Dati anagrafici, ovvero le informazioni che descrivono l’entità associata e la identificano rispetto alla realtà. Queste informazioni possono
subire cambiamenti, ma in modo indipendente dai cambiamenti dell’entità rispetto all’organizzazione. Dati anagrafici possono essere cognome,
nome, data di nascita.
• Attributi, ovvero l’insieme delle informazioni sull’entità relative all’organizzazione, suddivisibili in:
– Ruoli istituzionali
– Incarichi
– Attributi per l’accesso (privilegi)
– Appartenenza a gruppi
21
• Credenziali di accesso, per esempio username e password, oppure
un certificato digitale. Utilizzate per accedere alle risorse informatiche,
possono cambiare per volontà dell’utente (ad esempio il cambio della
password) o in casi straordinari (ad esempio lo smarrimento di tali
credenziali).
Dalla definizione di identità data in precedenza si può notare che non è
escluso che utente possa avere più di un’identità digitale all’interno di un
sistema informatico, poiché il termine “entità” è molto generico ed un utente
potrebbe rappresentare più entità. La non univocità comporta, dal punto
di vista dell’utente, più account, quindi più credenziali, ma soprattutto, da
parte del sistema, comporterebbe una disastrosa gestione delle informazioni
riguardanti gli utenti in termini soprattutto di coerenza dei dati, per esempio
le modifiche apportate ad una identità dovrebbero essere propagate a tutte le
altre identità di quell’utente. Diviene quindi fondamentale trovare un gruppo
di attributi che da soli possano identificare senza ambiguità ogni utente, in
modo da potersi riferire a tale utente sempre attraverso tali attributi detti
chiave, creando in questo modo un’identità digitale unica per ogni utente.
2.3.2
Ciclo di vita delle identità
Un’identità, una volta entrata nel sistema, non rimane immutata per
sempre, ma può, ed in un sistema come quello universitario molto rapidamente,
subire dei cambiamenti a causa di alcune operazioni:
• Creazione di nuovi utenti ed assegnazione delle credenziali.
• Modifiche delle credenziali.
• Modifiche degli attributi a causa di promozioni, trasferimenti o in
generale cambi di ruoli.
• Cancellazione account.
La gestione del ciclo di vita delle identità comprende i processi e le
tecnologie che consentono l’implementazione, l’annullamento dell’implementazione, la gestione e la sincronizzazione di identità digitali. La riuscita della
gestione delle identità e dell’accesso si basa soprattutto sull’efficienza della
gestione del ciclo di vita delle identità digitali.
22
Figura 2.5: Ciclo di vita dell’identità.
L’insieme delle operazioni di amministrazione che portano alla definizione
degli account utente e all’attribuzione dei diritti di accesso in base al ruolo,
prende il nome di User Provisioning; una buona soluzione di IAM introduce
un sistema di gestione centralizzata di tutto il processo di amministrazione.
2.4
Accesso: autenticazione e autorizzazione
La gestione dell’accesso alle risorse è l’argomento principale di questo
testo, definiamo allora con precisione il significato di accesso. Con accesso
ad una risorsa si indica l’insieme delle operazioni di autenticazione e autorizzazione effettuate dal sistema informatico che permettono ad un utente
di utilizzare una risorsa resa disponibile dal sistema stesso.
Si presume quindi che un utente, per effettuare l’accesso ad una risorsa,
si identifichi presso il gestore di tale risorsa, il quale registra l’utente e gli
fornisce delle credenziali. L’utente utilizzerà le credenziali fornitegli per
accedere alla risorsa.
2.4.1
Autenticazione degli utenti
L’autenticazione è il processo che verifica l’identità di un utente in
modo da poter correttamente permettere o negare l’accesso a risorse condivise
e protette. Di fatto, tramite l’autenticazione, si associa un’utente con la
sua identità digitale presente nel sistema. Le tecniche di autenticazione
possono spaziare dal semplice login con username e password a meccanismi
più complessi e forti come token, certificati digitali a chiave pubblica o sistemi
23
biometrici. Una soluzione di IAM deve pertanto essere indipendente dal
meccanismo di autenticazione utilizzato in modo da potersi adattare ad ogni
specifica realtà tecnologica.
2.4.2
Autorizzazione
L’autorizzazione è il passo successivo dopo che un utente è stato autenticato. È il processo che consente l’accesso alle risorse solamente a coloro che
hanno i diritti di usarle. Durante l’autorizzazione vengono quindi valutati i
privilegi dell’identità digitale associata all’utente autenticato e viene consentito, limitato oppure impedito l’accesso alla risorsa, applicando opportune
regole stabilite in precedenza. In ambito universitario si può pensare, a
titolo d’esempio, ad una applicazione WEB per gestire gli esami: studenti
e professori si possono autenticare entrambi a questa risorsa, ma durante il
processo di autorizzazione si distinguono studenti da professori, ed i primi
potranno effetturare l’iscrizione agli esami, mentre i secondi potranno aggiungere, modificare o eliminare gli esami inseriti, ma chiaramente non dev’essere
possibile il contrario.
2.5
Implementare un server IAM
Nel paragrafo 2.1 abbiamo parlato di sistema IAM centralizzato,
descrivendo cos’è, a cosa serve e quali vantaggi porta, ma non ci siamo
soffermati su come sia possibile implementarlo realmente. Trattandosi di un
sistema centralizzato è evidente che sia necessaria una infrastruttura centrale
alla quale riferirsi, questa infrastruttura, indipendentemente da come poi
venga implementata, è il server IAM.
Un server IAM è una infrastruttura che permette di gestire e mantenere le
informazioni sulle identità digitali degli utenti in un unico punto centralizzato,
ed alla quale si riferiscono le risorse ed i servizi che fanno uso di queste
informazioni, ad esempio per gestire l’autenticazione e l’autorizzazione. Un
server IAM deve avere una serie di caratteristiche basilari:
• Deve memorizzare e mantenere grandi quantità di informazioni
dando la possibilità di organizzarle mediante schemi e attributi.
• Deve essere sicuro rispetto a problematiche di safety e di security,
quindi deve avere una serie di meccanismi per assicurare che i dati non
24
Figura 2.6: Server IAM.
vengano persi in caso di malfunzionamenti o guasti accidentali (safety)
e che non possano essere letti da persone malintenzionate (security).
• Deve essere affidabile, ovvero deve garantire la continuità di servizio,
rispettando le specifiche di funzionamento nel tempo.
• Deve essere performante nelle operazioni di lettura e nelle interrogazioni, poiché costituiscono la maggior parte di operazioni che vengono
effettuate su di esso.
• Deve essere possibile interfacciarlo, in modo relativamente semplice,
con le tecnologie di accesso che leggono le informazioni memorizzate, e
con procedure automatiche per l’inserimento dei dati provenienti dalle
fonti.
Eistono principalmente due strumenti che possiedono le precedenti caratteristiche: LDAP oppure i DBMS. Nei successivi paragrafi vengono
descritti entrambi e, come si vedrà, ognuno ha caratteristiche più o meno
marcate. È possibile utilizzarli singolarmente per implementare un server
25
IAM, ma una buona soluzione, come si potrà vedere più avanti nel progetto,
può essere quella di utilizzarli entrambi, in modo congiunto, sfruttando le
migliori caratteristiche di entrambi.
Di seguito non si vuole dare una spiegazione esaustiva dei due argomenti,
ma semplicemente introdurre i concetti che vengono poi ripresi all’interno
del progetto. Per una descrizione completa e accurata di LDAP e DBMS si
rimanda a testi specifici.
2.5.1
LDAP
LDAP (Lightweight Directory Access Protocol) è sostanzialmente
un protocollo di gestione e accesso a directory service. Un directory service
(servizio di directory) è utilizzato per associare nomi ad oggetti, dove ogni
oggetto è caratterizzato da una serie di attributi costituiti da una coppia nome
- insieme di valori. I directory service sono ottimizzati per effettuare ricerche
di oggetti, ricerche che possono avvenire in base al nome dell’oggetto, ma
anche per il valore di un dato attributo. In genere gli oggetti di un directory
service rappresentano un elemento dell’ambiente in cui viene utilizzato il
servizio, per esempio un utente, un computer, una stampante o una rete, ed
ogni oggetto conterrà una serie di attributi che servono per descrivere ciò
che rappresenta. Una directory è quindi un insieme di oggetti, e un directory
service è un servizio che ha lo scopo di gestire gli oggetti di una directory ed
effettuare ricerche su di essi.
In LDAP le informazioni vengono organizzate in modo gerarchico, in una
struttura ad albero, dove ogni nodo rappresenta un oggetto, chiamato entry.
Figura 2.7: Esempio di un albero delle entry (DIT).
L’albero delle entry è chiamato anche DIT (Directory Information Tree).
Ogni entry del DIT è identificata univocamente dal suo DN (Distinguished
Name), composto dalla concatenazione dei nomi dei suoi antenati fino alla
radice (figura 2.8).
26
Figura 2.8: Distinguished name (DN) di una entry.
Ogni entry è costituita da un insieme di coppie attributo-valore. L’attributo speciale ObjectClass definisce la struttura della entry, cioè quali
attributi sono presenti e quali di questi sono obbligatori (devono per forza
contenere un valore). Una object class è un insieme di attributi che hanno,
in genere, un significato comune. Per esempio l’object class person ha un
insieme di attributi che servono per descrivere una persona, come il nome,
il cognome o il numero di telefono. Nella definizione di una object class è
possibile indicare quali attributi sono obbligari e quali invece sono facoltativi.
Il valore dell’attributo speciale ObjectClass in una entry dev’essere il nome
di una object class, e la struttura della entry sarà composta dagli attributi
definiti in tale object class. La struttura di ogni entry è indipendente dagli
altri oggetti e dalla posizione in cui si trova nell’albero.
Figura 2.9: Possibile struttura di una entry.
27
Attributi
LDAP utilizza la sintassi X.500 per la definizione degli attributi. Per ogni
attributo sono specificati:
• OID (Object IDentifier): numero identificativo dell’attibuto, assegnato
gratuitamente da IANA.
• Nome: nome identificativo dell’attributo, con eventuali alias di seguito.
• Significato: breve descrizione dell’utilizzo dell’attributo.
• Sintassi: numero identificativo standard della sintassi utilizzata per il
valore dell’attributo.
• Regole di confronto: regola con cui confrontare il valore dell’attributo
in caso di ricerca.
• Molteplicità: indica se è possibile memorizzare più di un valore nell’attributo.
Due possibili definizioni di attributi sono le seguenti:
attributetype ( 2.5.4.4 NAME ( ’sn’ ’surname’ )
DESC ’RFC2256: last (family) name(s)
for which the entity is known by’
SUP name )
attributetype ( 2.5.4.5 NAME ’serialNumber’
DESC ’RFC2256: serial number of the entity’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.44{64} )
Il primo utilizzato per contentere il cognome di una persona, il secondo
per un eventuale numero di serie dell’entità rappresentata dalla entry.
Object class
Anche per la definizione delle object class viene utilizzata la sitassi X.500.
Per ogni object class sono specificati:
28
• OID: numero identificativo della classe, assegnato gratuitamente da
IANA.
• Descrizione: breve descrizione del significato dell’object class.
• Categoria: può essere abstract, auxiliary oppure structural. Ogni entry
deve avere almeno una object class structural, e non può avere solo
object class auxiliary. Una object class abstract invece può essere usata
solamente per derivare altre object class.
• Attributi obbligatori: elenco di attributi che devono esistere nella entry.
• Attributi opzionali: elenco di attributi che possono esistere nella entry.
Due possibili definizioni di object class:
objectclass ( 2.5.6.2 NAME ’country’
DESC ’RFC2256: a country’
SUP top STRUCTURAL
MUST c
MAY ( searchGuide $ description ) )
objectclass ( 2.5.6.3 NAME ’locality’
DESC ’RFC2256: a locality’
SUP top STRUCTURAL
MAY ( street $ seeAlso $ searchGuide $ st $
l $ description ) )
Schema
Uno schema è un insieme di definizioni di attributi e object class. Esistono
alcuni schemi standard, per esempio RFC4519, ma in generale è possibile
definire un proprio schema personalizzato.
Alcune organizzazioni realizzano e promuovono i loro schemi in modo da
standardizzare l’utilizzo di alcuni attributi comuni e favorire la realizzazione
di strutture federate, per esempio Internet2 ha realizzato lo schema eduPerson,
utilizzabile per descrivere le persone in ambiente universitario.
29
LDIF
LDIF (LDAP Data Interchange Format) è un formato standard per
rappresentare le informazioni contenute in una directory in un file di testo. È
utilizzato per importare, esportare o modificare i dati di un directory service.
Un file LDIF è composto da un’insieme di entry semparate da linee vuote.
Per ogni entry vengono rappresentati gli attributi nella forma “nome attributo:
valore”. Il seguente esempio rappresenta due differenti entry in formato LDIF:
dn: cn=giorgio,ou=people,dc=organization,dc=it
cn: giorgio
objectClass: person
objectClass: inetOrgPerson
objectClass: posixAccount
mail: [email protected]
telephoneNumber: +3905219029850
dn: cn=giovanni,ou=people,dc=organization,dc=it
cn: giovanni
sn: verdi
objectClass: person
objectClass: inetOrgPerson
objectClass: posixAccount
mail: [email protected]
Access Control List
In un server LDAP sono spesso contenuti dati riservati o comunque dati
a cui va limitato l’accesso. Per fare questo è possibile definire delle ACL
(Access Control List), mediante le quali si possono gestire le autenticazioni al
server stesso, andando a reperire le informazioni di autenticazione (in genere
username e password) dalle entry che rappresentano gli utenti. È possibile
anche definire le modalità di accesso (lettura o scrittura) e la granularità,
dall’intera directory al singolo attributo.
Vantaggi di LDAP
Un directory service LDAP è particolarmente adatto per implementare
una infrastruttura centralizzata per la gestione delle identità: permette di
30
rappresentare facilmente gli utenti e i loro attributi, la struttura basata su
schemi è facilmente estendibile e modificabile, è un servizio ottimizzato per
le letture e le ricerche che costituiscono sicuramente la maggior parte delle
operazioni in questo tipo di infrastrutture, ed è ormai supportato da tutte le
principali tecnologie per la gestione dell’accesso. Inoltre è possibile stabilire
connessioni sicure tra client e server con TLS, e definire delle ACL per limitare
l’accesso alle informazioni mantenute nel server. LDAP è quindi un’ottima
soluzione, ha vantaggi notevoli anche in termini di sicurezza, è sempre più
diffuso e stà diventando ormai uno standard nella gestione centralizzata degli
utenti.
Per quanto riguarda le implementazioni di server LDAP, ne esistono
diverse, fra quelle proprietarie ricordiamo DSEE (Directory Server Enterprise
Edition) di SUN, eDirectory di Novell e Active Directory di Microsoft, mentre
le più diffuse implementazioni libere sono Fedora Directory Server, OpenDS,
Apache DS e OpenLDAP.
2.5.2
Database e DBMS
Il termine database (detto anche banca dati o base di dati) indica un
archivio di dati e informazioni, strutturato in modo tale da consentire la
gestione dei dati stessi (l’inserimento, la ricerca, la cancellazione ed il loro
aggiornamento) da parte di applicazioni software.
Informalmente e impropriamente, la parola database viene spesso usata
come abbreviazione di Data Base Management System (DBMS), che
si riferisce invece a una vasta categoria di sistemi software che consentono
la creazione e la manipolazione efficiente di database. Più precisamente
un DBMS lo si può definire come un sistema software in grado di gestire
grandi collezioni di dati in modo condiviso, assicurando la loro persistenza,
affidabilità e privatezza. Come ogni prodotto informatico, un DBMS deve
essere efficente ed efficace. Un database è quindi una collezione di dati gestita
da un DBMS.
Vediamo nei dettagli le caratteristiche di database e DBMS:
• I database possono essere grandi, nel senso che possono essere di dimensioni molto superiori alla memoria centrale, di conseguenza i DBMS
devono prevedere una gestione dei dati in memoria secondaria.
31
• Un database può essere condiviso nel senso che applicazioni diverse
possono accedere, secondo opportune modalità, a dati comuni. Attraverso la condivisione si possono ridurre le repliche dei dati, infatti le
applicazioni possono accedere ad un database comune e condiviso senza
necessità di mantenersi una copia dei dati, in questo modo si evitano le
incosistenze.
• I database sono persistenti, cioè hanno un tempo di vita che non è
limitato a quello delle singole esecuzioni dei programmi che li utilizzano.
• I DBMS garantiscono l’affidabilità, cioè la capacità del sistema di
conservare intatto il contenuto del database (o almeno di permetterne
la ricostruzione) in caso di malfunzionamenti harware e software.
• I DBMS garantiscono la privatezza dei dati, dando la possibilità di
impostare meccanismi di autenticazione e autorizzazione al DBMS
stesso.
• Per efficenza intendiamo la capacità di svolgere le operazioni utilizzando
un insieme di risorse (tempo e spazio) che sia accettabile. I DBMS
forniscono un insieme piuttosto ampio di funzionalità che richiedono
molte risorse, e quindi possono garantire efficenza solo a condizione
che il sistema informatico su cui sono installati sia adeguatamente
dimensionato.
• Per efficacia intendiamo la capacità dei database di rendere produttive,
in ogni senso, le attività di chi le utilizza. Questa definizione è abbastanza generica poiché esistono diversi DBMS che offrono funzionalità
differenti. L’attività di progettazione del database e delle applicazioni
che lo utilizzano mira essenzialmente a garantire una buona efficacia
del sistema.
Attualmente esistono molte implementazioni di DBMS. Limitando l’attenzione ai database relazionali2 , quindi agli RDBMS, che sono senza dubbio i
più diffusi e quelli utilizzati nel nostro progetto, citiamo le tre implementazioni più famose: Oracle, MySQL e PostgreSQL. Il primo è un sistema chiuso,
2
Il modello relazionale è un modello logico di rappresentazione dei dati implementato
sui DBMS, detti perciò sistemi di gestione di database relazionali (RDBMS). Esso si basa
sull’algebra relazionale e sulla teoria degli insiemi ed è strutturato attorno al concetto di
relazione (detta anche tabella).
32
con costi di licenza molto alti, che ha presentato in passato vari problemi
in termini di sicurezza, ma resta il più diffuso nelle grandi organizzazioni.
MySQL e PostgreSQL sono invece due progetti open-source, il primo è un
sistema semi-aperto mentre PostgreSQL è un sistema completamente aperto,
entrambi non hanno costi di licenza e, nonostante non costino nulla, sono due
ottimi RDBMS, in continuo sviluppo e supportati da due grandi comunità.
Vantaggi dei DBMS
Concludiamo con un breve riassunto dei vantaggi di database e DBMS:
• I DBMS permettono di considerare i dati come una risorsa comune di
una organizzazione, a disposizione (con opportune forme di controllo)
di tutte le sue componenti.
• I database forniscono un modello unificato e preciso della parte del mondo reale di interesse per l’organizzazione, utilizzabile nelle applicazioni
attuali e, con possibili estensioni, in applicazioni future.
• Con l’uso di un DBMS è possibile un controllo centralizzato dei dati.
• La condivisione permette di ridurre ridondanza e inconsistenze.
• L’indipendenza dei dati, caratteristica fondamentale dei DBMS, favorisce lo sviluppo di applicazioni più flessibili e facilmente modificabili.
L’importanza che i dati (e quindi le informazioni) vengano gestiti nel
modo più corretto, efficace ed efficente possibile è ovviamente fondamentale
per una qualunque organizzazione (ed in particolar modo per un’università)
dove vi è la necessità di gestire un elevato numero di utenti, garantendo che il
sistema informatico funzioni praticamente sempre e non si vuole che vi siano
inconsistenze o errori sui dati.
33
34
Capitolo 3
Gestione dell’accesso
3.1
Cosa significa gestire l’accesso
La gestione dell’accesso è quella parte del sistema IAM che si occupa
di fornire una soluzione al problema dell’autenticazione e dall’autorizzazione
degli utenti ad ogni risorsa del sistema informatico, prelevando le informazioni
necessarie dalla parte del sistema IAM che gestisce le identità digitali.
Gestire l’accesso di un sistema informatico significa quindi trovare una
tecnologia appropriata, o un insieme di tecnologie, che permetta di fornire
l’accesso ad ogni risorsa informatica. Nel progetto di questo documento si
vuole realizzare una gestione centralizzata dell’accesso, percui un sistema in
cui le identità digitali degli utenti e le loro credenziali di accesso vengono
mantenute in un’unica infrastruttura centralizzata (il server IAM), e la
gestione dall’accesso di ogni risorsa preleva le informazioni necessarie da questa
infrastruttura. L’esempio più semplice è avere una sola risorsa all’interno
del sistema informatico e voler permettere agli utenti di accedervi dopo
l’inserimento di username e password; tutti gli username e le password degli
utenti sono mantenuti nel server IAM, quando un utente prova ad accedere
alla risorsa, questa li preleva e li confronta con quelli inseriti dall’utente al
momento dell’autenticazione, per consentire o negare l’accesso alla risorsa. La
parte in cui viene stabilito che per accedere alla risorsa è necessario inserire
username e password, la scelta di mantenere le credenziali in un server IAM
e la modalità con cui queste vengono prelevate, fanno parte della gestione
dell’accesso. Ovviamente con una sola risorsa non si apprezza la scelta del
server IAM, il progetto consiste nell’estendere il ragionamento a più risorse
35
non omogenee, senza stabilire a priori un metodo di autenticazione.
Nei due paragrafi successivi vengono definiti meglio i concetti di risorsa
informatica e tecnologia, dando degli esempi reali di entrambi.
3.2
Le risorse informatiche
Con il termine risorsa informatica (o brevemente risorsa) intendiamo
un componente fisico o virtuale del sistema informatico dell’organizzazione,
reso disponibile ad un insieme di utenti registrati, ovvero di cui si conosce
l’identità. Esempi di risorse sono la posta elettronica, un computer oppure
una rete locale.
Di seguito vengono introdotte le principali risorse informatiche, disponibili
all’interno di praticamente ogni università. Con una gestione delle identità e
dell’accesso appropriata si può fare in modo che l’utente finale possa accedere
a tutte le risorse descritte di seguito utilizzando sempre le stesse credenziali
di accesso, indipendentemente dai ruoli ricoperti.
Nel paragrafo successivo (3.3) vengono illustrate le tecnologie per gestire
l’accesso alle risorse informatiche.
3.2.1
WiFi
In molte realtà può essere comodo, se non indispensabile, accedere alla
rete locale e alla rete Internet senza essere costretti ad attaccare un cavo al
computer; basti pensare ai luoghi all’aperto nei quali si vuol dare la possibilità
di arrivare con il proprio portatile, accenderlo ed essere immediatamente
connessi alla rete, oppure negli edifici storici dove diventa impossibile, non
potendo toccare la struttura dell’edificio, stendere una rete con cavi, ma
anche semplicemente in una università, per permettere ad ogni studente con
un portatile (ma anche con cellulari o palmari che supportano l’accesso alla
rete) di poter accedere alla rete universitaria da ogni aula di studio senza
dover stendere cavi di rete in ogni stanza, oltretutto risparmiando anche sul
costo dei cavi e dell’impianto. Tutto questo è possibile attraverso una LAN
wireless (indicata anche con la sigla WLAN), ovvero una rete locale “senza
fili”.
La tecnologia wireless si sta difondendo rapidamente soprattutto per la
possibilità di fornire servizi di rete ad un costo ridotto, in quanto supera
la necessità di costruire fisicamente una rete cablata; il successo di questa
36
tipologia di rete è sicuramente dovuto alle buone prestazioni raggiunte (fino
a 54 Mbps), che le permettono di competere con una economica rete cablata.
Siccome è molto importante che tutti i dispositivi wireless siano compatibili, altrimenti potrebbe succedere che un portatile con una scheda wireless
di una certa marca non possa accedere ad una WLAN perché la stazione
base è di un’altra marca, il comitato IEEE ha creato lo standard 802.11 per
questo tipo di reti, chiamato anche WiFi (Wireless Fidelity). Lo standard
802.11 può funzionare in due modi:
1. Con stazione base (rete strutturata).
2. Senza stazione base (rete ad hoc).
Nel primo caso tutte le comunicazioni passano attraverso la stazione
base, chiamata access point (AP), mentre nel secondo caso i computer
comunicano direttamente tra di loro. Il modo con stazione base è sicuramente
il più utilizzato quando si deve implementare una rete locale permanente, e
unire ad una rete cablata i vantaggi del WiFi; il modo senza stazione base è
invece, in genere, usato per lo scambio di file (con una connessione modello
peer to peer) o quando si necessita di una piccola rete per breve tempo (ad
esempio per riunioni, convegni, stand o dimostrazioni).
Una rete wireless può quindi essere l’estensione ad una normale rete
cablata, supportando, tramite access point, la connessione a dispositivi
mobili (computer portatili con scheda di rete wireless o palmari predisposti).
In generale le architetture di questo tipo sono basate su due tipologie di
dispositivi (figura 3.1):
• Access Point (AP)
• Wireless Terminal (WT)
Gli access point funzionano da bridge e collegano la sottorete wireless con
quella cablata, mentre i wireless terminal sono i dispositivi che usufruiscono
del servizio di rete wireless. In modo simile ad una rete cellulare è possibile
all’interno di una WLAN il roaming tra access point (figura 3.2), ovvero la
sovrapposizione di una parte di segnale tra due AP in modo da suddividere
lo spazio in celle (chiamate anche BSS, Basic Service Set), ognuna gestita da
un AP.
37
Figura 3.1: Schema di una rete wireless collegata ad una rete wired
Quando un WT viene acceso in una WLAN, all’interno di una cella gestita
da un AP, per prima cosa effettua lo scanning, ovvero cerca di ottenere
informazioni per connettersi all’AP. Lo scanning può essere di due tipi:
• Scanning passivo: ogni AP trasmette periodicamente il suo SSID1
(Service Set IDentifier, è il nome identificativo di una rete WiFi); il WT
si mette in ascolto per catturare un SSID e poter quindi effettuare la
connessione all’AP.
• Scanning attivo: il WT invia pacchetti sonda (Probe Packets) contenenti
il SSID dell’AP; quando un AP riceve uno di questi pacchetti controlla
se il SSID coincide con il suo, in tal caso invia al WT un pacchetto
di risposta contenente una serie di informazioni per associarsi all’AP,
altrimenti ignora il pacchetto ricevuto.
A volte viene utilizzato proprio il SSID come metodo di gestione dell’accesso ad una rete WiFi: attraverso lo scanning attivo si mantiene il SSID
nascosto, e solamente chi lo conosce (si presuppone solo utenti fidati) può
associarsi all’access point. È però evidente che questo non è un metodo sicuro,
che al massimo può evitare che un utente si connetta “accidentalmente” alla
rete, basta infatti catturare un paio di pacchetti di una trasmissione WiFi
per estrapolarne il SSID e riuscire così a connettersi all’access point.
1
In realtà viene spedito un pacchetto di sincronizzazione, chiamato Beacon Frame, che
contiene diverse informazioni sull’AP oltre al SSID.
38
Figura 3.2: Roaming tra access point
3.2.2
VPN
Una VPN (Virtual Private Network) è una rete privata che sfrutta
infrastrutture pubbliche, come Internet, per interconnettere diverse reti o
computer tra loro. Le VPN più utilizzate sono ovviamente quelle che sfruttano
la rete Internet, queste infatti permettono, a chiunque abbia un collegamento
DSL, di poter creare una rete privata anche tra host geograficamente molto
distanti tra loro. Esistono due tipi di VPN: site-to-site e remote access.
Le site-to-site sono VPN instaurate tra due reti, per esempio tra due sedi
distaccate di una stessa azienda per le quali si vuole usare una rete privata
unica. Con remote access, invece, si intende il collegamento di un singolo
computer ad una rete privata tramite VPN. Siccome in questo testo di vuol
parlare di risorse per gli utenti, quando si parla di VPN si ci riferisce solamente
a quast’ultima modalità.
Figura 3.3: Remote Access VPN su rete Internet
39
Una VPN permette quindi ad un utente con un collegamento a Internet di
connettersi ad una rete privata come se si trovasse fisicamente al suo interno.
Questo viene fatto creando un tunnel virtuale nella rete pubblica nel quale
viene trasportato il traffico di rete come se si trattasse di un collegamento
fisico (figura 3.3). Il tunnel è fatto con protocolli che impacchettano (e in
genere cifrano) il frame che dovrebbe viaggiare nella rete privata, lo portano
da un estremo all’altro della connessione VPN attraverso la rete publica, e lo
spacchettano nella rete privata in modo trasparente per l’utente e per la rete
privata.
È evidente che una VPN che si appoggia ad Internet deve prevedere
sistemi di crittografia per garantire l’integrità e l’autenticità dei pacchetti
trasmessi e che i dati restino privati e indecifrabili durante il tragitto in
Internet, e metodi sicuri di autenticazione per impedire che utenti sconosciuti
possano accedere ad una rete privata.
3.2.3
Posta elettronica
La posta elettronica (o e-mail) è, con ogni probabilità, la risorsa
informatica più utilizzata dagli utenti. Permette di scrivere e ricevere messaggi
digitali di praticamente ogni formato, non solo testo. Ciascun utente può
possedere una o più caselle e-mail, su cui può ricevere messaggi che vengono
conservati. Quando lo desidera, l’utente può consultare il contenuto della
sua casella, organizzarlo, inviare messaggi a uno o più utenti. L’accesso
alla casella di posta elettronica dev’essere ovviamente controllato da qualche
forma di autenticazione, soprattutto quando l’accesso alle caselle di posta
può avvenire tramite Internet.
I componenti fondamentali del servizio di posta elettronica sono:
• Il client (MUA, Mail User Agent), utilizzato per accedere ad una casella
di posta elettronica e per inviare messaggi.
• Il server, che svolge due funzioni fondamentali: invia e recapita i
messaggi (MTA, mail transfer agent), e permette ad un client di accedere
e gestire la propria casella di posta (MAA, mail access agent).
I protocolli tipicamente impiegati per lo scambio di e-mail sono SMTP, usato
per l’invio, la ricezione e l’inoltro dei messaggi, e POP o IMAP, usati per la
ricezione e consultazione dei messaggi.
40
Il client può essere una applicazione (ad esempio Thunderbird) opportunamente configuarata per accedere al server di posta, ma è anche molto
diffusa la possibilità di consultare una casella e-mail attraverso il web.
3.2.4
Risorse web
Con risorse web intendiamo tutte le risorse accessibili attraverso un
browser web. Sotto questa categoria possono finire le più svariate risorse,
come iscrizioni on-line ad esami, forum o accesso alla casella e-mail. Questa
diffusione è dovuta ai diversi vantaggi che hanno le applicazioni web:
• Basta semplicemente un browser web per poterle utilizzare, senza dover
installare nessuna ulteriore applicazione, il che le rende indipendenti
dal sistema operativo utilizzato dal lato del client.
• Chiunque, con una connessione a Internet, ne può usufruire. Da
un computer, ma anche con cellulari o palmari, in qualunque luogo
geografico.
• Sono molto scalabili in termini di servizi e prestazioni, infatti si possono
modificare, il server può essere aggiornato o ingrandito, il tutto senza
“toccare” il client.
• Il continuo sviluppo di nuove tecnologie web porta sempre più in alto
le potenzialità di queste applicazioni.
Grazie a questi vantaggi ormai buona parte delle risorse informatiche
disponibili in una università sono risorse web. Diventa chiaramente fondamentale gestirne l’accesso, e che questa gestione sia particolarmente robusta e
sicura, per via della semplicità con cui si può accedere a queste risorse, e per la
riservatezza che molte di queste risorse devono garantire, ad esempio l’accesso
alla casella e-mail deve essere autenticato e possibilmente la trasmissione
dev’essere cifrata.
3.2.5
Postazioni computer
Altre risorse, ormai indispensabili in ogni università, sono le postazioni
computer, ovvero dare ad un utente la possibilità di accedere ad un PC, per
avere un suo spazio di memoria fissa dove gestire dei propri dati, per consentire
l’utilizzo di applicativi software specifici resi disponibili dall’università, per
41
svolgere laboratori informatici, ma anche, semplicemente, per dare l’accesso
ad Internet o alle risorse precedentemente illustrate.
La gestione dell’accesso ai PC si può suddividere in base al sistema
operativo: in genere i più utilizzati sono windows e linux, per i quali, come si
vedrà in seguito, si devono utilizzare metodi e tecnologie di accesso differenti.
3.3
Soluzioni e tecnologie per l’accesso
Una tecnologia è una soluzione, software, hardware o anche semplicemente concettuale, ad un certo problema. Di seguito vengono illustrate le
tecnologie per l’accesso, ovvero le tecnologie che risolvono il problema
dell’accesso, cioè che permettono di gestire l’autenticazione e l’autorizzazione
alle risorse informatiche.
3.3.1
Username e password
La prima soluzione per gestire l’accesso ad una risorsa, la più semplice,
ma anche la più diffusa, è senza dubbio la coppia username-password.
Lo username definisce il nome con il quale l’utente viene riconosciuto
all’interno del sistema informatico, dev’essere quindi un nome identificativo
e univoco. Come venga stabilito dipende dal sistema in cui si ci trova, può
essere deciso dall’utente al momento della registrazione, oppure, per motivi
di chiarezza e coerenza, può essere composto dall’organizzazione stessa, ad
esempio dalla sequenza nome.cognome.
Una password è una sequenza di caratteri alfanumerici che, assieme allo
username, rappresenta le credenziali di accesso per una risorsa informatica.
Mentre lo username è un nome pubblico, con cui si viene riconosciuti nel
sistema, la password dovrebbe rimanere segreta, addirittura non dovrebbe
neanche essere mantenuta nel sistema stesso, ma dovrebbe essere mantenuta
una copia criptata con un algoritmo hash (ad esempio MD5) in modo da
poterla confrontare con la password originale al momento dell’autenticazione,
ma non di poter risalire ad essa. La password si riconosce nel paradigma di
autenticazione “qualcosa che sai”.
L’autenticazione con username e password non è sicuramente fra i metodi più sicuri poiché lo username è un nome conosciuto e la password è
una semplice sequenza di caratteri che può essere, più o meno facilmente,
individuata. Per evitare questo, un’organizzazione può stabilire una serie di
42
politiche di gestione delle password per rendere il sistema informatico più
sicuro, ad esempio può obbligare gli utenti a scegliere password complicate
e a cambiarle periodicamente. Alcune norme elementari di sicurezza per la
scelta della password sono le seguenti:
• Nel determinare una password è da evitare l’uso di parole ovvie (come
il proprio nome o cognome o altri dati anagrafici), di senso compiuto
o direttamente associabili all’account (come l’username stesso) come
anche di parole troppo brevi (di solito per le password viene stabilito un
numero minimo di caratteri dal momento che all’aumentare del numero
di caratteri aumenta esponenzialmente il numero delle disposizioni
possibili).
• È preferibile utilizzare una password complessa e sforzarsi di memorizzarla piuttosto che sceglierne una di facile memorizzazione ma di più
facile determinazione.
• È da evitare l’utilizzo di parole presenti nei dizionari, come anche
anagrammi o combinazioni delle stesse (tale tipo di password sono quelle
più facilmente attaccabili mediante attacchi a forza bruta), mentre è
consigliabile utilizzare combinazioni del maggior numero possibile di
“tipi” di caratteri: maiuscoli, minuscoli, numeri e caratteri speciali.
• È buona norma variare le password utilizzate dopo un tempo determinato e non utilizzare la medesima password per più risorse.
3.3.2
Single Sign On
Il Single Sign On (SSO) è una sistema di autenticazione che prevede
che un utente fornisca le credenziali di accesso una sola volta, dopodiché
possa accedere a tutte le risorse che fanno parte del sistema informatico senza
doversi ri-autenticare.
I benefici sono molteplici, dal punto di vista dell’amministratore, il quale
ha un maggiore controllo sull’accesso che viene concentrato in un solo punto,
e dal punto di vista dell’utente, che non è più costretto ad autenticarsi a
diverse risorse o a ricordarsi una serie di credenziali di accesso differenti.
Grazie a questo ne deriva anche una sicurezza migliore, in quanto l’utente
potrà tenere traccia di una sola password, anche complessa, senza il bisogno
di annotarla su qualche foglietto. Oltre ad essere particolarmente comodo
43
per l’utente è anche molto sicuro, poiché vengono scambiati dati riservati una
sola volta e non ad ogni accesso ad una risorsa.
Questo modello di autenticazione è particolarmente utilizzato nei servizi
web, dove viene molto bene implementarlo attraverso l’utilizzo dei cookie.
Due implementazioni di SSO per risorse web sono CAS e Shibboleth,
quest’ultimo nato soprattutto per supportare anche ambienti federati.
3.3.3
RADIUS
RADIUS (Remote Authentication Dial-In User Service) è un protocollo
di rete utilizzato per controllare e gestire l’autenticazione, l’autorizzazione e
l’accounting a servizi remoti. Questo protocollo, ormai diventato uno standard
de-facto per questo tipo di problemi, è utilizzato da ISP, reti wirless, access
point, VPN e, in generale, da ogni servizio di rete che fornisce un sistema
di AAA (authentication, authorization, accounting). Un server RADIUS ha
quindi tre compiti:
• Autenticazione: consiste nell’identificazione dell’utente; può essere fatta
attraverso username e password, oppure utilizzando il protocollo di
autenticazione EAP che permette diversi altri modi, come certificati
digitali o Kerberos.
• Autorizzazione: dopo aver identificato l’utente il server RADIUS può
stabilire cosa è permesso fare all’utente. Per esempio può stabilire
il tempo o la quantità di servizio erogato, ma anche parametri più
specifici.
• Accountig: dopo il processo di autorizzazione il server RADIUS può
tracciare cosa l’utente stà facendo, mantenendo, per esempio in un
database, un log delle attività dell’utente.
Autenticazione
Il processo di autenticazione tramite un server RADIUS avviene nel
seguente modo:
1. Il client crea ed invia un messaggio Access-Request, contenente la
richiesta di autenticazione con le credenziali di accesso (diverse in base
al protocollo di autenticazione utilizzato).
44
2. Il server riceve il messaggio Access-Request; siccome server e client
devono condividere una chiave segreta comune, se il server RADIUS
non possiede la chiave segreta per il client, ignora “silenziosamente” il
messaggio ricevuto, altrimenti consulta le informazioni degli utenti per
verificarne le credenziali di accesso: se sono valide invia un messaggio
al client in cui conferma l’autenticazione (Access-Accept), se non sono
valide invia un messaggio di errore (Access-Reject).
3. Durante una sessione di autenticazione, in ogni messaggio spedito vi è
un valore identificativo casuale generato in partenza dal client, utilizzato,
insieme al segreto condiviso, per garantire l’autenticità e l’integrità dei
messaggi trasmessi.
4. Quando il client riceve il messaggio di risposta dal server, per prima cosa
ne verifica l’autenticità attraverso l’identificativo e il segreto condiviso,
se la verifica fallisce viene scartato il messaggio, altrimenti il client si
considera autenticato al servizio.
Autorizzazione
Una volta identificato l’utente i suoi dati vengono passati al modulo
di autorizzazione, che deve stabilire cosa l’utente può fare o meno. Ad
esempio, nel caso di una connessione Internet si può stabilire quale indirizzo
IP utilizzare, qual’è la durata massima di una sessione e il traffico massimo
che può essere fatto. Da un punto di vista prettamente di networking
è possibile impostare regole di filtraggio di indirizzi IP, impostazione del
routing, limitazioni di ampiezza della banda, utilizzo di comunicazioni con
crittografia, e tanto altro ancora. È possibile andare a prelevare i dati di
autorizzazione direttamente dai database, rendendo infinite le possibilità di
utilizzo di questo modulo.
Sicurezza
RADIUS supporta diversi metodi di autenticazione; il più semplice è
quello tramite username e password, la password viene cifrata con l’algoritmo
di hashing MD5 utilizzando anche il segreto condiviso, questa soluzione è
molto semplice ma offre un livello di sicurezza non elevato: MD5 (e in generale
tutti gli algoritmi hash) non è considerato un metodo altamente affidabile
45
perché vulnerabile agli attacchi basati su dizionario, ovvero se si riescono
ad intercettare i messaggi di richiesta e risposta si può provare (off-line)
a ripetere l’algoritmo utilizzato da client e server per generare i messaggi,
utilizzando parole di un dizionario come password, fino a quando i messaggi
di richiesta e risposta non coincidono, a quel punto si è trovata la password.
Per avere un livello di sicurezza maggiore si possono utilizzare protezioni
addizionali, come un tunnel IPsec, per cifrare il traffico tra client e server
RADIUS.
Un metodo di autenticazione più sicuro e molto usato è MSCHAPv22 ,
che però utilizza comunque algoritmi di hash per cifrare le password, ma se
integrato con il protocollo MPPE (Microsoft Point-to-Point Encryption) per
la cifratura del traffico raggiunge un buon livello di sicurezza.
Un’alternativa per garantire un elevato livello di sicurezza ed utilizzare
credenziali diverse da username e password, è utilizzare il protocollo EAP
che rende RADIUS capace di lavorare con diversi schemi di autenticazione,
come chiave pubblica, smart-card e Kerberos. Attraverso il protocollo EAP
si può negoziare il metodo di autenticazione, i principali sono i seguenti:
• EAP-MD5: equivalente a CHAP, viene utilizzato l’algoritmo di hash
MD5 e un segreto condiviso. Come già detto MD5 non è considerato
un buon metodo per avere un alto livello di sicurezza perché può essere
vulnerabile ad attacchi di tipo dizionario. È basato su password e
username, ed offre soltanto l’autenticazione lato client (ovvero, il client
viene autenticato alla rete).
• EAP-TLS: attraverso TLS (Transport Layer Security) si può effettuare
l’autenticazione con certificati X.509 lato client. È supportata la mutua
autenticazione (client e server sono reciprocamente sicuri dell’identità
dell’altro), e chiavi di sessione dinamiche. TLS è un’ottima scelta quando si vuole un elevato livello di sicurezza ed è presente una infrastruttura
a chiave pubblica.
• EAP-TTLS: Tunnelled Transport Layer Security (TTLS) è un’estensione del TLS sviluppata per superare la necessità di certificati lato
client (sono invece richiesti certificati lato server). TTLS è un metodo
a due passaggi. Nel primo si crea un tunnel di crittazione simmetrica
2
Microsoft CHAP v2 è un protocollo di autenticazione sviluppato da Microsoft che
deriva direttamente dal CHAP.
46
tra client e server. Il secondo passaggio riguarda la verifica dell’identità
del client utilizzando un’altro metodo di autenticazione all’interno del
tunnel di crittazione simmetrica. Questo secondo metodo di autenticazione, utilizzato con il tunnel, può essere un tipo di EAP (spesso MD5)
o un metodo di vecchio tipo come CHAP o MS-CHAPv2. Il tunnel
a crittazione simmetrica del TTLS è utilizzato solo per proteggere il
metodo di autenticazione del client. Una volta verificato, il tunnel viene
eliminato.
• PEAP: è uno standard aperto ideato da Cisco Systems, Microsoft e RSA
Security, e fornisce un elevato livello di sicurezza. È molto simile a EAPTTLS, richiede solo il certificato lato server e crea un tunnel sicuro
con TLS per proteggere l’autenticazione dell’utente, autenticazione
effettuata utilizzando altri metodi come MS-CHAPv2 (PEAP/EAPMSCHAPv2) basati su username e password.
freeRADIUS
Vale la pena citare freeRADIUS: una implementazione open source di
RADIUS, giunto alla versione 2.1.0, è il più popolare server RADIUS in
circolazione. freeRADIUS offre tutte le funzionalità offerte dai software
commerciali, offre il supporto per LDAP, MYSQL, PostgreSQL, Oracle;
gestisce autenticazioni EAP (EAP-MD5, EAP-SIM, EAP-TLS, EAP-TTLS,
EAP-PEAP), MSCHAP, MSCHAPV2, Cisco LEAP, oltre ai classici PAP e
CHAP.
Diameter
Diameter è il protocollo successore di RADIUS, per ora ancora poco
utilizzato, ma destinato a rimpiazzarlo. È basato su RADIUS, ma non è
compatibile, aggiunge nuove funzionalità in termini di sicurezza, efficenza e
controllo degli errori. Inoltre utilizza TCP, mentre RADIUS utilizza UDP, il
che lo rende più sicuro ed affidabile.
3.3.4
Kerberos
Kerberos è un protocollo di autenticazione sviluppato presso il MIT,
che fornisce un meccanismo per una mutua autenticazione (entrambi sono
47
certi dell’identità dell’altro) tra client e server o tra due server. Il protocollo
assume che le transizioni iniziali tra client e server avverranno in una rete
insicura, anche sotto il monitor di qualche utente malintenzionato, sia essa
una intranet o Internet.
Il sistema di autenticazione Kerberos è composto da tre elementi: il Key
Distribution Center (KDC), l’utente e l’application server (ovvero dove risiede
la risorsa) a cui l’utente vuole accedere. Il KDC svolge due funzioni principali:
l’Authentication Service (AS) e il Ticket Granting Service (TGS).
Figura 3.4: Scambio di ticket per l’autenticazione con kerberos.
Come si può vedere nella figura 3.4, lo scambio di chiavi dell’utente avviene
in tre fasi: AS Exchange, TGS Exchange e Client/Server (CS) Exchange.
Quando l’utente effettua un’autenticazione alla rete, esso deve immettere
username e password in modo da essere verificato dall’AS che fa parte del
KDC. Il KDC interrogherà il suo database di utenza e, una volta verificate le
credenziali dell’utente, rilascia all’utente un Ticket Granting Ticket (TGT). Il
TGT ha una “vita limitata” e può essere rinnovato automaticamente qualora
la sessione utente sia ancora attiva e senza che quest’ultimo reinserisca le
credenziali. Il TGT è mantenuto in memoria nella macchina client e viene
utilizzato per chiedere accesso ad una risorsa. Vediamo in dettaglio lo scambio
per l’ottenimento del TGT. La richiesta dell’AS identifica il client al KDC in
chiaro. Se la preautenticazione è abilitata sull’utente, un time stamp viene
criptato con l’hash della password dell’utente come chiave di crittografia. Se
il KDC, una volta decriptato il time stamp con l’hash della password, lo
identifica come valido, allora il KDC saprà che non si tratta di un attacco
48
a ripetizione. Se il KDC autorizza la richiesta del client all’ottenimento del
TGT, la risposta dell’AS nei confronti del client includerà due sezioni: un
TGT criptato con una chiave che solamente il KDC (TGS) può decriptare
e una chiave di sessione criptata con l’hash della password dell’utente (per
le future comunicazioni con il KDC). Siccome il client non può leggere il
contenuto del TGT, esso dovrà presentarlo così com’è al TGS per avere un
service ticket. Il TGT include parametri time-to-live, autorizzazione, una
chiave di sessione per comunicare con il client e il nome del client/utente.
Ottenuto il TGT, il client lo presenta al TGS (una delle due parti del
KDC) quando vuole accedere ad una determinato risorsa. Il TGS verifica il
TGT dell’utente e crea un ticket e una chiave di sessione sia per il client che
per il server remoto. Queste informazioni, conosciute come Service Ticket,
sono memorizzate localmente sulla macchina del client. Il TGS riceve il
TGT del client e lo legge attraverso la propria chiave. Se il TGS verifica
correttamente la richiesta del client, un Service Ticket vieve generato sia per
il client che per il server su cui l’utente sta tentando di accedere. Il client
legge la sua porzione usando la chiave di sessione del TGS che ha ricevuto
precedentemente durante la risposta dell’AS. Il cliente presenta la porzione
del Service Ticket relativa al server alla risorsa che sta accedendo durante il
Client/Server Exchange.
Una volta che l’utente ha ottenuto il Service Ticket, può stabilire la
sessione con la risorsa disponibile sul server. Il server può decriptare le
informazioni che arrivano direttamente dal TGS usando la propria chiave
stabilita con il KDC. Il Service Ticket è usato quindi per autenticare l’utente
e stabilire una sessione di erogazione servizio tra il server e il client. Dopo che
il time-to-live del ticket è terminato, il Service Ticket deve essere rinnovato
per usare il servizio. Nello specifico, il client passa la porzione relativa al
server del Service Ticket, al server verso cui sta richiedendo il servizio per
ottenere la sessione client/server. Se la mutua autenticazione è abilitata, il
server ritorna un timestamp criptato con la chiave di sessione del Service
Ticket. Se il timestamp viene decriptato correttamente, non solo il client si è
autenticato al server, ma il server si è autenticato con il client. Da notare
che il target server non ha mai comunicato direttamente con il KDC, il che
riduce il carico sul KDC.
49
SSO con Kerberos
Nel paragrafo 3.3.2 abbiamo accennato al fatto che, attraverso CAS o
Shibboleth, è possibile implementare un sistema di SSO per risorse web. Attraverso Kerberos si può invece creare una infrastruttura di SSO tra applicazioni
di rete, come shell remote o posta elettronica. Quindi è possibile accedere ad
un PC immettendo le credenziali di accesso al login, dopodiché accedere a
una serie di applicazioni in rete senza dover rieffettuare l’autenticazione.
Senza entrare nei dettagli implementativi, cui si rimanda a testi specifici,
diciamo che è possibile configurare i sistemi operativi basati su Unix, fra
cui Linux e MacOS X, e Windows (da Windows 2000 in poi) in modo da
effettuare il login appoggiandosi ad un server kerberos per l’autenticazione
dell’utente. In questo modo il sistema operativo, una volta effettuato il login,
avrà un TGT che potrà essere utilizzato da varie applicazioni per accedere a
servizi di rete che supportano l’autenticazione con kerberos, senza rieffetture
il processo di autenticazione, implementando così un sistema di SSO tra
servizi di rete.
Fra i servizi che possono essere configurati per questa forma di SSO ci
sono:
• Accesso ad un sistema unix remoto tramite ssh.
• Accesso ad un servizio web protetto.
• Accesso alla casella di posta.
Kerberos si occupa però solamente dell’autenticazione, e non tutti i servizi lo
supportano. Per tutti gli altri servizi e per mantenere le informazioni sugli
utenti si può utilizzare LDAP. I maggiori server LDAP (fra cui OpenLDAP)
danno la possibilità di reperire la password di un utente tramite Kerberos, in
questo modo si centralizza la gestione delle password nel server Kerberos e si
può utilizzare il server LDAP per mantenere le identità digitali degli utenti,
ma anche per l’autenticazione ai quei servizi che non supportano Kerberos.
3.3.5
Public Key Infrastructure
Una Public Key Infrastructure (PKI) si può definire come l’insieme
dell’hardware, del software, del personale e delle procedure necessarie per
gestire (creare o revocare), immagazzinare e distribuire i certificati digitali
basati sulla crittografia a chiave pubblica.
50
Un certificato digitale è un documento elettronico che attesta, con
una firma digitale, l’associazione tra una chiave pubblica e l’identità di un
soggetto, che può essere una persona, ma anche una società, un software o
qualcos’altro che si possa associare ad un’identità. In genere un certificato
digitale include i dati identificativi del soggetto, un periodo di validità del
certificato stesso, l’URL della lista dei certificati revocati (CRL), la chiave
pubblica del soggetto, il tutto ovviamente firmato (tramite algoritmi di firma
digitale) da una terza parte fidata (La Certification Authority). Lo standard
comune per i certificati, utilizzato anche in Internet, è X.509.
Una PKI è in genere composta dalle seguenti parti:
• Certification Authority (CA): hanno il compito di emettere, consegnare
e revocare i certificati digitali.
• Registration Authority (RA): hanno il compito di verificare il legame
tra le chiavi pubbliche e le identità dei possessori.
• Soggetti o possessori dei certificati: persone, organizzazioni o software
per i quali è stato emesso un certificato digitale.
• Repository: contenitore per le chiavi, i certificati digitali e la lista
dei certificati revocati o Certificate Revocation List (CRL). Spesso
mantenuto in un server LDAP.
• Politica di sicurezza: stabilisce e definisce una serie di principi e processi,
ad alto livello, per l’organizzazione della sicurezza.
• In aggiunta a tutto ciò la PKI può fornire un servizio di recupero delle
chiavi nel caso in cui un utente dovesse perdere la propria chiave privata.
Gli accordi alla base di una PKI consentono ad un utente di essere
mutuamente autenticato con una risorsa, e di utilizzare le informazioni
contenute nel rispettivo certificato per cifrare e decifrare i messaggi trasmessi.
Un utente può firmare i propri messaggi con la sua chiave privata, ed una
risorsa può controllare questa firma usando la chiave pubblica contenuta nel
certificato del mittente, fornito dall’autorità di certificazione facente parte
della PKI. Questo consente a due (o più) parti desiderose di comunicare di
verificare la confidenzialità, l’integrità dei messaggi e l’autenticazione degli
utenti senza il bisogno di un precedente scambio di informazioni segrete.
51
La maggior parte delle PKI fanno affidamento su catene di certificati per
stabilire l’identità delle parti: un certificato viene emesso da una CA, a sua
volta autenticata da un certificato emesso da un’autorità di livello più alto, e
così via. In questo modo si stabilisce una gerarchia di certificati, composta
da computer, organizzazioni e pacchetti software diversi.
Le PKI a livello di grandi organizzazioni, come le università, possono
essere legate ai servizi di directory, come LDAP, in cui la chiave pubblica di
ogni utente può essere memorizzata (incorporata in un certificato) assieme ai
dettagli personali dell’identità digitale.
In qualche caso, il soggetto genera la coppia di chiavi nel proprio ambiente
locale e poi passa la chiave pubblica alla CA per l’emissione del certificato;
un’altra soluzione può comportare che sia la CA ad essere responsabile della
generazione delle chiavi. Per ragioni di sicurezza, è considerata migliore la
pratica di generazione della coppia di chiavi da parte dell’utente, seguita
dalla trasmissione della sola chiave pubblica alla CA, perché in questo modo
si è sicuri che la chiave privata sia memorizzata solo in un’unica postazione.
La distribuzione sicura delle chiavi pubbliche è essenziale e una tipica
soluzione potrebbe essere anche quella di equipaggiare ogni utente con una
Smartcard o con una chiavetta USB contenenti il certificato digitale.
52
Capitolo 4
Situazione attuale
nell’Università di Parma
4.1
Il contesto
Dopo aver introdotto i concetti principali che verranno utilizzati nel
progetto, entriamo nei dettagli dell’Università di Parma, descrivendo l’attuale
situazione per quanto riguarda la gestione dell’accesso.
In questo paragrafo vediamo il contesto in cui il progetto del sistema IAM
centralizzato viene applicato, cioè quelle parti che non vengono modificate
dal progetto ma a cui esso si riferisce, che costituiscono quindi un vincolo
fissato di cui si dovrà tener conto nel progetto.
Concentrandoci sulla gestione dell’accesso, l’unico contesto utile sono le
risorse informatiche disponibili all’interno dell’università, l’obiettivo del
progetto è appunto la gestione dell’accesso a tali risorse. Un’altra parte del
contesto potrebbe essere costituita dalle fonti, ovvero da dove provengono
le informazioni relative agli utenti, da cui si deve effettuare l’operazione
di consolidamento per creare l’identità digitale unica, ma questo fa parte
della gestione dell’identità, percui va oltre gli scopi del progetto di questo
documento.
4.1.1
Risorse disponibili agli utenti
Le risorse informatiche disponibili all’interno dell’università che necessitano di una gestione dell’accesso si possono suddividere in risorse web,
risorse di rete e postazioni computer.
53
Alcune risorse web sono realizzate per gli studenti:
• GOAL: gestione delle aule della facoltà di Ingegneria;
• IscrizioNet: iscrizione agli esami per numerose facoltà (agraria, economia, farmacia, giurisprudeza, ingegneria, ecc.);
• WebGISS: servizi diversi alla didattica: esenzione maggiorazione, ecc.;
• YaGISS: comunicazione esami a scelta per la facoltà di Ingegneria;
• Er-Go: domande di benefici per il diritto allo studio;
• CampusNet: servizi per la didattica per le facoltà di Medicina e
Chirurgia e Scienze MM.FF.NN (per esempio iscrizione agli esami);
• Dspace: deposito delle tesi di dottorato;
• Dokeos-Moodle: sistemi di supporto alla didattica frontale;
altre per i dipendenti:
• CSAWeb: cedolini stipendiali;
• Form per il Nucleo di Valutazione;
• Catalogo delle Pubblicazioni.
I servizi di rete sono WiFi e VPN, entrambi disponibili sia per il personale,
sia per gli studenti. Le postazioni computer invece sono gestite singolarmente
all’interno di ogni facoltà, spesso limitate solo ai docenti e agli studenti della
facoltà stessa.
4.2
Attuale gestione dell’accesso
Vediamo ora come viene attualmente gestito l’accesso alle risorse e quali
problematiche comporta tale gestione. La struttura generale è composta da
un RDBMS MySQL dove vengono mantenute le identità digitali degli utenti,
in tabelle differenti in base al ruolo ricoperto (studenti, erasmus, dipendenti,
ospiti, ecc.) riempite con le informazioni provenienti da varie fonti (segreteria
studenti, ufficio personale, ecc.) senza che vi sia una riconciliazione dei
dati. Le informazioni nel database vengono replicate su un server LDAP per
54
l’interfacciamento con le risorse. Senza soffermarci oltre sul database, che è
parte della gestione dell’identità, vediamo nei dettagli com’è strutturato il
server LDAP e come le risorse si interfacciano ad esso.
4.2.1
Struttura del server LDAP
Illustriamo prima la struttura dell’albero, dopodiché lo schema utilizzato
e la struttura delle entry degli utenti.
Struttura dell’albero nel server LDAP
Per quel che riguarda la struttura, attualmente è organizzata per ruoli
nel seguente modo:
dc=unipr,dc=it
+ ou=people
+ ou=personale
+ cn=...
+ ...
+ ou=studenti
+ cn=...
+ ...
+ ou=erasmus
+ cn=...
+ ...
+ ou=...
+ ...
+ ou=service
+ ou=...
Nell’attributo cn viene messo il cognome seguito dal nome e, in caso di
omonimie, un numero univoco tra parentesi. Quindi se, ad esempio, abbiamo
due studenti di nome Mario Rossi, il secondo avrà cn=Rossi Mario (1) come
cn univoco all’interno del ramo studenti, e tale entry avrà il seguente DN:
cn=Rossi Mario (1),ou=studenti,ou=people,dc=unipr,dc=it
55
Schema e attributi
L’attuale schema è composto da una object class ad-hoc per ogni ruolo
(come studenteUniPR, oppure docenteUniPR), con attributi specifici per tale
ruolo. Le entry degli utenti sono perciò costituite dalla specifica object class a
seconda del ruolo ricoperto dall’utente a cui si riferiscono (quindi, guardando
la precedente struttura dell’albero, in base al ramo in cui si trovano). Per
esempio la entry di uno studente è costituita dall’object class studenteUniPR,
quella di un docente da docentiUniPR, e così via. La definizione di una object
class ad-hoc è praticamente inevitabile siccome in quelle standard mancano
attributi fondamentali, come il codice fiscale o la matricola (per gli studenti).
Ognuna di queste object class specifiche è derivata da personaUniPR, che a
sua volta è derivata dall’object class standard inetOrgPerson (percui tutte
contengono implicitamente gli attributi di quest’ultima object class). Inoltre,
le entry degli utenti sono costituite anche dalle object class posixaccount,
shadowaccount e sambaSamAccount, che contengono una serie di attributi
per l’accesso alle risorse.
4.2.2
Accesso alle risorse informatiche
Delle risorse web elencate in precedenza la maggior parte utilizzano CAS
per l’autenticazione, implementando un servizio di SSO, percui è sufficente
autenticarsi ad una sola risorsa per accedere anche alle altre. CAS preleva le
informazioni di autenticazione dal server LDAP, mentre per l’autorizzazione
è necessario un web service che restituisca ulteriori informazioni sull’utente
autenticato. Non tutte le risorse web utilizzano però CAS, alcune (per esempio
CampusNet) non implementano il servizio di SSO e prendono direttamente le
informazioni da LDAP, con la conseguenza che un utente può avere credenziali
di accesso diverse per queste risorse web.
La posta elettronica viene gestita internamente all’università per quanto
riguarda le caselle del personale, mentre vengono gestite dal CINECA le
caselle di posta degli studenti, il quale mantiene degli slave del server LDAP
copiando solo il ramo relativo agli studenti. Questa doppia gestione comporta
l’avere credenziali di accesso differenti in base al ruolo ricoperto, in particolare
viene usato come username l’indirizzo e-mail per gli studenti e l’UID per il
personale.
56
Le risorse di rete, WiFi e VPN, si appoggiano ad un server RADIUS per
la gestione dell’accesso, il quale legge le informazioni sugli utenti necessarie
per l’autenticazione e l’autorizzazione dal server LDAP. Per accedere a queste
risorse, sia per gli studenti che per il personale, viene richiesto l’indirizzo
e-mail come username.
Le postazioni computer, infine, sono in una situazione un po’ più complessa. Alcune facoltà utilizzano SAMBA per la gestione dell’accesso, come
Giurisprudenza, che si appoggia direttamente al server LDAP dell’università,
oppure la facoltà di Fisica, che però si gestisce in proprio un server LDAP
copiando dei dati dal server dell’università. La facoltà di Ingegneria invece ha
una gestione propria delle postazioni computer, con anche una password autonoma per gli utenti. Altre facoltà non usano SAMBA, ma ActiveDirectory
di Microsoft.
4.2.3
Problematiche della gestione attuale
Mantenere un database con tabelle distinte in base al ruolo comporta
diversi problemi per un sistema in cui si vorrebbe gestire un’identità unica
per ogni persona, infatti, se una persona ricopre più ruoli, come può essere un
docente-studente, vengono mantenuti due identità digitali separate per una
stessa persona, rendendo impossibile realizzare l’obiettivo dell’identità digitale
unica. Questo problema lo si risolve progettando un database unico nel quale
memorizzare e mantenere le informazioni degli utenti e le informazioni relative
a tutti i ruoli da essi ricoperti, attraverso delle opearazioni di consolidamento
che riconcilino i dati provenienti da diverse fonti in questo database unico.
Difficoltà analoghe si hanno anche nella gestione del server LDAP. Un
problema nell’attuale struttura dell’albero nel server LDAP, suddivisa per
ruoli, si ha quando un utente cambia ruolo, per esempio passa da studente
a docente, in tal caso si dovrebbe prevedere una procedura per spostare
i dati dell’utente dal ramo studenti al ramo personale per non perdere le
informazioni dell’identità digitale. Situazione ancora peggiore si ha quando
un utente ricopre contemporaneamente due ruoli, ad esempio uno studentericercatore, in questo caso si vengono ad avere due entry separate per un
unica identità digitale e, siccome lo scopo del progetto è proprio quello di
creare un’identità unica, questi casi sono assolutamente da evitare. Come
vedremo in seguito, attraverso una struttura piatta, dove tutti gli utenti
vengono mantenuti in un solo ramo indipendentemente dal ruolo ricoperto, si
57
risolvono questi problemi, infatti si ha sempre una sola entry per ogni utente,
ma chiaramente si introducono nuovi problemi: che attributi vanno mantenuti
in questa entry? Nel caso di una persona che ricopre più ruoli, come vengono
gestiti questi attributi? Questi problemi si possono risolvere attraverso la
definizione di uno schema appropriato. L’attuale schema non è però adatto
a questo scopo, infatti le object class specifiche (come studenteUniPR o
docentiUniPR) hanno spesso attributi in comune che, in una struttura non
suddivisa per ruoli, creano conflitti nel caso una persona ricopra più ruoli
all’interno dell’università. Per questo verranno definite delle nuove object
class ad-hoc con dei nuovi attributi. Inoltre, è buona norma dare un nome,
ad ogni attributo e ad ogni object class definita, che inizi con il prefisso unipr
seguito dal nome “descrittivo”.
Infine, nel sistema che si vuole ottenere ogni servizio dell’università dovrà
utilizzare un unico server LDAP centralizzato per reperire le informazioni di
accesso, ed ogni utente avrà una sola indentità digitale, percui potrà accedere
ai servizi utilizzando sempre la stessa chiave di accesso, sia essa una coppia
username-password o un certificato digitale. Nell’attuale situazione, come
abbiamo visto precedentemente, può capitare che per accedere a risorse diverse
si abbiano credenziali differenti, e in generale vi è una situazione abbastanza
confusa per quanto riguarda dove vengono prelevate le informazioni per
l’accesso. Inoltre, per il fatto che una persona può avere più identità digitali
all’interno del sistema informatico, non si possono adottare i certificati digitali
come metodo di autenticazione, non potendoli associare univocamente ad
una coppia persona-identità.
58
Capitolo 5
Progetto: gestione
centralizzata dell’accesso
Il progetto, che viene illustrato in questo capitolo, ha lo scopo di realizzare
un sistema IAM con gestione dell’accesso centralizzata, in cui ogni utente ha
un’unica identità digitale e può accedere alle risorse informatiche utilizzando
sempre le stesse credenziali di accesso, anche nel caso ricopra più ruoli.
L’attuale sistema nell’Università di Parma non è perfettamente centralizzato
(vedi capitolo precedente), anche se si avvicina molto ad un sistema di questo
tipo, ma ha soprattutto un grande problema: un utente può avere più identità
digitali se ricopre più ruoli, il che comporta avere credenziali di accesso
differenti a seconda del ruolo ricoperto. Attraverso una ristrutturazione del
server IAM riusciremo ad eliminare questa anomalia.
Il server IAM è attualmente composto da un RDBMS e da un server
LDAP. Questa suddivisione è particolarmente importante poiché i dati degli
utenti provenienti dalle fonti vengono consolidati e mantenuti nel RDBMS
che permette di organizzare dati anche molto complessi in modo semplice,
permettendo per esempio di mantenere facilmente uno storico delle informazioni degli utenti, cosa che risulterebbe particolarmente complicata in un
server LDAP. Un RDBMS è anche molto più agevole per quanto riguarda la
manipolazione e la gestione dei dati stessi rispetto ad un server LDAP, ed ha
una serie di meccanismi che lo rendono sicuro rispetto ai dati, il che lo rende
particolarmente adatto per mantenere le identità digitali degli utenti. Il server
LDAP, forte dei vantaggi illustrati nel paragrafo 2.5.1, è utilizzato invece per
interfacciarsi con le risorse informatiche. Attraverso questa suddivisione si
59
sfruttano i vantaggi di entrambe le tecnologie, realizzando un ottimo server
IAM, con l’unico svantaggio che è necessario prevedere delle procedure (degli
script) per replicare i dati dal database al server LDAP, con la conseguenza
che gli aggiornamenti ai dati, come l’eliminazione di un utente dal sistema,
subiscono dei ritardi prima di diventare effettivi.
Mantenendo quindi la struttura del server IAM, il progetto si impone di
riorganizzare la gestione delle informazioni degli utenti, creando l’identità
digitale unica. La creazione di un database unico dove mantenere i dati, come
reperire e gestire le informazioni degli utenti e come consolidarle nel database
mantenendo una ed una sola identità digitale per ogni utente, tutto questo fa
parte della gestione dell’identità, si assume perciò che venga fatta in qualche
modo e si ci concentra invece nella gestione dell’accesso. Gli obiettivi del
progetto sono percui la riorganizzazione del server LDAP in modo che supporti
la gestione di un’identità unica per ogni utente, e centralizzare la gestione
dell’accesso alle risorse in modo tale che vengano reperite le informazioni dal
server LDAP.
5.1
Vincoli progettuali
Oltre ai vincoli dovuti al contesto dell’Università di Parma, descritti
nel capitolo precedente, ci sono una serie di vincoli di carattere tecnico,
dovuti all’importanza di un sistema IAM in una realtà con molti utenti, che
assolutamente non si possono trascurare: sicurezza, affidabilità e performance.
Il progetto per la gestione degli accessi dovrà quindi prevedere che il sistema
realizzato sia:
• Sicuro, siccome durante l’accesso ad una risorsa transitano informazioni
riservate, dovranno quindi essere previsti meccanismi per cifrare le
trasmissioni, ed impedire a malintenzionati di intercettare e leggere
certe informazioni.
• Affidabile, cioè deve garantire la continuità del servizio poiché diventerebbe inaccettabile che periodicamente il sistema dell’accesso non sia
disponibile e gli utenti non riescano ad accedere alle risorse informatiche.
• Performante, ovvero deve rispondere alle richieste in tempi sempre
accettabili, anche quando viene sottoposto ad aumenti del carico da
60
gestire. Infatti un utente, in genere, non vuole aspettare diversi minuti
prima che gli venga consentito l’accesso ad una risorsa.
Tutti questi vincoli sono presi in considerazione nel seguente progetto e
vengono illustrati in paragrafi a parte.
5.2
Architettura generale
Figura 5.1: Architettura generale del progetto.
Nello schema rappresentato in figura 5.1 si può vedere l’architettura
generale del progetto: i dati provenienti dalle fonti vengono consolidati
in un database unificato, le informazioni degli utenti vengono replicate
sul server LDAP il quale le rende disponibili alle risorse per la gestione
dell’accesso.
Quando un utente prova ad accedere ad una risorsa informatica, questa
richiede i dati al server LDAP, li confronta con quelli inseriti dall’utente e
gli consente o gli nega l’accesso. L’intera parte della gestione dell’identità
si presuppone che sia in qualche modo gestita, e la si può vedere come una
scatola nera in cui è contenuta un’identità digitale unica per ogni utente
(figura 5.2).
Da questo schema di alto livello si apprezza il fatto che tutta la gestione
dell’accesso è centralizzata presso il server IAM, e quando un utente vuole
61
Figura 5.2: Schema logico dell’architettura del progetto.
accedere ad una qualunque risorsa lo può fare utilizzando sempre le stesse
credenziali di accesso. Il modo con cui poi verrà gestita l’identità all’interno
del server IAM permetterà all’utente di avere una ed una sola identità digitale
anche se ricopre più ruoli, quindi di accedere alle risorse con le sue credenziali
uniche indipendenti dal ruolo ricoperto.
5.3
LDAP
La gestione dell’accesso parte dal server LDAP, nel quale vengono mantenute le informazioni degli utenti che le risorse informatiche vengono a
prelevare per il controllo dell’accesso. Mentre nel database vengono mantenute in modo altamente sicuro tutte le informazioni degli utenti, il server
LDAP viene utilizzato per interfacciarsi con le risorse, sarà quindi necessario
replicare alcune informazioni dal database.
5.3.1
Quale server LDAP
La scelta del server LDAP, escludendo le soluzioni proprietarie, la si può
restringere ai due principali progetti open source: Fedora DS e OpenLDAP.
Vediamoli allora entrambi nei dettagli.
62
Fedora DS
Fedora Directory Server (in breve FDS) è nato nel 1999 come Netscape
DS, un directory server di classe Enterpries. Nel 2004 Red Hat l’ha acquistato,
l’ha passato alla comunità Fedora e ne’ ha fatto un prodotto open source,
rilasciato con licenza GPL. Le principali caratteristiche sono:
• Configurazione Multi-Master Replication grazie alla quale riesce a
fornire un’alta affidabilità e ottime performance.
• Elevata scalabilità.
• Sviluppato e supportato dall’ampia comunità Fedora.
• Documentazione molto ricca.
• Permette la sincronizzazione di utenti e gruppi Active Directory.
• Fornisce sitmetodi di autenticazione e trasporto sicuri (SSLv3, TLSv1
e SASL)
• Compatibilità con lo standard LDAPv3.
• Utility grafiche per la gestione del server.
OpenLDAP
OpenLDAP è probabilmente il più diffuso server LDAP, ed è attualmente
utilizzato anche nell’Università di Parma. È un progetto open source iniziato nel 1998 da Kurt Zeilenga, rilasciato sotto una licenza personalizzata
(OpenLDAP Public License) più restrittiva rispetto alla GPL. Di seguito le
caratteristiche principali:
• È un software libero ed è adottato dalle maggiori distribuzioni linux.
• Ha una buona comunità alle spalle e, per la sua diffusione, dispone di
un’ottimo supporto.
• Esiste da oltre dieci anni ed è ormai consolidato e affermato.
• In continuo sviluppo e aggiornamento, ed aggiunge sempre nuove funzionalità (come la replica su server multimaser o configurazioni dinamiche
disponibili con le ultime versioni).
63
• Compatibilità con lo standard LDAPv3
• Offre metodi di autenticazione e connessioni sicure.
• Supporta la distribuzione dei carichi di lavoro.
• Permette la replica delle informazioni.
• Fornisce tempi brevi di risposta.
Fedora DS vs. OpenLDAP
Nonostante OpenLDAP sia molto diffuso ed affermato, sono in molti a
preferirgli Fedora DS. Quest’ultimo, oltre ad essere un prodotto di classe
Enterprise percui, teoricamente, più adatto ad ambienti con molti utenti,
può vantare una gestione più semplice e vari strumenti che possono aiutare
l’amministratore, come una console grafica per la configurazione, e un “http
admin server” per amministrare il server attraverso un browser web. Inoltre
FDS offre una documentazione molto ampia e ben fatta, a differenza di
OpenLDAP nel quale la documentazione non è perfetta.
OpenLDAP resta comunque un ottimo prodotto, anche se più complicato
da configurare e gestire, in quanto a caretteristiche offerte non si può dire
che sia inferiore a Fedora DS, con le ultime versioni all’incirca si equivalgono.
Per l’infrastruttura trattata in questo testo è stato scelto OpenLDAP perché
già in uso e non vi sono validi motivi per sostituirlo. Da aggiungere che
alcuni benchmark effettuati nel 2007 sui maggiori server LDAP (OpenLDAP
2.3.34, Fedora DS 1.0.4, OpenDS 0.3-34 e ApacheDS 1.0.1) hanno mostrato
che OpenLDAP è nettamente al di sopra degli altri in quanto a tempi di
risposta anche a fronte di una grande quantità di richieste.
5.3.2
Struttura e schema
Una delle problematiche principali è la riorganizzazione della struttura
dell’albero delle entry nel server LDAP, quindi come organizzare le informazioni, e la definizione dello schema del server LDAP, stabilendo quali
informazioni portare dal database a LDAP e in quali attributi memorizzarle,
eventualmente definendo degli attributi e delle object class ad-hoc.
64
Struttura
Per quel che riguarda la struttura, attualmente organizzata per ruoli, si
vuole passare ad una struttura “piatta”, in cui tutte le identità sono mantenute
in un unico ramo, in modo da eliminare la dipendenza dell’identità digitale
rispetto al ruolo ricoperto:
dc=unipr,dc=it
+ ou=people
+ cn=...
+ cn=...
+ cn=...
+ ...
+ ou=service
+ ou=...
Per non avere tutti gli utenti in un singolo ramo, il che comporterebbe
scarse prestazioni in caso di ricerche, è opportuno suddividerli per iniziale del
cognome, facilitando cosiì anche il browsing tra le entry. In questo modo si
riescono a suddividere gli utenti in modo logico e abbastanza uniformemente
in più rami, facilitando e ottimizzando le operazioni di ricerca. Altra modifica
rispetto all’attuale schema è la scelta di come indentificare gli utenti. Come
già descritto precedentemente, ora si identificano in base al cn, composto dal
cognome, seguito dal nome e da un numero univoco in caso di omoninie. Una
scelta migliore, più semplice ed efficace, è di identificarli in base al codice
fiscale, poichè raramente è doppio e difficilmente dev’essere modificato.
In definitiva la struttura scelta è la seguente:
dc=unipr,dc=it
+ ou=people
+ dc=A
+ uniprCodiceFiscale=...
+ uniprCodiceFiscale=...
+ ...
+ dc=B
+ uniprCodiceFiscale=...
+ ...
+ dc=C
65
+ ...
+ ...
+ ou=service
+ ou=...
Un esempio di DN, che identifica univocamente una entry, può essere il
seguente:
uniprCodiceFiscale=RSSMRA88A01G337P,dc=R,dc=unipr,dc=it
Schema
Con la definizione dello schema LDAP intendiamo stabilire quali informazioni replicare dal database al server LDAP, decidere quali attributi (oppure
intere object class) standard si possono utilizzare, quindi definire gli attributi
e le object class “ad-hoc” in base agli attributi mancanti fra quelli standard.
L’utilizzo di attributi standard ha un certo rilevo soprattutto se si parla di
federazone: gestire informazioni in modo omogeneo tra diverse organizzazioni,
memorizzandole negli stessi attributi, può notevolmente semplificare la gestione di un sistema di AAI (Authentication and Authorization Infrastructure)
federato. Un altro vantaggio è anche verso le applicazioni che si appoggiano
a LDAP, infatti può risultare più semplice la gestione di attributi standard
rispetto ad attributi scritti appositamente, inoltre utilizzando attributi standard si possono utilizzare (o implementare) applicazioni di carattere più
ampio e generale e non utilizzabili solo all’interno di una specifica università.
Per quanto riguarda il problema di quali informazioni memorizzare per
ogni utente si è scelta la seguente soluzione: viene stabilita la struttura di
una “entry base” comune a tutti gli utenti, indipendente dal ruolo ricoperto,
composta da almeno una object class di tipo structural, dopodiché per ogni
ruolo viene definita una object class di tipo auxiliary contenente gli attributi
specifici per quel ruolo. La struttura di una generica entry sarà quindi
composta dalle object class della “entry base” più le object class auxiliary dei
ruoli ricoperti dall’utente a cui la entry si riferisce.
Nel paragrafo successivo stabiliamo quali informazioni memorizzare nel
server LDAP e in quali attributi, partendo da quelle comuni a tutti gli utenti,
che andranno nella “entry base”, poi quelle specifiche dei ruoli, che andranno
nelle object class auxiliary.
66
5.3.3
Attributi per l’identità
Stabiliamo allora quali informazioni serviranno, iniziando dalla “entry
base”:
• ID identità
• Cognome
• Nome
• Sesso
• Codice Fiscale
• Data nascita
• Indirizzo di domicilio e di residenza
• Mail
• Telefoni
• Fax
• Titolo onorifico
• Nazione di residenza, cittadinanza e domicilio
• Luogo di residenza, cittadinanza e domicilio
• Ruoli ricoperti
Oltre alle informazioni sopraelencate vanno aggiunti gli attributi necessari
per la gestione dell’accesso alle risorse, inidicati nel paragrafo 5.3.4.
Passiamo alle informazioni specifiche in base al ruolo:
• Studente
– Matricola
– Anno di ultimo pagamento delle tasse
– Anno di prima immatricolazione
– Anno della laurea triennale
– Anno della laurea specialistica
67
– Corso di laurea di appartenenza (e facoltà)
• Dipendente
– IDSGE
– Codice SISA
– Data Inizio
– Data Fine
– Codice Ruolo
– Profilo e categoria
– Stati del ruolo
– Incarichi
– Aree e settori
– Dipartimenti, serivizi e sezioni e sedi collegate
• Futura matricola
– Matricola
– Anno di prima immatricolazione
– Corso di laurea di appartenenza (e Facoltà)
• Professore a contratto
– IDSGE
– Codice SISA
– Data Inizio
– Data Fine
– Codice Ruolo
– Profilo e categoria
– Stati del ruolo
– Aree e settori
Da notare che si è deciso di replicare in LDAP molte informazioni contenute nel database, una diversa soluzione poteva essere quella di avere un
numero ristretto di dati in LDAP e nel caso una applicazione avesse bisogno
68
di ulteriori informazioni su un utente, “collegarla” direttamente al database
implementando, per esempio, un web service per questo scopo.
Vediamo ora in quali attributi LDAP si possono memorizzare le precedenti
informazioni. Gli attributi standard verranno presi dalle seguenti object class:
• person, definita in [RFC4519].
• organizationalPerson, definita in [RFC4519].
• inetOrgPerson, definita in [RFC1274]
• eduPerson, vedere eduPerson 200806
• schacPersonalCharacteristics, vedere SCHAC v. 20060928-1.3.0
• schacContactLocation, vedere SCHAC v. 20060928-1.3.0
• schacEmployeeInfo, vedere SCHAC v. 20060928-1.3.0
Nonostante il buon numero di attributi presenti in queste object class
ne mancano alcuni fondamentali, come il codice fiscale, percui, per coprire
queste lacune, andranno definiti attributi ad-hoc per l’università, tali attributi
inizieranno con il prefisso unipr. Iniziamo con gli attributi della “entry base”:
Informazione
Attributo LDAP
IDIdentità
uniprIDIdentita
Cognome
sn
Nome
givenName
Sesso
schacGender
Codice Fiscale
uniprCodiceFiscale
Data nascita
schacDateOfBirth
Via di domicilio
street
CAP di domicilio
postalCode
Luogo di domicilio
uniprLuogoDiDomicilio
Provincia di domicilio
uniprProvinciaDiDomicilio
Stato di domicilio
uniprStatoDiDomicilio
Via, CAP, Luogo, Provincia, Stato di
domicilio
postalAddress
Via di residenza
uniprViaDiResidenza
69
Informazione
Attributo LDAP
CAP di residenza
uniprCAPdiResidenza
Luogo di residenza
l
Provincia di residenza
st
Stato di residenza
schacCountryOfResidence
Via, CAP, Luogo, Provincia, Stato di
residenza
homePostalAddress
Mail
mail
Telefono residenza
homePhone
Telefono domicilio
telephoneNumber
Telefono cellulare
mobile
Fax
facsimileTelephoneNumber
Titolo onorifico
schacPersonalTitle
Ruoli ricoperti
uniprRuoliRicoperti
La struttura della entry base sarà costituita dall’object class uniprPersona
(derivata da inetOrgPerson1 ) nella quale ci andranno gli attributi ad-hoc
presenti nella precedente tabella (quelli con il prefisso unipr), e dalle seguenti
object class standard :
• schacPersonalCharacteristics
• schacContactLocation
• eduPerson
• schacEmployeeInfo
Passiamo agli attributi specifici di ogni ruolo, che andranno a formare
le object class auxiliary. Gli attributi seguenti (compresi quelli standard)
andranno a formare l’object class ad-hoc uniprStudente:
Informazione
Attributo LDAP
Matricola
uniprMatricola
Anno di ultimo pagamento delle tasse
uniprAnnoUltimoPagamento
1
L’object class inetOrgPerson deriva da organizationalPerson che a sua volta deriva
da person.
70
Informazione
Attributo LDAP
Anno di prima immatricolazione
uniprAnnoPrimaImmatricolazione
Anno della laurea triennale
uniprAnnoLaureaTriennale
Anno della laurea specialistica
uniprAnnoLaureaSpecialistica
Corso di laurea di appartenenza
uniprCorsoLaurea
Facoltà di appartenenza
ou
Attributi per l’object class uniprDipendente:
Informazione
Attributo LDAP
IDSGE
uniprIDSGEDipendente
Codice SISA
employeeNumber
Data Inizio
uniprDataInizioRuolo
Data Fine
uniprDataFineRuolo
Codice Ruolo
employeeType
Profilo
uniprProfilo
Categoria
uniprCategoria
Stati del ruolo
uniprStatoRuolo
Incarichi
uniprIncarico
Aree
uniprAree
Settori
uniprSettore
Dipartimenti
departmentNumber
Servizi
uniprServizi
Sezioni
uniprSezioni
Attributi per l’object class uniprFuturaMatricola:
Informazione
Attributo LDAP
Matricola
uniprFuturaMatricola
Anno di prima immatricolazione
uniprAnnoPrimaImmatricolazione FuturaMatricola
Corso di laurea di appartenenza
uniprCorsoLaureaFuturaMatricola
Facoltà di appartenenza
uniprFacoltaFuturaMatricola
71
Attributi per l’object class uniprProfessoreAContratto:
Informazione
Attributo LDAP
IDSGE
uniprIDSGEProfessoreAContratto
Codice SISA
uniprCodiceSISAProfessoreAContratto
Data Inizio
uniprDataInizioRuoloProfessore
AContratto
Data Fine
uniprDataFineRuoloProfessore AContratto
Codice Ruolo
uniprCodiceRuoloProfessore
tratto
Profilo
uniprProfiloProfessoreAContratto
Categoria
uniprCategoriaProfessoreAContratto
Stati del ruolo
uniprStatoRuoloProfessore AContratto
Aree
uniprAreeProfessoreAContratto
Settori
uniprSettoreProfessoreAContratto
ACon-
La definizione del nuovo schema, con i nuovi attributi, l’object class
di tipo structural uniprPersona e le object class auxiliary uniprStudente,
uniprDipendente, uniprFuturaMatricola e uniprProfessoreAContratto,
la si può ricavare dalle precedenti tabelle ed è riportata nell’appendice A.
5.3.4
Attributi per l’accesso
Per gestire l’accesso (cioè autenticazione e autorizzazione) ogni risorsa
preleva le informazioni necessarie dal server LDAP, leggendo particolari attributi che dovranno esistere nella entry LDAP dell’utente che vuole accedere
alla risorsa. Questi attributi sono presenti in una serie di object class:
• account
• posixAccount
• shadowAccount
• sambaSamAccount
• radiusprofile
72
Queste object class andranno perciò aggiunte alla struttura della “entry
base” descritta a pagina 70.
Per l’accesso ai PC linux, attraverso i moduli PAM, vengono utilizzate le
object class account, posixAccount e shadowAccount, nelle quali sono contenute tutte le informazioni per “creare” un utente unix. Il server SAMBA,
utilizzato per l’accesso ai PC windows, prende le informazioni dall’object
class sambaSamAccount (creata apposta dagli sviluppatori di SAMBA). Il
server RADIUS, di cui consideriamo l’implementazione libera freeRADIUS,
utilizzato per l’accesso alle risorse di rete WiFi e VPN, legge le informazioni
di autenticazione dall’object class sambaSamAccount mentre per la gestione
dell’autorizzazione è stata creata una object class apposta: radiusprofile.
Infine le rimanenti risorse (applicazioni WEB, CAS e server di posta) possono essere configurate per leggere attributi già esistenti, in genere uid e
userPassword rispettivamente per username e password, presenti nell’object
class posixAccount.
Vediamo allora nel dettaglio ognuna di queste object class e i loro attributi.
Object-class account
Definita all’interno di cosine.schema:
objectclass ( 0.9.2342.19200300.100.4.5
NAME ’account’
SUP top
STRUCTURAL
MUST uid
MAY ( description $ seeAlso $ localityName $
organizationName $ organizationalUnitName $ host )
)
Questa object class rappresenta l’account di un computer e viene utilizzata
per l’accesso ai PC linux, tramite i moduli PAM. L’unico attributo necessario,
che è anche l’unico obbligatorio, è uid, nel quale viene mantenuto il nome di
login dell’utente.
Object-class posixAccount
Definito all’interno di nis.schema:
73
objectclass ( 1.3.6.1.1.1.2.0
NAME ’posixAccount’
DESC ’Abstraction of an account with POSIX attributes’
SUP top
AUXILIARY
MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
MAY ( userPassword $ loginShell $ gecos $ description )
)
Serve per rappresentare un utente unix attraverso gli attributi in genere
contenuti nel file di sistema /etc/passwd. Questi attributi sono utilizzati
dalla maggior parte dei sistemi di autenticazione e autorizzazione, fra cui:
accesso ai PC linux, applicazioni web, CAS, server di posta elettronica.
Vediamo in dettaglio il contenuto di ogni attributo:
• cn: nome completo della persona a cui è associata la entry.
• uid: nome di login dell’utente (lo stesso della object class account).
• uidNumber: identificativo numerico dell’utente.
• gidNumber: identificativo numerico del gruppo principale dell’utente.
• homeDirectory: path completo della home directory.
• userPassword: password cifrata dell’utente.
• loginShell: path del programma lanciato al login.
• gecos: campo opzionale, in genere il nome utente.
• description: breve descrizione relativa all’utente (opzionale).
Object-class shadowAccount
Definito all’interno di nis.schema:
objectclass ( 1.3.6.1.1.1.2.1
NAME ’shadowAccount’
DESC ’Additional attributes for shadow passwords’
SUP top
AUXILIARY
74
MUST uid
MAY ( userPassword $ shadowLastChange $ shadowMin $
shadowMax $ shadowWarning $ shadowInactive $
shadowExpire $ shadowFlag $ description )
)
Questa object class è utilizzata per mantenere i dati di un account unix
in genere mantenuti nel file di sistema /etc/shadow. Gli attributi uid e
userPassword sono gli stessi dell’object class posixAccount, gli altri attributi
da utilizzare sono i seguenti:
• shadowLastChange: giorno dell’ultimo cambiamento password (dal
1/1/1970).
• shadowMin: numero di giorni dall’ultimo cambiamento prima dei quali
la password non può essere cambiata.
• shadowMax: numero di giorni dall’ultimo cambiamento password, dopo
i quali la password scade e deve essere rinnovata.
• shadowWarning: numero di giorni prima della scadenza della password
durante i quali l’utente viene avvertito.
• shadowInactive: numero di giorni dopo i quali, una volta scaduta la
password senza essere rinnovata, l’account viene disabilitato.
• shadowExpire: giorno in cui l’account viene disabilitato (dal 1/1/1970).
Object-class sambaSamAccount
Definito all’interno di samba3.schema:
objectclass ( 1.3.6.1.4.1.7165.2.2.6
NAME ’sambaSamAccount’
SUP top
AUXILIARY
DESC ’Samba 3.0 Auxilary SAM Account’
MUST ( uid $ sambaSID )
MAY
( cn $ sambaLMPassword $ sambaNTPassword $
sambaPwdLastSet $ sambaLogonTime $ sambaLogoffTime $
sambaKickoffTime $ sambaPwdCanChange $
75
sambaPwdMustChange $ sambaAcctFlags $ displayName $
sambaHomePath $ sambaHomeDrive $ sambaLogonScript $
sambaProfilePath $ description $
sambaUserWorkstations $ sambaPrimaryGroupSID $
sambaDomainName $ sambaMungedDial $
sambaBadPasswordCount $ sambaBadPasswordTime $
sambaPasswordHistory $ sambaLogonHours)
)
I dati mantenuti in questa object class vengono utilizzati dal server
SAMBA per gestire l’accesso ai PC windows e dal server RADIUS per
l’autenticazione del WiFi e della VPN.
• sambaSID: Security ID (SID) dell’utente.
• sambaNTPassword: password nel formato NT (hash MD4 della password
in Unicode). La stessa password mantenuta nell’attributo userPassword.
• sambaLMPassword: password nel formato LAN manager. Stessa password mantenuta in sambaNTPassword e userPassword.
• sambaPwdLastSet: tempo di ultima modifica delle password.
• sambaPwdMustChange: tempo in cui la password dovrà essere modificata.
• sambaKickoffTime: tempo in cui l’account sarà bloccato. Analogo a
shadowExpire di shadowAccount.
• sambaPasswordHistory: password precedenti, non potranno essere
riutilizzate al momento della modifica della password.
• sambaPrimaryGroupSID: Security ID (SID) del gruppo principale dell’utente.
• sambaAcctFlags: flag, una stringa di 11 caratteri delimitata da parentesi quadre che definisce le caratteristiche dell’account.
• sambaDomainName: dominio Windows di cui l’utente fa parte.
76
Object-class radiusprofile
Definito all’interno di RADIUS-LDAPv3.schema:
objectclass ( 1.3.6.1.4.1.3317.4.3.2.1
NAME ’radiusprofile’
SUP top AUXILIARY
DESC ’’
MUST cn
MAY ( radiusArapFeatures $ radiusArapSecurity $
radiusArapZoneAccess $ radiusAuthType $
radiusCallbackId $ radiusCallbackNumber $
radiusCalledStationId $ radiusCallingStationId $
radiusClass $ radiusClientIPAddress $
radiusFilterId $ radiusFramedAppleTalkLink $
radiusFramedAppleTalkNetwork $
radiusFramedAppleTalkZone $
radiusFramedCompression $ radiusFramedIPAddress $
radiusFramedIPNetmask $ radiusFramedIPXNetwork $
radiusFramedMTU $ radiusFramedProtocol $
radiusCheckItem $ radiusReplyItem $
radiusFramedRoute $ radiusFramedRouting $
radiusIdleTimeout $ radiusGroupName $ radiusHint $
radiusHuntgroupName $ radiusLoginIPHost $
radiusLoginLATGroup $ radiusLoginLATNode $
radiusLoginLATPort $ radiusLoginLATService $
radiusLoginService $ radiusLoginTCPPort $
radiusLoginTime $ radiusPasswordRetry $
radiusPortLimit $ radiusPrompt $
radiusProxyToRealm $ radiusRealm $
radiusReplicateToRealm $ radiusServiceType $
radiusSessionTimeout $ radiusStripUserName $
radiusTerminationAction $
radiusTunnelClientEndpoint $ radiusProfileDn $
radiusSimultaneousUse $ radiusTunnelAssignmentId $
radiusTunnelMediumType $ radiusTunnelPassword $
radiusTunnelPreference $
77
radiusTunnelPrivateGroupId $
radiusTunnelServerEndpoint $
radiusTunnelType $ radiusUserCategory $
radiusVSA $ radiusExpiration $ dialupAccess $
radiusNASIpAddress $ radiusReplyMessage )
)
Attraverso questi attributi è possibile gestire l’autorizzazione alle risorse
di rete che si appoggiano al server RADIUS, vediamo il significato di alcuni
di questi attributi:
• radiusFramedIPAddress: indirizzo IP assegnato al client durante la
connessione.
• radiusFramedIPNetmask: netmask assegnata al client.
• radiusFramedMTU: consente di impostare la MTU, ovvero la massima
dimensione trasferibile in un pacchetto.
• radiusFramedRoute: consente di impostare la tabella di routing del
client.
• radiusIdleTimeout: imposta il tempo di timeout: trascorso il tempo
prefissato di inattività la connessione viene chiusa.
• radiusLoginService: specifica il tipo di servizio accordato al client.
• radiusSessionTimeout: specifica la durata massima, in secondi, di
una sessione utente.
• radiusSimultaneousUse: numero massimo di accessi simultanei consentiti.
5.3.5
Esempio di una entry LDAP
Vediamo allora un esempio di entry, in formato LDIF, di un possibile
studente di nome Mario Rossi:
dn: uniprCodiceFiscale=RSSMRA86D12G337Z,dc=R,dc=unipr,dc=it
uniprCodiceFiscale: RSSMRA86D12G337Z
objectClass: person
objectClass: organizationalPerson
78
objectClass: inetOrgPerson
objectClass: schacPersonalCharacteristics
objectClass: schacContactLocation
objectClass: eduPerson
objectClass: schacEmployeeInfo
objectClass: uniprPersona
objectClass: uniprStudente
objectClass: account
objectClass: shadowAccount
objectClass: posixAccount
objectClass: sambaSamAccount
objectClass: radiusprofile
cn: Mario Rossi
givenName: Mario
sn: Rossi
uniprIDIdentita: [email protected]
schacGender: 1
schacDateOfBirth: 19860412
street: Via Roma 1/a
postalCode: 43100
uniprLuogoDiDomicilio: Parma
uniprProvinciaDiDomicilio: PR
uniprStatoDiDomicilio: Italia
postalAddress: Via Roma 1/a$Parma$PR$Italia
mail: [email protected]
telephoneNumber: +39 0521 893204
uniprRuoliRicoperti: studente
uniprMatricola: 187324
uniprAnnoUltimoPagamento: 2008
uniprAnnoPrimaImmatricolazione: 2008
uniprAnnoLaureaTriennale: 2008
uniprCorsoLaurea: 0314
ou: 02
uid: mario.rossi
userPassword: e01ENX1GNXJVWEd6aXk1ZlBFQ25pRWdSdWdRPT0=
uidNumber: 1003
79
gidNumber: 100
homeDirectory: /home/mario.rossi
loginShell: /bin/bash
gecos: Mario Rossi
shadowMin: 100
shadowMax: 100
shadowWarning: 7
shadowInactive: 14
sambaSID: S-1-5-21-178374138-3223223291-377472742-3010
sambaLMPassword: 3AE6CCCE2A2A253F93E28745B8BF4BA6
sambaNTPassword: 35CCBA9168B1D5CA6093B4B7D56C619B
sambaPwdLastSet: 1141916899
shadowLastChange: 13216
sambaKickoffTime: 1893488400
sambaAcctFlags: [XU ]
sambaHomeDrive: U:
sambaPrimaryGroupSID: S-1-5-21-178374138-3223223291-377472742-4003
sambaDomainName: sambadomain
sambaProfilePath: \\PDC\profiles\mario.rossi
sambaHomePath: \\PDC\home\mario.rossi
5.4
Gestione cetralizzata dell’accesso con LDAP
L’altro obiettivo del progetto è creare una infrastruttura in cui tutte le
risorse prendano le informazioni per gestire l’accesso da un server centralizzato,
nel nostro caso LDAP. Come già detto, in questo server viene mantenuta
l’identità digitale unica degli utenti, che potranno accedere a tutte le risorse
utilizzando sempre le stesse credenziali di accesso.
5.4.1
RADIUS e LDAP
Un server RADIUS (descritto nel paragrafo 3.3.3) viene utilizzato, come
vedremmo in seguito, per la gestione dell’accesso alle risorse di rete, WiFi e
VPN. Questo server può prelevare le informazioni di autenticazione e autorizzazione da un server LDAP in cui sono gestiti gli utenti e, per ogni utente,
sono impostati gli attributi adatti. Gli attributi LDAP da cui RADIUS
preleva le informazioni possono variare a seconda dell’implementazione di
80
RADIUS che si utilizza e dal metodo di autenticazione utilizzato (CHAP,
MSCHAPv2, EAP-TTLS, ...), tipicamente lo username viene prelevato dall’attributo uid e la password da userPassword, mentre per le informazioni
di autorizzazione è possibile che si debba aggiungere uno schema ad-hoc al
server LDAP contenente gli attributi necessari. Nel server LDAP è opportuno
creare un utente “radius” al quale gli si dà permessi in sola lettura per le
entry degli utenti, e nel server RADIUS verrà impostato l’accesso ad LDAP
tramite l’utente “radius”. Un’altro accorgimento da adottare in termini di
sicurezza è impostare una connessione TLS tra server RADIUS e server LDAP
(tipicamente supportata dalle implementazioni di entrambi i server) in modo
che i dati scambiati siano cifrati e non transitino in chiaro sulla rete.
In questo progetto viene utilizzata l’implementazione open source freeRADIUS, il quale preleva le informazioni di autenticazione dall’object class
sambaSamAccount, mentre per la gestione dell’autorizzazione è stata creata
una object class apposta: radiusprofile. Entrambe queste object class
faranno quindi parte della struttura dell’entry di un utente nel server LDAP.
5.4.2
WiFi
Un grande svantaggio di una rete WiFi è che, potenzialmente, può accedervi chiunque; poiché non si possono controllare i punti di accesso ad una
WLAN, una persona con un portatile dotato di scheda WiFi può mettersi nel
raggio di copertura di un AP e connettersi alla rete, potendo così accedere a
dati riservati disponibili in rete o sfruttare un connessione a Internet. Diventa
perciò di fondamentale importanza poter controllare chi accede alla rete, cioè
gestire l’accesso alla risorsa WiFi.
Esistono diverse soluzioni per implementare una infrastruttura di autenticazione e autorizzazione ad una rete WiFi, di seguito si ci vuole però concentrare sulle soluzioni destinate a gestire una situazione con molti utenti che
possono accedere al servizio WiFi (come appunto un’università), organizzati
e mantenuti in un sistema centralizzato con un server LDAP.
Protocolli di sicurezza
Siccome i dati trasmessi in una WLAN sono potenzialmente leggibili
da chiunque poiché viaggiano nell’aria, ed una qualunque persona, con un
portatile che abbia una scheda wireless, può facilmente intercettare una
81
trasmissione, è stato necessario introdurre nello standard WiFi un sistema
per cifrare e proteggere i dati trasmessi. Nel primo standard 802.11 è stato
inserito il protocollo di sicurezza WEP (Wired Equivalent Privacy) che agisce
a livello data-link, basato su una chiave condivisa tra AP e WT; purtroppo
questo protocollo garantisce un livello di sicurezza praticamente nullo perché
sono stati trovati algoritmi in grado di decifrare la chiave in meno di due ore.
Nel 2004 è uscito il nuovo standard di sicurezza delle reti WiFi, 802.11i
(chiamato anche WPA2), con il quale si possono ottenere elevati livelli di
sicurezza. 802.11i rimpiazza tutte le specifiche di sicurezza di 802.11, prevede l’utilizzo dello standard IEEE 802.1x per il processo di autenticazione
e CCMP per cifrare le comunicazioni; CCMP (Counter Mode with Cipher
Block Chaining Message Authentication Code Protocol) è un protocollo di
crittografia basato sull’alogritmo AES attraverso il quale si riesce a garantire confidenzialità , integrità del messaggio e certezza del mittente. Per
compatibilità con WEP, lo standard WPA2 supporta la gestione a chiave
condivisa, ma si può utilizzare un sistema con chiave dinamica in modo che il
WT non debba necessariamente conoscere a priori la chiave, rendendo molto
più semplice la gestione della WLAN (soprattutto nel caso si abbiano molti
utenti che devono accedervi).
Un altro possibile sistema è quello di lasciare le trasmissioni wireless in
chiaro, limitandosi all’autenticazione degli utenti per accedere alla WLAN, e
rimandare la cifratura ai protocolli degli strati superiori, per esempio utilizzando IPsec oppure SSL; se da un lato è vero che sempre più applicazioni
che trattano dati riservati utilizzano protocolli sicuri (come HTTPS) e garantiscono già loro la sicurezza su tali dati, d’altra parte esistono ancora
numerose applicazioni che non prevedono protocolli sicuri (ad esempio alcuni
server di posta accettano ancora la password di autenticazione trasmessa in
chiaro), perciò alcuni dati riservati potrebbero transitare in chiaro sulla rete
wireless; inoltre, anche escludendo che possano essere trasmesse password in
chiaro, la maggior parte dei dati scambiati in rete, le pagine web visitate o le
e-mail inviate, transitano in chiaro, e sembra comunque inopportuno che un
malintenzionato (o semplicemente una persona un po’ troppo curiosa) possa
vedere le attività di rete di un utente, monitorando il suo traffico wireless.
82
WPA2-PSK
WPA2 può essere utilizzato in due modi: con chiave condivisa oppure
con lo standard 802.1x. Con la sigla WPA2-PSK si intende WPA2 utilizzato
con chiave condivisa (PSK stà per Pre-Shared Key): l’access point viene
configurato con una determinata chiave, dopodiché ogni dispositivo che vuol
accedere alla rete WiFi, tramite quell’access point, deve essere configurato
con la stessa chiave, altrimenti la connessione viene rifiutata. Se la chiave
viene scelta abbastanza complessa (ad esempio non una parola comune, ma
una composizione di numeri e lettere sufficentemente lunga) e viene periodicamente cambiata, questo sistema assicura un buon metodo di autenticazione,
difficilmente aggirabile, ed anche un ottimo livello di sicurezza poiché la
trasmissione viene cifrata utilizzando la chiave condivisa. Purtroppo è abbastanza evidente che può funzionare bene solo in ambienti piccoli, come
abitazioni domestiche o piccoli uffici, dove si può conoscere a priori tutti i
dispositivi che devono accedere alla rete, in modo da poter impostare, ed
eventualmente cambiare, la chiave condivisa; per questo motivo non ci soffermeremo oltre su questo metodo di autenticazione. Bisogna però sottolineare
che solo i sistemi operativi più moderni supportano nativamente lo standard
WPA2.
Da notare che esiste anche WEP-PSK ma, per i motivi citati in precedenza,
il protocollo WEP non si può considerare un sistema che garantisca un livello
di sicurezza accettabile.
PPPoE
Una soluzione al problema dell’autenticazione, in un ambiente con molti
utenti da gestire, è di sfruttare il protocollo PPP, in particolare PPPoE (PPP
over Ethernet). PPPoE è un protocollo per connessioni punto-punto che
permette di incapsulare il protocollo PPP in un frame Ethernet. È molto
utilizzato dagli ISP (Internet Service Provider) perché permette di autenticare
gli utenti e gestirne le connessioni. Utilizzando questo protocollo per gestire
l’autenticazione non è necessario il supporto di 802.1x (previsto da WPA2),
implementato solo negli ultimi sistemi operativi, inoltre la configurazione del
client che accede alla rete WiFi è sicuramente più semplice rispetto a 802.1x.
È possibile utilizzare PPPoE per gestire l’autenticazione al WiFi attraverso
un’infrastruttura come quella illustrata in figura 5.3.
83
Figura 5.3: Esempio di infrastruttura per l’autenticazione al WiFi con PPPoE
Come si può notare l’autenticazione viene rimandata ad un server RADIUS, che a sua volta utilizza LDAP per verificare le informazioni di autenticazione, mantenendo la gestione utenti in un unico punto centrallizzato. Nel
NAS è presente un server PPPoE2 ed un client RADIUS. Il server PPPoE
accetta le richieste di autenticazione provenienti dall’access point, che possono
essere fatte utilizzando il protocollo CHAP (Challenge-Handshake Authentication Protocol) oppure con MS-CHAPv2 (Microsoft CHAP v2). Il client
RADIUS mette in comunicazione il server PPPoE con il server RADIUS per
inoltrare le richieste di autenticazione, utilizzando lo stesso protocollo (CHAP
o MS-CHAPv2). Per aumentare la sicurezza può essere usato un protocollo
per cifrare i dati, come MPPE3 (Microsoft Point-to-Point Encryption), sia
per la comunicazione wireless (tra WT e AP), sia nella comunicazione tra
l’AP e il NAS.
Con questo sistema risulta molto semplice configurare un client per poter
autenticarsi, basta infatti configurare la rete in modo da utilizzare PPPoE
ed inserire username e password, e nella maggior parte dei sistemi operativi,
anche in quelli un po’ vecchi, è un’operazione molto semplice.
2
Un buon server PPPoE per ambiente Linux è Roaring Penguin PPPoE (rp-pppoe);
in ambiente Windows si può invece utilizzare RAS (Remote Access-Server).
3
MPPE non è però supportato da tutti i sistemi operativi, in particolar modo è poco
compatibile con Linux.
84
802.1x
Nello standard WPA2 per la sicurezza nelle reti wireless è previsto che
venga utilizzato 802.1x per gestire l’autenticazione. Questo sistema offre un
notevole livello di sicurezza ed anche una grande flessibilità, poiché permette
di gestire svariati metodi di autenticazione.
IEEE 802.1x è uno standard per l’autenticazione e l’autorizzazione in
rete, sviluppato in origine per reti wired, basato sul protocollo EAP (Extensible Authentication Protocol) per l’autenticazione. Sono previste tre entità
(figura 5.4):
• Authenticator: entità che richiede l’autenticazione prima di offrire un
servizio (nel nostro caso l’access point).
• Supplicant: entità che vuole accedere al servizio e dev’essere autenticata
(nel nostro caso il wireless terminal).
• Authentication server: entità che si occupa di verificare le credenziali del
supplicant a nome dell’authenticator (nel nostro caso il server RADIUS).
Figura 5.4: Schema di una infrastruttura per l’autenticazione al WiFi con
802.1x
L’autenticazione avviene tramite il protocollo EAP, che permette di
negoziare diversi metodi di autenticazione, i principali sono EAP-MD5, EAPTLS, EAP-TTLS e PEAP, già descritti nel paragrafo 3.3.3.
85
Durante il processo di autenticazione l’AP (authenticator) ha un ruolo
passivo, si occupa solo di prendere i messaggi provenienti dal WT (supplicant),
contenuti nel protocollo EAP, e metterli nel protocollo RADIUS per inoltrarli
al server (authenticator server) e viceversa. Il WT si può fidare dell’AP come
se si fidasse direttamente del server RADIUS perché AP e server RADIUS
condividono una chiave segreta utilizzata nelle loro comunicazioni. Se infine il
server RADIUS verifica con successo le credenziali, allora il WT è autenticato
e può acedere al servizio WiFI, altrimenti gli viene rifiutata la connessione.
La sicurezza di questo sistema varia a seconda del metodo di autenticazione
utilizzato, in genere sono utilizzati EAP-TLS per utilizzare i certificati X.509,
oppure PEAP per poi utilizzare MS-CHAPv2 con username e password.
PPPoE vs. 802.1x
Lo standard 802.1x ha grandi vantaggi: dà la possibilità di scegliere
il metodo di autenticazione, lo si può usare con certificati digitali e smart
card oltre, ovviamente, a username e password, usando EAP-TLS o PEAP
garantisce ottimi livelli di sicurezza ed è previsto dal nuovo standard di
sicurezza del WiFi, perciò sarebbe in assoluto da preferire a PPPoE. Purtroppo
è supportato nativamente solo negli ultimi sistemi operativi4 , percui tutti
gli utenti che hanno un sistema operativo di qualche anno fa’ si vederebbero
costretti ad installare software apposta, o esclusi dal servizio WiFi; per quanto
riguarda invece gli access point, ormai è diversi anni che viene supportato lo
standard WPA2 (quindi anche 802.1x), ma hardware troppo vecchio rischia
di non supportare questo standard.
PPPoE non è un sistema di autenticazione standard, ma è compatibile con
la maggior parte dell’hardware e con praticamente tutti i sistemi operativi;
anche il sistema basato si PPPoE però non manca di difetti, infatti il protocollo
di cifratura MPPE non è supportato da tutti i sistemi operativi e MS-CHAPv2,
utilizzato da solo (senza un tunnel cifrato), non è il massimo della sicurezza.
In definitiva WPA2 è sicuramente il futuro per quanto riguarda la sicurezza
WiFi, ma utilizzarlo come unico metodo di autenticazione rischia di tagliare
fuori parecchi utenti dal servizio wireless.
4
In ambiente windows è supportato da Windows XP SP3 in poi.
86
5.4.3
VPN
Nei capitoli precedenti abbiamo descritto cos’è una VPN. Quando un
utente prova ad accedervi per prima cosa viene creato un tunnel cifrato tra il
client (l’utente) e il server VPN. Una volta creato un tunnel cifrato con il
server VPN, l’utente dev’essere autenticato per accedere effettivamente alla
rete privata. Per fornire le credenziali di accesso al server VPN, può essere
utilizzato uno dei seguenti protocolli: CHAP, MS-CHAPv2 oppure EAP.
In praticamente tutti i server VPN è possibile specificare il meccanismo
di autenticazione; se viene fatta utilizzando username e password, può essere
impostato l’inoltro ad un server RADIUS per verificare le credenziali (che a
sua volta si riferirà al server LDAP). L’autenticazione può essere fatta anche
attraverso certificati digitali X.509, in questo caso il server VPN cercherà di
verificarne l’autenticità attraverso una Certification Authority.
Dopo che l’utente è autenticato, tramite il server RADIUS è possibile
gestirne l’autorizzazione al servizio VPN, impostando, per esempio, l’indirizzo
IP locale assegnato all’utente, la durata massima di una sessione oppure il
traffico massimo che può essere fatto.
Protocolli di tunneling
Non esiste uno standard per VPN, perciò ogni sistema può utilizzare il
protocollo che ritiene più opportuno. I protoccolli più utilizzati per creare un
tunnel sicuro sono i seguenti:
• IPsec (IP security): probabilmente il protocollo5 più utilizzato, agisce a
livello network e garantisce l’autenticazione, la confidenzialità (ovvero
la cifratura sicura del messaggio) e il controllo di integrità. Con IPSec
NAT-T è possibile anche utilizzare una VPN con un client dietro un
dispositivo NAT.
• PPTP (point-to-point tunneling protocol): sviluppato da Microsoft,
assicura autenticazione, criptazione e compressione dei dati. Utilizza
MPPE per la cifratura e può attraversare la maggior parte dei dispositivi
NAT.
5
In realtà si tratta di un insieme di protocolli, ognuno per gestire un preciso problema,
come lo scambio di chiavi o la cifratura del pacchetto.
87
• Secure Sockets Layer (SSL) / TLS: un’altro protocollo molto utilizzato
che assicura un ottimo livello di sicurezza. Garantisce confidenzialità e
integrità dei messaggi trasmessi.
• L2TP (Layer 2 Tunnelling Protocol): protocollo che agisce a livello
data-link, sviluppato da Microsoft e Cisco. Dev’essere associato ad
un altro protocollo per implementare autenticazione, confidenzialità e
integrità dei dati, in genere IPsec.
5.4.4
Risorse web
Ovviamente in molte risorse web è necessario controllare l’accesso per
limitarne l’utilizzo solo a utenti “conosciuti”. Siccome questi servizi sono
tutti accessibili tramite un browser web, un sistema di SSO, che offre diversi
vantaggi, risulta relativamente semplice da implementare, percui molto adatto
per gestirne l’accesso. Se il servizio web è però uno solo, diventa inutile ed
eccessivo implementare un sistema di SSO, è infatti sufficente interfacciare
l’applicazione web direttamente con il server LDAP per il processo di autenticazione. Come già detto LDAP è ormai uno standard e diventerà sempre
più diffuso per la gestione centralizzata degli utenti, per questo motivo le
maggiori tecnologie per lo sviluppo di applicazioni web, come PHP, JSP, ASP
e altre ancora, hanno librerie che permettono di interrogare il server LDAP,
anche in modo sicuro usando connessioni cifrate. Utilizzando una di queste
tecnologie si possono quindi scrivere applicazioni web che utilizzano LDAP
per l’autenticazione. Inoltre anche diversi CMS (tra cui drupal e joomla
per php) permettono l’autenticazione tramite un server LDAP. Infine anche
nei server web, come apache e tomcat, è possibile abilitare l’autenticazione
degli utenti, per accedere a determinate directory, utilizzando le informazioni
contenute in un server LDAP.
CAS e SSO
CAS (JA-SIG Central Authentication Service) è un servizio di SSO per
web, sviluppato come progetto open-source dall’università di Yale. Di seguito
viene illustrato il funzionamento di CAS senza però entrare nei dettagli (figura
5.5):
1. Un client cerca di accedere ad un servizio web.
88
Figura 5.5: Autenticazione ad una risorsa web tramite CAS.
2. Il servizio redirige il client all’URL del CAS, su una connessione sicura
HTTPS.
3. Il client effettua il login al server CAS. Finché l’autenticazione fallisce
rimane “bloccato” nella pagina di login.
4. Quando il login ha successo, il server CAS redirige il client alla risorsa iniziale, spedendo al browser web un cookie contenente un ticket
identificativo (Ticket-Granting Cookie).
5. Il browser del client fornisce il cookie all’applicazione.
6. L’applicazione verifica tramite il server CAS che il ticket sia valido.
7. Se il ticket è valido viene fornito il servizio richiesto.
8. Il client può ora accedere ad altri servizi web associati al CAS senza
dover autenticarsi, verrà semplicemente ricontrollato il ticket.
Il server CAS può essere configurato in modo da prendere le informazioni
di autenticazione degli utenti dal server LDAP.
Un grande svantaggio di CAS è che si limita a gestire l’autenticazione,
mentre alcune applicazioni web possono avere bisogno di informazioni per
l’autorizzazione, o in generale di ulteriori informazioni sull’utente autenticato
(oltre allo username), e per far questo è necessario trovare altre soluzioni, ad
esempio implementando un web service interfacciato con il server LDAP al
quale i servizi web si rivolgono per le informazioni sugli utenti.
89
Shibboleth
Un’altra soluzione, sempre più diffusa, è Shibboleth: un progetto opensource realizzato dal consorzio Internet2 per la creazione di una infrastruttura
di autorizzazione e autenticazione federata. Attraverso Shibboleth è possibile
creare un sistema di SSO per accedere ai servizi web resi disponibili dalla
federazione, utilizzando le informazioni di autenticazione degli utenti mantenute solamente all’interno dell’organizzazione di afferenza. Come CAS quindi
fornisce un sistema di SSO, ma in più ne permette l’utilizzo in ambiente federato. Inoltre permette ai fornitori di servizi di poter prelevare direttamente
informazioni sull’utente (percui di gestire facilmente anche l’autorizzazione),
a differenza di CAS che permette di sapere solamente l’username dell’utente
autenticato.
Fondamentalmente ci sono tre entità in gioco:
• IdP (Identity Provider): componente che serve per il processo di
autenticazione, reso disponibile dall’organizzazione di appartenenza
dell’utente.
• SP (Service Provider): fornitore del servizio a cui si può accedere
attraverso Shibboleth.
• WAYF (Where Are You From?): servizio tipicamente gestito dalla
Federazione che permette all’utente di indicare la sua organizzazione
durante il processo di autenticazione.
Il funzionamento, illustrato in figura 5.6, è il seguente:
1. L’utente, attraverso il suo browser web, cerca di accedere ad un servizio
fornito da un SP.
2. Il servizio rileva che l’utente non ha una sessione Shibboleth attiva
(altrimenti lo farebbe accedere senza ripetere l’autenticazione) e lo
redirige al servizio WAYF.
3. WAIF visualizza una pagina web nel browser dell’utente in cui si deve
scegliere l’organizzazione di afferenza (fra quelle che forniscono un IdP).
4. L’utente seleziona la sua organizzazione.
5. WAIF redirige l’utente alla pagina di autenticazione dell’IdP dell’organizzazione selezionata.
90
Figura 5.6: Schema di funzionamento di Shibboleth.
6. L’IdP visualizza la pagina di autenticazione.
7. L’utente fornisce le sue credenziali di accesso, che possono essere
una coppia username-password, ma anche un certificato digitale o
un identificatore biometrico.
8. L’IdP redirige l’utente al servizio richiesto inizialmente, e consegna al
browser dell’utente una handle che a sua volta consegnerà al SP.
9. La handle viene utilizzata dal SP per reperire in modo sicuro degli
attributi sull’utente dall’IdP.
10. L’IdP spedisce gli attributi richiesti al SP. Ora l’utente è autenticato
presso il servizio richiesto inizialmente e il servizio ha ottenuto le
informazioni sull’utente che gli servivano.
Per il processo di autenticazione l’IdP Shibboleth può esere configurato per
reperire le informazioni direttamente dal server LDAP, oppure può utilizzare
altri strumenti, ad esempio CAS (che a sua volta si appoggia al server LDAP).
5.4.5
Posta elettronica
Come già detto in precedenza, questa risorsa la si può scomporre in due
parti: il server SMTP (MTA, mail transfer agent), che si occupa di inviare e
91
recapitare la posta al destinatario, e il servizio di consultazione della mailbox
(MAA, mail access agent), ovvero il server POP3 o IMAP.
L’autenticazione per queste risorse è fondamentale, infatti si vuol impedire
ad utenti anonimi di utilizzare il server SMTP, ma soprattutto è necessario
impedire l’accesso a mailbox private senza prima essersi autenticati. Sia nel
protocollo SMTP, che nei protocolli IMAP e POP3 è previsto un meccanismo
di autenticazione6 , ed è fortemente consigliato utilizzare solo le varianti sicure
di questi protocolli (SMTPS, POP3S, IMAPS), cioè con l’utilizzo di TLS,
per proteggere la trasmissione di dati riservati.
I principali mail server, come sendmail, postfix e qmail, prevedono, se
opportunamente configurati, l’utilizzo di LDAP per reperire le informazioni
di autenticazione. Questo supporto di LDAP molto diffuso nei mail server è
dovuto al fatto che sono molto frequenti le operazioni di lettura dei dati di
autenticazione, e i server LDAP sono ottimizzati proprio per queste operazioni.
Come al solito è opportuno abilitare il protocollo TLS nella comunicazione
con il server LDAP per garantire la sicurezza dei dati.
5.4.6
Windows e Linux
Vediamo infine la gestione dell’accesso a postazioni PC. Descriviamo una
possibile infrastruttura che utilizzi LDAP per reperire le informazioni degli
utenti, considerando i casi dei due sistemi operativi più diffusi: Windows e
Linux.
Windows
In ambiente Windows un server al quale i client di una rete si connettono
per il recupero degli account è chiamato PDC (Primary Domain Controller).
Un PDC funziona attraverso il protocollo SMB (chiamato anche CIFS) di cui
SAMBA è una implementazione libera per Linux. Tramite SAMBA è quindi
possibile implementare un PDC su un server Linux.
SAMBA offre diverse funzionalità, come la condivisione di file system,
accessibile sia da client Windows che da client Linux, o la condivisione di
stampanti, ma, soprattutto, offre la possibilità di gestire l’autenticazione di
92
Figura 5.7: Clients Windows configurati per autenticare gli utenti tramite il
server SAMBA, che a sua volta prende gli attributi degli utenti dal server
LDAP.
sistemi Windows in modo centralizzato e può essere collegato ad un server
LDAP per reperire le informazioni degli utenti (figura 5.7).
Nel server LDAP è necessario aggiungere lo schema samba.schema (ottenibile da sito ufficiale di samba) e, ad ogni utente presente nel server LDAP
a cui si vuol concedere l’autenticazione a PC Windows, aggiungere le objectclass contenute in questo schema. Tra gli altri attributi di questo schema
ci sono sambaNTPassword e sambaLMPassword, nei quali va memorizzata la
password di accesso dell’utente (uguale a quella contenuta in userPassword).
Tra i vari software presenti in SAMBA c’è smbldap-tools, un insieme di
tools scritti in perl che permettono di creare e gestire utenti e gruppi in un
server LDAP in modo da poterli utilizzare con un server SAMBA.
Nei client Windows si deve impostare il dominio uguale a quello impostato
nel server SAMBA, in questo modo, quando un utente accede ad un PC
Windows, vengono verificate le credenziali di accesso (username e password)
attraverso il server SAMBA, che a sua volta le andrà a prelevare dal server
LDAP.
Per garantire che le password e i dati riservati non transitino in chiaro sulla
rete si può configurare il server SAMBA in modo da instaurare una connessione
cifrata attraverso TLS con il server LDAP. Dal lato client Windows, invece,
può essere impostato, nel server SAMBA, la trasmissione di password cifrate
(figura 5.7).
6
In realtà nel protocollo SMTP originale non è prevista l’autenticazione, è stata però
aggiunta con l’estensione SMTP-AUTH.
93
Figura 5.8: Connessioni sicure con SAMBA.
Linux
Nei sistemi Linux esistono i moduli PAM (Pluggable Authentication
Module) per gestire l’autenticazione. Questi moduli permettono di integrare
più sistemi di autenticazione di basso livello in una unica API di alto livello,
in modo che le applicazioni possano usare le API di alto livello ed essere
indipendenti dal metodo di autenticazione utilizzato. PAM è supportato
anche nei sistemi BSD, MacOS X e Solaris.
Tra questi moduli è presente il modulo pam_ldap che permette di autenticare gli utenti con i dati presenti in un server LDAP. Per configurare il client
Linux in modo che utilizzi LDAP per autenticarsi è necessario installare e
configurare le librerie libpam-ldap e libnss-ldap, la prima necessaria per
impostare correttamente i moduli PAM, la seconda permette di modificare
il file nsswitch.conf in modo che il client Linux consideri utenti locali gli
utenti presenti nel server LDAP.
Figura 5.9: Autenticazione di client Linux sfruttando direttamente il server
LDAP.
In LDAP è necessario aggiungere le object-class account, posixAccount
94
e shadowAccount ad ogni utente al quale si vuol concedere l’accesso ai PC
Linux. L’utility cpu (Change Password Utility) permette di aggiungere e
modificare gli utenti nel server LDAP in modo semplice e intuitivo.
Per garantire un certo livello di sicurezza per la trasmissione di dati
riservati, come si è fatto per la connessione tra il server SAMBA e LDAP, è
possibile configurare i moduli PAM in modo da instaurare una connessione
con TLS tra il client Linux e il server LDAP.
Un altro modo per gestire l’autenticazione nei client Linux è di utilizzare
il server SAMBA (che a sua volta utilizza il server LDAP) come per i
client Windows; questo metodo è disponibile dalla versione 2.2.2 di SAMBA
attraverso il demone winbindd lato server; dal lato client, invece, vanno
opportunamente configurati i moduli PAM e il file nsswitch.conf in modo da
utilizzare la libreria Winbind (presente nel pacchetto SAMBA).
5.4.7
Schema del progetto
Figura 5.10: Schema di tutte le risorse illustrate in precedenza, con uno
sguardo anche ai protocolli di sicurezza utilizzati.
Vediamo allora, nella figura 5.10, uno schema nel quale sono rappresentati
tutte le risorse descritte in precedenza, con i collegamenti che rappresentano
lo scambio delle informazioni di autenticazione e autorizzazione, evidenziando
anche i protocolli sicuri utilizzati per trasmettere i dati riservati. Da notare che
95
tutte le risorse, in modo diretto o indiretto, prelevano le informazioni di accesso
dal server LDAP che implementa perfettamente uno IAM centralizzato.
5.5
Trasmissione sicura dei dati riservati
In una infrastruttura di autenticazione e autorizzazione è previsto che
vengano spesso trasmessi dati riservati, come le password degli utenti al
momento dell’autenticazione, si vuole perciò essere sicuri che questi dati non
possano essere intercettati e letti da persone malintenzionate. Per far questo,
ogni risorsa, deve utilizzare dei sistemi di sicurezza appropriati, per esempio
possono essere utilizzati protocolli sicuri che cifrano la trasmissione di dati.
Questi sistemi di sicurezza, relativi ad ogni risorsa, sono stati trattati in
dettaglio nel paragrafo precedente, vediamone un rapido riassunto:
LDAP
Ogni connessione con il server LDAP deve avvenire utilizzando protocolli
sicuri come SSLv3 o TLSv1, supportati entrambi da OpenLDAP. Inoltre
è opportuno creare un utente specifico, con permessi appropriati, per ogni
tecnologia per l’accesso che utilizza i dati degli utenti e, ovviamente, configuare
la tecnologia in questione per accedere ad LDAP con il suo particolare utente.
Per esempio si può creare un utente “radius” in OpenLDAP, con permessi in
sola lettura sui dati degli utenti, e configurare freeRADIUS per accedere a
OpenLDAP instaurando una connessione TLS e autenticandosi come utente
“radius”.
Per proteggere i dati memorizzati sul server LDAP stesso si possono
definire delle apposite ACL (Access Control List), anche molto complesse,
che possono regolare l’accesso anche sul singolo attributo.
RADIUS
Il server RADIUS è utilizzato dal WiFi e da VPN, per entrambi si può
utilizzare il protocollo PEAP per effettuare l’autenticazione tramite username
e password.
96
WiFi
Come già detto in precedenza, le connessioni wireless possono essere un
vero problema per la semplicità con cui si può intercettare una comunicazione. Utilizzando lo standard WPA2 per l’autenticazione e la cifratura delle
trasmissioni si riesce ad ottenere un ottimo livello di sicurezza.
VPN
Per creare il tunnel VPN può essere utilizzato IPsec, mentre per l’autenticazione con username e password il protocollo PEAP che viene inoltrato al
server RADIUS.
SAMBA
Nel protocollo SAMBA è previsto che possano essere trasmesse le password
cifrate per l’autenticazione dei PC Windows.
CAS
Tutte le autenticazioni dei servizi WEB avvengono tramite il server CAS.
Con questo sistema è già previsto l’utilizzo del protocollo HTTPS (HTTP
con TLS) per la trasmissione delle credenziali di autenticazione.
5.6
Gestione del carico: affidabilità e performance
Due problemi da non sottovalutare per un sistema con molteplici risorse
web, posta eletronica, accesso alla rete e laboratori informatici, con un alto
numero di utenti che utilizza queste risorse, sono affidabilità e performance.
Un sistema informatico che non dà continuità di servizio oppure risponde in
tempi inaccettabili, in cui gli utenti periodicamente non possono accedere
alle risorse informatiche perché la gestione dell’accesso non è disponibile o
bisogna aspettare diversi minuti prima di potervi accedere, è di fatto un
sistema inutile. Vediamo allora come possiamo gestire queste problematiche.
Diremo che un sistema è disponibile se i suoi utenti possono disporne
sottomettendo nuovo lavoro, modificando lavori già esistenti o recuperando i
risultati di lavori sottomessi precedentemente. Se anche solo una di queste
azioni non è possibile, allora il sistema non è disponibile.
97
Diremo inoltre che il bilanciamento del carico è la capacità di un
sistema informatico di aumentare o diminuire la propria capacità elaborativa
in base al numero di clienti che richiedono il servizio. Questa capacità può
essere raggiunta utilizzando due modalità operative:
• Senza direttore, ovvero i client accedono direttamente al pool di
risorse disponibili.
• Con direttore, ovvero un server è incaricato di raccogliere le richieste
dell’utente e di indirizzarle al server che le soddisferà.
Con il termine downtime intendiamo il tempo in cui il sistema non è
disponibile. La non disponibilità può essere dovuta a diverse cause:
• Fenomeni ambientali (interruzione dell’energia elettrica, blocco del
condizionamento, eventi fisici eccezionali).
• Guasti hardware ai sistemi.
• Interruzione della connettività.
• Malfunzionamento del software (indisponibilità dei sistemi di frontend,
degli application server, dei database).
Per la gestione dell’alta disponibilità ed il bilanciamento del carico a
livello applicativo utilizziamo due strumenti:
• Heartbeat
• Linux Virtual Server
5.6.1
Heartbeat
Heartbeat è un sistema molto semplice che, date due macchine, permette
di spostare molto velocemente uno o più indirizzi IP da una macchina all’altra
ed attivare o disattivare uno o più servizi su una o l’altra macchina. La
configurazione può essere di tipo attivo/passivo o attivo/attivo.
In una configurazione attivo/passivo, solamente una delle due macchine è
utilizzata per erogare il servizio. Le due macchine possono tenersi in contatto
sia tramite un cavo seriale, sia tramite la rete su cui erogano i servizi oppure
attraverso una rete privata interna.
98
In caso di guasto, l’indirizzo IP del servizio viene spostato dalla macchina
fallita alla macchina superstite. Contemporaneamente possono essere attivati
uno o più servizi sulla macchina superstite.
In una configurazione attivo/attivo, entrambe le due macchine erogano
il servizio. L’erogazione di un medesimo servizio su più indirizzi IP può
essere realizzata definendo più indirizzi IP per lo stesso nome host. In caso di
fallimento, l’indirizzo IP della macchina fallita viene spostato sulla macchina
superstite che assume entrambi gli indirizzi.
Per monitorare le disponibilità di un servizio esiste un tool molto potente
chiamato MON, che compie determinate azioni (dal semplice PING all’analisi
di un risultato di una transazione a livello applicativo) al verificarsi di
condizioni stabilite. Inoltre MON può essere configurato per spedire un’email,
attivare un ticket di assistenza oppure scatenare il failover di un sistema di
alta disponibilità come Heartbeat.
5.6.2
Linux Virtual Server
L’obiettivo di Linux Virtual Server Project è quello di fornire un
framework di base per la costruzione di servizi di rete scalabili e ad alta
disponibilità utilizzando dei comuni server.
Linux Virtual Server è implementato direttamente nel kernel e sono
disponibili tre diversi sistemi di bilanciamento:
• Virtual Server via NAT
• Virtual Server via IP Tunneling
• Virtual Server via Direct Routing
Linux Virtual Server ha al suo interno diversi algoritmi di schedulazione:
• Round-Robin
• Weighted Round-Robin
• Least-Connection
• Weighted Least-Connection
• Locality-Based Least-Connection
• Locality-Based Least-Connection with Replication
99
• Source Hashing
• Destination Hashing
• Shortest Expected Delay
• Never Queue
5.6.3
Architettura per il bilanciamento del carico
Vediamo come possiamo utilizzare Heartbeat e Linux Virtual Server per
risolvere le problematiche del nostro progetto.
Una soluzione è disporre due server Linux Virtual Server. I due server
sono configurati in un cluster-HA attivo/passivo, quindi uno dei nodi
esegue effettivamente il servizio e l’altro è pronto a rilevarlo in caso di
malfunzionamento.
I software usati sono:
• ipvs + ipvsadm (i software del progetto Linux Virtual Server, rispettivamente modulo del kernel e utilità di gestione);
• Heartbeat e ldirectord (software del progetto Linux-HA che serve a
configurare il load balancing e controllare lo stato dei server che offrono
i servizi, ovvero i real server).
Prima di questa soluzione architetturale, i client che avevano bisogno dei
servizi puntavano direttamente ai server, mal bilanciando il carico di richieste.
Usando Linux Virtual Server le richieste ai vari server vengono distribuite
in maniera più che accettabile, al contrario prima si cercava di sopperire a
tale mancanza per esempio impostando i vari client LDAP per interrogare
preferenzialmente un certo server invece che un altro. Si potrebbero migliorare
ulteriormente le cose impostando meccanismi più sofisticati di monitoraggio
del carico dei real server.
I vantaggi dati dall’uso di questa architettura ricadono anche in termini
di sicurezza e affidabilità, difatti gli IP dei real server non appaiono mai, ma
appaiono solo quello del servizio (che risisede sul load balancer), in questo
modo facendo scansioni all’IP dei servizi l’unica porta che si trova aperta
è quella del servizio stesso. Il miglioramento in termini di affidabilità è la
ragione principale che porta a una soluzione di questo tipo. I metodi usati
in precedenza per garantire l’affidabilità non si son dimostrati adeguati. Per
100
quel che riguarda LDAP, per esempio, i client erano configurati per contattare
un altro server in caso di mancata risposta del primario, solo che l’attesa
del timeout fra la richiesta al primario e quella al secondario penalizzava
eccessivamente le prestazioni.
Con Linux Virtual Server i real server vengono tenuti costantemente
sotto controllo e in caso di non disponibilità di uno dei real server tutte le
connessioni vengono reindirizzate agli altri.
L’unica alternativa a Linux Virtual Server che è stata valutata è un load
balancer hardware, che si è dimostrato meno flessibile (funzionamento solo in
modalità natting e possibilità di monitorare un numero esiguo di servizi) in
quanto pensato soprattutto per i server web.
Con questa soluzione quindi si risolvono problemi di carico e di danneggiamento dei server, quindi di affidabilità e performance.
5.7
IDEM: federazione della rete GARR
IDEM (IDEntity Management) è un progetto pilota del GARR per la
realizzazione di una AAI federata per le organizzazioni afferenti. Grazie a
questo progetto sarà possibile utilizzare una procedura standard di autenticazione per l’accesso ai servizi della rete dove ogni utente avrà una chiave
d’accesso unica. I vantaggi offerti da una AAI federata sono descritti nel
paragrafo 2.2.
Ogni organizzazione che vuol partecipare al progetto dovrà realizzare
un Identity Provider Shibboleth (IdP), mentre ogni risorsa dovrà aderire
ad una serie di standard tecnici scelti dalla federazione. L’università di
Parma, siccome fa parte di questo progetto, deve fornire un IdP, illustrato
nel paragrafo 5.4.4.
5.7.1
Attributi IDEM
Per il funzionamento del progetto, in particolare per il corretto funzionamento dei fornitori di risorse, viene richiesta una standardizzazione degli
attributi tra i membri della federazione che forniscono un IdP, percui ogni
membro dovrà fornire un certo elenco di attributi stabiliti nel progetto IDEM
dal gruppo di lavoro GARR-AAI. Nella tabella seguente vengono riportati
gli attributi richiesti, con una breve descrizione del contenuto che dovranno
avere, e con l’object class LDAP alla quale appartengono. Da notare che
101
tutti gli attributi sono già presenti nel nuovo schema LDAP siccome le object
class utilizzate dal progetto IDEM sono già all’interno della struttura della
entry base (vedere a pagina 70).
Caratteristiche personali
Nome LDAP
Objectclass
Descrizione
Stato
sn
person
Cognome
opzionale
givenName
inetOrgPerson
Nome
opzionale
cn
person
Nome seguito da cognome
raccomandato
preferred
Language
inetOrgPerson
Lingua scritta o parlata preferita dal soggetto
raccomandato
schachMother
Tongue
schacPersonal
Characteristics
Lingua madre del soggetto
opzionale
title
organizational
Person
Titolo nel contesto dell’organizzazione. Es. “Direttore”,
“Responsabile Reparto X” ecc.
opzionale
schacPersonal
Title
schacPersonal
Characteristics
Titolo usato per salutare il soggetto. Es: Sig., Sig.ra, Dott.,
Prof.
opzionale
schacPersonal
Position
schacPersonal
Characteristics
Il codice rappresentativo dell’inquadramento della persona
all’interno dell’organizzazione
opzionale
Nome LDAP
Objectclass
Descrizione
Stato
mail
inetOrgPerson
Indirizzo eMail
raccomandato
telephoneNumber
person
Recapito telefonico ufficio
opzionale
mobile
inetOrgPerson
Recapito cellulare di servizio
opzionale
facsimile
TelephoneNumber
organizational
Person
Recapito fax
opzionale
schacUser
PresenceID
schacContact
Location
Recapiti relativi a diversi protocolli di rete
opzionale
eduPersonOrgDN
eduPerson
Il Distinguished Name (DN)
della entry che rappresenta
l’organizzazione di appartenenza alla quale la persona è
associata
opzionale
Contatti
102
Nome LDAP
Objectclass
Descrizione
Stato
eduPerson
OrgUnitDN
eduPerson
Il Distinguished Name (DN)
della entry che rappresenta l’unità organizzativa di appartenenza alla quale la persona è associata (ad esempio
Dipartimento)
opzionale
Autorizzazioni e accounting
Nome LDAP
Objectclass
Descrizione
Stato
eduPersonScoped
Affiliation
eduPerson
Affiliazione secondo le convenzioni descritte gruppo GARRAAI
obbligatorio
eduPerson
TargetedID
eduPerson
Identificativi anonimi persistenti per l’utente relativi ai
diversi Servizi
obbligatorio
eduPerson
Entitlement
eduPerson
URI (URN o URL) che indica
un diritto (standardizzato) di
accesso ad una risorsa
raccomandato
103
104
Capitolo 6
Conclusioni
Tramite questo progetto è quindi possibile realizzare una infrastruttura
di gestione dell’accesso centralizzata, mantenendo la tanto agognata identità
unica per ogni utente.
Facendo un rapido riassunto, si è realizzato un sistema IAM centralizzato, che semplifica l’amministrazione degli utenti e permette agli utenti
stessi di accedere a tutte le risorse informatiche utilizzando sempre le stesse
credenziali di accesso. Il progetto si è occupato di riorganizzare il server
IAM, mantenendo la ottima divisione in RDBMS-LDAP, ma cambiando la
gestione interna delle identità digitali. Inoltre si è mostrato come sia possibile centralizzare con il server IAM la gestione dell’accesso per ogni risorsa
informatica disponibile nell’università. Il tutto concentrandosi anche sulle
problematiche fondamentali di un sistema centralizzato: sicurezza, affidabilità
e performance.
Ovviamente sono da tenere conto gli impatti del progetto sugli utenti,
sui gestori delle risorse e sull’università. Per gli utenti l’impatto è nullo
oppure basso, comunque positivo, ai quali si semplifica l’accesso alle risorse
informatiche. Per i gestori delle risorse può essere medio-basso, poiché in
genere dovranno comunque aggiornare la gestione dell’accesso per il nuovo
sistema, a parte alcune risorse critiche che vengono gestite esternamente,
per esempio la posta elettronica degli studenti gestita dal CINECA, per
la quale non sarà più possibile separare i dati degli studenti da quelli dei
non-studenti, ma vi è la possibilità che le procedure del CINECA funzionino
ugualmente. Infine l’università non potrà che trarne vantaggi da una gestione
di questo tipo: la fornitura di nuove risorse può avvenire con minori sforzi, ed
105
in generale lo scopo del progetto è esattamente quello di semplificare l’intera
gestione degli utenti ed aumentare la produttività.
L’intero progetto tiene conto anche di eventuali sviluppi futuri. Oltre
alla possibilità di introdurre facilmente nuove risorse nel sistema, puntando
sull’estrema flessibilità di LDAP e sulla sua diffusione, si è tenuto conto
anche dell’introduzione di nuovi metodi di accesso, dei certificati digitali
soprattutto. Essendo il futuro, oramai anche molto vicino, l’introduzione
dei certificati digitali non comporta una rivoluzione del sistema di accesso.
Sarà infatti sufficente introdurre una PKI per il controllo del certificato
al momento dell’autenticazione, dopodiché, una volta verificata l’identità
dell’utente, il processo di autorizzazione rimane invariato. Il server LDAP
offre inoltre la possibilità di memorizzare i certificati digitali degli utenti,
permettendo in questo modo di mantenere la loro chiave pubblica assieme
alle altre informazioni sull’identità, in modo da poter sfruttare i certificati
digitali anche per la comunicazione (e la mutua autenticazione) fra utenti
all’interno dell’università.
106
Appendice A
Schema LDAP
Di seguito è riportato il nuovo schema LDAP definito durante il progetto.
###############################################################
#
#
# unipr.schema v: 20092201
#
#
#
# Definizione dello schema LDAP per l’Universita‘ di Parma
#
#
#
###############################################################
objectIdentifier unipr 1.3.6.1.4.14657.1.1
objectIdentifier uniprObjectClass unipr:2
objectIdentifier uniprAttributeType unipr:3
###############################################################
# Attributi
#
###############################################################
#
# uniprCodiceFiscale
#
attributetype ( uniprAttributeType:1
107
NAME ’uniprCodiceFiscale’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprLuogoDiDomicilio
#
attributetype ( uniprAttributeType:2
NAME ’uniprLuogoDiDomicilio’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprProvinciaDiDomicilio
#
attributetype ( uniprAttributeType:3
NAME ’uniprProvinciaDiDomicilio’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprStatoDiDomicilio
#
attributetype ( uniprAttributeType:4
108
NAME ’uniprStatoDiDomicilio’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprViaDiResidenza
#
attributetype ( uniprAttributeType:5
NAME ’uniprViaDiResidenza’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprCAPdiResidenza
#
attributetype ( uniprAttributeType:6
NAME ’uniprCAPdiResidenza’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprRuoliRicoperti
#
attributetype ( uniprAttributeType:7
109
NAME ’uniprRuoliRicoperti’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprMatricola
#
attributetype ( uniprAttributeType:8
NAME ’uniprMatricola’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprAnnoUltimoPagamento
#
attributetype ( uniprAttributeType:9
NAME ’uniprAnnoUltimoPagamento’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprAnnoPrimaImmatricolazione
#
attributetype ( uniprAttributeType:10
NAME ’uniprAnnoPrimaImmatricolazione’
110
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprAnnoLaureaTriennale
#
attributetype ( uniprAttributeType:11
NAME ’uniprAnnoLaureaTriennale’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprAnnoLaureaSpecialistica
#
attributetype ( uniprAttributeType:12
NAME ’uniprAnnoLaureaSpecialistica’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprCorsoLaurea
#
attributetype ( uniprAttributeType:13
NAME ’uniprCorsoLaurea’
111
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprIDSGEDipendente
#
attributetype ( uniprAttributeType:14
NAME ’uniprIDSGEDipendente’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprDataInizioRuolo
#
attributetype ( uniprAttributeType:15
NAME ’uniprDataInizioRuolo’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprDataFineRuolo
#
attributetype ( uniprAttributeType:16
NAME ’uniprDataFineRuolo’
112
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprProfilo
#
attributetype ( uniprAttributeType:17
NAME ’uniprProfilo’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprCategoria
#
attributetype ( uniprAttributeType:18
NAME ’uniprCategoria’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprStatoRuolo
#
attributetype ( uniprAttributeType:19
NAME ’uniprStatoRuolo’
113
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprIncarico
#
attributetype ( uniprAttributeType:20
NAME ’uniprIncarico’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprAree
#
attributetype ( uniprAttributeType:21
NAME ’uniprAree’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprSettore
#
attributetype ( uniprAttributeType:22
NAME ’uniprSettore’
DESC ’’
114
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprServizi
#
attributetype ( uniprAttributeType:23
NAME ’uniprServizi’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprSezioni
#
attributetype ( uniprAttributeType:24
NAME ’uniprSezioni’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprFuturaMatricola
#
attributetype ( uniprAttributeType:25
NAME ’uniprFuturaMatricola’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
115
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprAnnoPrimaImmatricolazioneFuturaMatricola
#
attributetype ( uniprAttributeType:26
NAME ’uniprAnnoPrimaImmatricolazioneFuturaMatricola’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprCorsoLaureaFuturaMatricola
#
attributetype ( uniprAttributeType:27
NAME ’uniprCorsoLaureaFuturaMatricola’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprFacoltaFuturaMatricola
#
attributetype ( uniprAttributeType:28
NAME ’uniprFacoltaFuturaMatricola’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
116
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprIDSGEProfessoreAContratto
#
attributetype ( uniprAttributeType:29
NAME ’uniprIDSGEProfessoreAContratto’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprCodiceSISAProfessoreAContratto
#
attributetype ( uniprAttributeType:30
NAME ’uniprCodiceSISAProfessoreAContratto’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprDataInizioRuoloProfessoreAContratto
#
attributetype ( uniprAttributeType:31
NAME ’uniprDataInizioRuoloProfessoreAContratto’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
117
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprDataFineRuoloProfessoreAContratto
#
attributetype ( uniprAttributeType:32
NAME ’uniprDataFineRuoloProfessoreAContratto’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprCodiceRuoloProfessoreAContratto
#
attributetype ( uniprAttributeType:33
NAME ’uniprCodiceRuoloProfessoreAContratto’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprProfiloProfessoreAContratto
#
attributetype ( uniprAttributeType:34
NAME ’uniprProfiloProfessoreAContratto’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
118
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprCategoriaProfessoreAContratto
#
attributetype ( uniprAttributeType:35
NAME ’uniprCategoriaProfessoreAContratto’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprStatoRuoloProfessoreAContratto
#
attributetype ( uniprAttributeType:36
NAME ’uniprStatoRuoloProfessoreAContratto’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SINGLE-VALUE
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
#
# uniprAreeProfessoreAContratto
#
attributetype ( uniprAttributeType:37
NAME ’uniprAreeProfessoreAContratto’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
119
)
#
# uniprSettoreProfessoreAContratto
#
attributetype ( uniprAttributeType:38
NAME ’uniprSettoreProfessoreAContratto’
DESC ’’
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
)
###############################################################
# ObjectClass
#
###############################################################
#
# uniprPersona
#
objectclass ( uniprObjectClass:1
NAME ’uniprPersona’
DESC ’Attributi base per un utente generico’
SUP inetOrgPerson
STRUCTURAL
MUST ( uniprIDIdentita $ sn $ givenName $
uniprCodiceFiscale $ mail )
MAY ( street $ postalCode $ uniprLuogoDiDomicilio $
uniprProvinciaDiDomicilio $ uniprStatoDiDomicilio $
postalAddress $ uniprViaDiResidenza $ uniprCAPdiResidenza $
l $ st $ homePostalAddress $ homePhone $ telephoneNumber $
mobile $ facsimileTelephoneNumber $ uniprRuoliRicoperti )
)
#
120
# uniprStudente
#
objectclass ( uniprObjectClass:2
NAME ’uniprStudente’
DESC ’Attributi per uno studente’
AUXILIARY
MUST ( uniprMatricola $ uniprCorsoLaurea $ ou )
MAY ( uniprAnnoUltimoPagamento $
uniprAnnoPrimaImmatricolazione $ uniprAnnoLaureaTriennale $
uniprAnnoLaureaSpecialistica )
)
#
# uniprDipendente
#
objectclass ( uniprObjectClass:3
NAME ’uniprDipendente’
DESC ’Attributi per un dipendente’
AUXILIARY
MUST ( uniprIDSGEDipendente $ employeeNumber $ employeeType )
MAY ( uniprDataInizioRuolo $ uniprDataFineRuolo $
uniprProfilo $ uniprCategoria $ uniprStatoRuolo $
uniprIncarico $ uniprAree $ uniprSettore $
departmentNumber $ uniprServizi $ uniprSezioni )
)
#
# uniprFuturaMatricola
#
objectclass ( uniprObjectClass:4
NAME ’uniprFuturaMatricola’
DESC ’Attributi per una futura matricola’
AUXILIARY
MUST ( uniprFuturaMatricola $
uniprCorsoLaureaFuturaMatricola $
uniprFacoltaFuturaMatricola )
121
MAY ( uniprAnnoPrimaImmatricolazioneFuturaMatricola )
)
#
# uniprProfessoreAContratto
#
objectclass ( uniprObjectClass:5
NAME ’uniprProfessoreAContratto’
DESC ’Attributi per una futura matricola’
AUXILIARY
MUST ( uniprIDSGEProfessoreAContratto $
uniprCodiceSISAProfessoreAContratto )
MAY ( uniprDataInizioRuoloProfessoreAContratto $
uniprDataFineRuoloProfessoreAContratto $
uniprCodiceRuoloProfessoreAContratto $
uniprProfiloProfessoreAContratto $
uniprCategoriaProfessoreAContratto $
uniprStatoRuoloProfessoreAContratto $
uniprAreeProfessoreAContratto $
uniprSettoreProfessoreAContratto )
)
###############################################################
# Fine di unipr.schema
#
###############################################################
122
Bibliografia
[1] Maria Andreetta.
Identity e access management. L’ora della
centralizzazione. Lineaedp.
[2] Paolo Atzeni, Stefano Ceri, Stefano Paraboschi, and Riccardo Torlone.
Basi di dati. Concetti, linguaggi e architetture. McGraw-Hill, 1996.
[3] Fabio Bucciarelli. LDAP, 2003. http://lia.deis.unibo.it/Courses/
AmmReti0304/ldap.pdf.
[4] Virginia Calabritto. Le Infrastrutture di Autenticazione e Autorizzazione
(AAI) e IDEM. Giugno 2008.
[5] Rocco De Marco. AAA in ambiente OpenSource: PPPoE, LDAP,
RADIUS, 2006.
[6] Giulio Destri. Introduzione ai sistemi informativi aziendali. Monte
Università Parma Editore, 2007.
[7] Fulvio Ferroni. Samba e OpenLDAP. Fulvio Ferroni, 2007.
[8] Luca
Ferroni.
Autenticazione
centralizzata
con
OpenLDAP.
http://www.bo.cnr.it/corsi-di-informatica/seminarioldap/
Autenticazione%20centralizzata%20con%20OpenLDAP.pdf.
[9] GARR. Infrastruttura di Autenticazione e Autorizzazione della rete
GARR. http://www.idem.garr.it/.
[10] Internet2.
Identity and Access Management, 2007.
http://www.
internet2.edu/pubs/200703-IS-MW.pdf.
[11] Giuseppe Lo Biondo. Gestione centralizzata delle utenze tramite LDAP,
2000. http://security.fi.infn.it/conferenze/fi00/ldap.pdf.
123
[12] Maria Laura Mantovani.
l’accesso ai servizi.
IDEntity Management federato per
Università di Modena e Reggio Emilia.
http://www.garr.it/eventiGARR/ws08/presentazioni/Tutorial%
20-%20IDEM/Mantovani_WSGARR08.pdf.
[13] Marco Panella. Identity and Access Management (IAM) e Authentication
and Authorization Infrastructure (AAI) in ambiente federato, 2008. www.
siti.unipr.it/?download=IAM_AAI_20080512.ppt.
[14] Giuseppe Paternò. Sicurezza Nelle Wireless LAN. Giuseppe Paternò,
2003.
[15] Giuseppe Paternò. Single Sign-On con Kerberos e LDAP. Giuseppe
Paternò, 2004.
[16] Antonio Radesca. OpenLDAP, 2002. http://www.dia.unisa.it/~ads/
corso-security/www/CORSO-0203/openLDAP.pdf.
[17] Eugenio
Rustico.
2007.
Identity
Management
Systems,
http://neodimio.files.wordpress.com/2008/05/
identity-management-systems.pdf.
[18] Stefano Sasso. Autenticazione degli utenti centralizzata con LDAP.
A.P.S. Faber Libertatis. http://faberlibertatis.org/w/images/b/
b3/Autenticazione_LDAP.pdf.
[19] Omar Schiaratura. Reti miste Linux-Windows con autenticazioni centralizzate. Novembre 2005. http://www.omarschiaratura.it/file/sec_
day2005.pdf.
[20] SWITCH. Authentication and Authorization Infrastructure (AAI). http:
//www.switch.ch/aai/.
[21] Andrew S. Tanenbaum. Reti di calcolatori. Pearson Education Italia,
2005.
[22] Wikipedia.
Identità digitale.
http://it.wikipedia.org/wiki/
Identit%C3%A0_digitale.
[23] Wikipedia.
Lightweight Directory Access Protocol.
wikipedia.org/wiki/Ldap.
124
http://en.
[24] Wikipedia. Single sign-on. http://en.wikipedia.org/wiki/Single_
sign_on.
125