25.2. Struttura di un albero di directory LDAP

Una directory LDAP presenta una struttura ad albero. Tutte le voci (denominate oggetti) della directory hanno una posizione definita all'interno di questa gerarchia. La gerarchia è denominata directory information tree (DIT). Il percorso completo che identifica univocamente la voce desiderata è denominato nome distinto o DN. Un nodo sul percorso di questa voce è denominato nome distinto relativo o RDN. Gli oggetti possono di norma essere associati a uno dei due seguenti tipi:

container

Questi oggetti possono a loro volta contenere altri oggetti. Queste classi di oggetti sono root (l'elemento radice dell'albero, non realmente esistente), c (country, Paese), ou (organizational unit, unità organizzativa) e dc (domain component, componente dominio). Questo modello è paragonabile alle directory (cartelle) di un file system.

foglia

Questi oggetti si trovano alla fine di una diramazione e non presentano oggetti subordinati. Esempi sono person, InetOrgPerson o groupofNames.

La parte più alta di una gerarchia di directory dispone di un elemento radice root. Questo può contenere c (country), dc (domain component) o o (organization) come elementi subordinati. Le relazioni all'interno di un albero di directory LDAP diventano più evidenti nel seguente esempio, mostrato nella Figura 25.1, "Struttura di una directory LDAP".

Figura 25.1. Struttura di una directory LDAP

Struttura di una directory LDAP

Lo schema completo comprende un DIT (directory information tree) di fantasia. Sono rappresentate voci su tre livelli. Ciascuna voce corrisponde a un riquadro nell'immagine. Il nome distinto completo valido per il dipendente SUSE di fantasia Geeko Linux è, in questo caso, cn=Geeko Linux,ou=doc,dc=suse,dc=de. Viene composto aggiungendo l'RDN cn=Geeko Linux al DN della voce precedente ou=doc,dc=suse,dc=de.

La definizione globale dei tipi di oggetti da memorizzare nel DIT viene eseguita seguendo uno schema. Il tipo di oggetto viene determinato dalla classe oggetto. La classe oggetto determina gli attributi obbligatori o facoltativi per l'oggetto interessato. Uno schema, pertanto, deve contenere definizioni di tutte le classi e gli attributi oggetto utilizzati nello scenario applicativo desiderato. Esistono alcuni schemi comuni (vedere RFC 2252 e 2256). È tuttavia possibile creare schemi personalizzati o utilizzare più schemi complementari, se ciò è richiesto dall'ambiente nel quale verrà impiegato il server LDAP.

La Tabella 25.1, "Classi e attributi oggetto comunemente usati" offre una breve panoramica delle classi oggetto degli schemi core.schema e inetorgperson.schema utilizzati nell'esempio, inclusi gli attributi obbligatori e i valori di attributo validi.

Tabella 25.1. Classi e attributi oggetto comunemente usati

Classe oggetto

Descrizione

Voce di esempio

Attributi obbligatori

dcObject

domainComponent (componenti del nome del dominio)

suse

dc

organizationalUnit

organizationalUnit (unità organizzativa)

doc

ou

inetOrgPerson

inetOrgPerson (dati correlati alla persona per Intranet o Internet)

Geeko Linux

sn e cn

L'Esempio 25.1, "Estratto di schema.core " mostra un estratto di una direttiva di schema con spiegazioni (righe numerate per scopi illustrativi).

Esempio 25.1. Estratto di schema.core

#1 attributetype (2.5.4.11 NAME ( 'ou' 'organizationalUnitName')
#2        DESC 'RFC2256: organizational unit this object belongs to'
#3        SUP name )

...
#4 objectclass ( 2.5.6.5 NAME 'organizationalUnit'
#5        DESC 'RFC2256: an organizational unit'
#6        SUP top STRUCTURAL
#7        MUST ou
#8 MAY (userPassword $ searchGuide $ seeAlso $ businessCategory 
    $ x121Address $ registeredAddress $ destinationIndicator 
    $ preferredDeliveryMethod $ telexNumber 
    $ teletexTerminalIdentifier $ telephoneNumber 
    $ internationaliSDNNumber $ facsimileTelephoneNumber 
    $ street $ postOfficeBox $ postalCode $ postalAddress 
    $ physicalDeliveryOfficeName
    $ st $ l $ description) )
...

Il tipo di attributo organizationalUnitName e la classe oggetto corrispondente organizationalUnit servono come esempio in questo caso. La riga 1 presenta il nome dell'attributo, il suo OID (identificatore oggetto) univoco (numerico) e l'abbreviazione dell'attributo stesso.

La riga 2 fornisce una descrizione sintetica dell'attributo con DESC. Viene anche indicato l'RFC corrispondente su cui si basa la definizione. SUP nella riga 3 indica un tipo di attributo superordinato cui appartiene questo attributo.

La definizione della classe oggetto organizationalUnit inizia alla riga 4, come nella definizione dell'attributo con un OID e il nome della classe oggetto. La riga 5 presenta una breve descrizione della classe oggetto. La riga 6, con la sua voce SUP top, indica che questa classe oggetto non è subordinata a un'altra. La riga 7, che inizia con MUST, elenca tutti i tipi di attributo che devono essere utilizzati con un oggetto di tipo organizationalUnit. La riga 8, che inizia con MAY, elenca tutti i tipi di attributo consentiti con questa classe oggetto.

Un'ottima introduzione all'utilizzo di schemi può essere reperita nella documentazione di OpenLDAP. Se installato, il percorso è /usr/share/doc/packages/openldap2/admin-guide/index.html.