25.2. Estructura de un árbol de directorios de LDAP

Un directorio LDAP tiene una estructura de árbol. Todas las entradas (denominadas "objetos") del directorio tienen una posición definida en esta jerarquía. Esta jerarquía se denomina árbol de información del Directorio (DIT). La vía completa a la entrada deseada, que la identifica de forma clara, se llama nombre completo o DN. Un nodo sencillo junto con la vía a esta entrada se denomina nombre completo relativo o RDN. Los objetos pueden asignarse generalmente a uno de dos tipos posibles:

contenedor

Estos objetos pueden a su vez contener otros objetos. Tales clases de objetos son root (el elemento raíz del árbol de directorios, que no existe realmente), c (país), ou (unidad organizativa) y dc (componente de dominio). Este modelo es comparable con los directorios (carpetas) de un sistema de archivos.

hoja

Estos objetos se encuentran en la parte final de una rama y no incluyen objetos subordinados. Algunos ejemplos serían person, InetOrgPerson o groupofNames.

La parte superior de la jerarquía de directorios tiene un elemento raíz root. Puede contener a su vez c (país), dc (componente de dominio) o o (organización) como elementos subordinados. Las relaciones dentro de un árbol de directorios LDAP se hacen más evidentes en el siguiente ejemplo, que se muestra en la Figura 25.1, “Estructura de un directorio LDAP”.

Figura 25.1. Estructura de un directorio LDAP

Estructura de un directorio LDAP

Este diagrama completo comprende un árbol de información del Directorio ficticio. Las entradas se describen en tres niveles. Cada entrada se corresponde con un cuadro en la imagen. El nombre completo válido para el empleado de SUSE ficticio Geeko Linux en este caso es cn=Geeko Linux,ou=doc,dc=suse,dc=de. Se compone añadiendo el RDN cn=Geeko Linux al DN de la entrada precedente ou=doc,dc=suse,dc=de.

La determinación global de qué tipos de objetos deberían almacenarse en el DIT se realiza siguiendo un esquema. El tipo de objeto está determinado por la clase del objeto. Sirve para determinar qué atributos puede o debe asignarse el objeto en cuestión. Un esquema, por tanto, debe contener definiciones de todas las clases y atributos del objeto utilizados en el escenario de la aplicación deseada. Hay unos cuantos esquemas comunes (consulte la RFC 2252 y 2256). Sin embargo, es posible crear esquemas personalizados o usar varios esquemas que se complementen unos a otros si el entorno en el que debe operar el servidor LDAP lo necesita.

La Tabla 25.1, “Clases y atributos de objetos usados comúnmente” ofrece una breve descripción de las clases de objetos de core.schema y inetorgperson.schema utilizadas en el ejemplo, incluidos los atributos necesarios y los valores de atributos válidos.

Tabla 25.1. Clases y atributos de objetos usados comúnmente

Clase de objeto

Significado

Entrada de ejemplo

Atributos obligatorios

dcObject

domainComponent (componentes del nombre del dominio)

suse

dc

organizationalUnit

organizationalUnit (unidad organizativa)

doc

ou

inetOrgPerson

inetOrgPerson (datos relacionados con la persona para la intranet o Internet)

Geeko Linux

sn y cn

El Ejemplo 25.1, “Extracto de schema.core ” muestra un extracto de una directiva de esquema con explicaciones (se han numerado las líneas para facilitar la explicación).

Ejemplo 25.1. Extracto de schema.core

 
#1 attributetype (2.5.4.11 NAME ( 'ou' 'organizationalUnitName') 
#2        DESC 'RFC2256: unidad organizativa a la que pertenece este objeto' 
#3        SUP name )

... 
#4 objectclass ( 2.5.6.5 NAME 'organizationalUnit' 
#5        DESC 'RFC2256: una unidad organizativa' 
#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) ) 
...

El tipo de atributo organizationalUnitName y la clase de objeto correspondiente organizationalUnit sirven como ejemplo en este caso. La línea 1 presenta el nombre del atributo, su OID (identificador de objeto) único y numérico y la abreviatura del atributo.

La línea 2 ofrece una breve descripción del atributo con DESC. La RFC correspondiente en la que se basa la definición también se menciona aquí. SUP en la línea 3 indica un tipo de atributo superior al que pertenece este atributo.

La definición de la clase de objeto organizationalUnit comienza en la línea 4, como en la definición del atributo, con un OID y el nombre de la clase de objeto. La línea 5 presenta una breve descripción de la clase de objeto. La línea 6, con la entrada SUP top, indica que esta clase de objeto no está subordinada a otra. La línea 7, que comienza con MUST, muestra todos los tipos de atributos que deben usarse junto con un objeto del tipo organizationalUnit. La línea 8, que comienza con MAY, muestra todos los tipos de atributos que se permiten junto con esta clase de objeto.

Se puede encontrar una introducción muy buena sobre el uso de esquemas en la documentación de OpenLDAP. Tras la instalación, la encontrará en /usr/share/doc/packages/openldap2/admin-guide/index.html.