
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.
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.
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.
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)