LDAP (Lightweight Directory Access Protocol)

concetti di base

LDAP e' un protocollo standard per la gestione di servizi di directory

La definizione servizi di directory di solito non dice molto, quindi e' necessario fare un po' di chiarezza:

Per directory si intende un insieme di dati (il cui contenuto puo' essere di qualsiasi tipo) strutturati ad albero.

Ad esempio potremmo avere la directory amici che al suo interno contiene le directory maschi e femmine e ognuna di queste contiene N directory con i miei amici

    amici
   /    \
maschi  femmine
  |        |
edoardo   roberta
mirko     laura
mauro

Ogni directory e' identificata con una sintassi standard che viene definita Distinguished Name (DN) che permette con una stringa univoca di accedere direttamente a un nodo del nostro albero LDAP:

                                  amici (dc=amici)    /                                                                \ maschi (dc=maschi,dc=amici)                                    femmine (dc=femmine,dc=amici)   |                                                                        |  edoardo  (uid=edoardo,dc=maschi,dc=amici)                                roberta (uid=roberta,dc=femmine,dc=amici) mirko    (uid=mirko,dc=maschi,dc=amici)                                  laura   (uid=laura,dc=femmine,dc=amici) mauro    (uid=mauro,dc=maschi,dc=amici)    

...quindi per identificare la directory roberta all'interno del mio albero mi bastera' usare: uid=roberta,dc=femmine,dc=amici

Ma cosa sono quelle paroline uid e dc ?

Ad ogni directory si associano una serie di attributi, ad esempio alla directory roberta saranno associati gli attributi mail e telephoneNumber. E' importante capire che il nome stesso della directory (ad esempio roberta) e' un attributo che e' obbligatorio definire, quindi oltre a mail e telephoneNumber dovro' associare a roberta anche l'attributo uid.

Il DN quindi e' un percorso, composto dai vari DN delle directory superiori + l'attributo che scegliero' come DN della mia nuova directory.

Ad esempio:

La directory amici ha un attributo dc che e' settato (ovviamente) ad amici ed e' l'attributo che scelgo come DN.

La directory amici si potra' quindi riassumere con:

dn: dc=amici
dc: amici

...quindi ho il DN amici e l'attributo amici. A qualcuno potra' sembrare strano (o ridondante), ma e' sempre obbligatorio specificare l'attributo che poi sara' usato per definire il DN.

Definiamo ora femmine:

dn: dc=femmine,dc=amici
dc=femmine

...e ancora definiamo roberta:

dn: uid=roberta,dc=femmine,dc=amici
uid: roberta
mail: roberta@example.com
telephoneNumber: 99999999

Ma come so quali attributi usare ? e come mai una volta usi dc e poi uid ?

E' importante definire il concetto di Schema

Uno schema e' un insieme di regole che indicano quali attributi possono essere associati a una directory. Una delle funzioni piu' importanti del server LDAP e' verificare che una directory non violi le regole imposte da questi schemi.

E' necessario quindi specificare per ogni directory a quali schemi deve obbedire.

Molti schemi sono stati standardizzati ma nessuno vieta all'amministratore del sistema di definirne di nuovi. In questo documento utilizzeremo solo gli schemi standard.

Per specificare a quali schemi appartengono gli attributi di una directory, bisognera' specificarli uno ad uno nella directory stessa usando un attributo predefinito chiamato objectClass.

Ridefiniamo quindi la directory amici con una sintassi che sia accettata dal server LDAP:

dn: dc=amici
objectClass: top
objectClass: domain
dc=amici

Con questa sintassi ho specificato al server che la mia directory deve obbedire agli schemi top e domain.

Lo schema top e' lo schema che include tutti gli altri e sebbene non e' strettamente necessario specificarlo, e' buona norma farlo per evitare problemi con le varie implementazioni di server LDAP.

Lo schema domain invece definisce tra i vari attributi anche dc, quindi la nostra directory e' perfettamente valida e sara' aggiunta all'albero.

La sintassi usata fino ad adesso per rappresentare le directory e' standard e si chiama LDIF (LDAP Data Interchange Format). Vediamo quindi la rappresentazione LDIF della nostra struttura:

dn: dc=amici
objectClass: top
objectClass: domain
dc=amici
dn: dc=femmine,dc=amici
objectClass: top
objectClass: domain
dc=femmine
dn: uid=roberta,dc=femmine,dc=amici
objectClass: top
objectClass: account
objectClass: inetOrgPerson
uid: roberta
mail: roberta@example.com
telephoneNumber: 99999999

Lo schema account definisce uid mentre lo schema inetOrgPerson e' uno dei piu' diffusi e viene usato per definire gli attributi utili a immagazzinare i dati di un contatto in rete (email,telefono,nome,cognome....)

La maggior parte dei client di posta hanno una funzione per esportare la propria rubrica in formato LDIF, e' un ottimo trucco per studiare LDIF e alcuni degli schemi piu' utili.

Access Control List

LDAP utilizza degli oggetti (objectClass: simpleSecurityObject) definiti all'interno della directory per gestire gli accessi alla directory stessa.

Nel file di configurazione del server vengono inserite le regole in base alle quali gli utenti otterranno un diverso tipo di accesso (sola lettura, lettura e scrittura...) a partire dalla radice dell'albero o da un suo ramo.

Ricerca

Vediamo ora come effettuare una ricerca all'interno della directory dc=femmine,dc=amici sapendo che l'amministratore ha dato il permesso di lettura a questa directory (e di conseguenza a quelle sottostanti) solo al bind_dn uid=user,dc=amici con password pippo

Su un sistema unix like si puo' usare il comando ldapsearch, se non e' disponibile bisogna fare riferimento ai pacchetti della propria distribuzione (sulle debian e derivate e' ldap-utils)

Per effettuare una ricerca vanno definiti una base (ovvero una directory da cui iniziare la ricerca) e un 'qualcosa da cercare', oltre ovviamente alle proprie credenziali di accesso.

ldapsearch -x -h ldap.example.com -D 'uid=user,dc=amici' -w pippo -b 'dc=femmine,dc=amici' "mail=roberta@example.com"

il flag -x indica di utilizzare l'autenticazione standard di LDAP (l'alternativa e' il classico SASL)

il -h indica su quale server ldap effettuare la ricerca

il -D specifica il BIND_DN insieme al -w che specifica la password

il -b e' la base di ricerca

L'ultimo argomento e' la ricerca che vogliamo effettuare, la sintassi e' abbastanza chiara e semplice, stiamo chiedendo al sistema di fornirci la directory il cui attributo mail sia uguale a roberta@example.com

In caso non si specifichi una ricerca verranno elencate le directory presenti all'interno dell'albero a partire dalla base specificata.

E' possibile utilizzare filtri di ricerca piu' avanzati, potete consultare la documentazione di OpenLDAP per maggiori informazioni.

Unbit

Da Giugno 2007 e' iniziata l'integrazione di LDAP all'interno dei servizi Unbit.

Tutte le informazioni sul servizio sono raccolte nella pagina LdapUnbit

Ldap (l'ultima modifica รจ del 2007-08-27 11:09:32, fatta da MirkoIannella)