29.2. Estructura de un árbol de directorios LDAP

El directorio LDAP tiene una estructura en forma de árbol. Cada entrada (denominada objeto) del directorio ocupa una posición determinada dentro de esa jerarquía (denominada DIT o Directory Information Tree). La ruta completa a una entrada la identifica de modo inequívoco y se conoce como DN o Distinguished Name. Cada uno de los nodos en la ruta a dicha entrada se llaman RDN o Relative Distinguished Name. Por lo general, existen dos tipos de objetos:

Contenedor

Este tipo de objeto puede contener a su vez otros objetos. Algunos ejemplos de estos elementos son root (elemento raíz del árbol de directorios que no existe en realidad), c (country), ou (OrganizationalUnit), y dc (domainComponent). Este modelo es equiparable a los directorios (carpetas) en el sistema de archivos.

Hoja

Este tipo de objeto se encuentra al final de una rama y carece de objetos subordinados. Algunos ejemplos son Person/, InetOrgPerson o groupofNames.

En la cúspide de la jerarquía del directorio se encuentra el elemento raíz root. A este elemento le puede seguir en un nivel inferior c (country), dc (domainComponent) o o (organization). El siguiente ejemplo ilustra mejor las relaciones jerárquicas dentro de un árbol de directorios LDAP (ver Figura 29.1, “Estructura de un directorio LDAP”).

Figura 29.1. Estructura de un directorio LDAP

Estructura de un directorio LDAP

La figura representa un DIT ficticio con entradas (entries) en tres niveles. Cada entrada se corresponde con una casilla en la figura. En este caso, el nombre válido completo (DN o Distinguished Name) del empleado ficticio de SUSE Geeko Linux es cn=Geeko Linux,ou=doc,dc=suse,dc=de. Este nombre se forma al añadir el RDN cn=Geeko Linux al DN de la entrada precedente ou=doc,dc=suse,dc=de.

La definición global de qué tipo de objetos han de guardarse en el DIT se realiza mediante un esquema. El tipo de objeto se determina mediante la clase de objeto. La clase de objeto especifica qué atributos deben o pueden ser asignados a un objeto determinado. Por lo tanto, un esquema debe contener definiciones de todas las clases de objetos y atributos que van a utilizarse en el escenario de aplicación. Existen algunos esquemas de uso extendido (véase RFC 2252 y 2256). No obstante, si el entorno en el que va a utilizarse el servidor LDAP lo requiere, también pueden crearse nuevos esquemas en función del usuario o pueden combinarse varios esquemas entre sí.

La Tabla 29.1, “Clases de objetos y atributos de uso extendido” ofrece un resumen de las clases de objetos utilizadas en el ejemplo de core.schema e inetorgperson.schema junto con los atributos obligatorios y los valores adecuados de atributo.

Tabla 29.1. Clases de objetos y atributos de uso extendido

Clase de objeto

Significado

Entrada de ejemplo

Atributo obligatorio

dcObject

domainComponent (partes del nombre del dominio)

suse

dc

organizationalUnit

organizationalUnit (unidad organizativa)

doc

ou

inetOrgPerson

inetOrgPerson (datos sobre personal para Internet/intranet)

Geeko Linux

sn y cn

En el Ejemplo 29.1, “Extracto de schema.core (numeración de líneas para facilitar la comprensión)” puede ver un extracto de una instrucción de esquema con aclaraciones que le ayudarán a entender la sintaxis de nuevos esquemas.

Ejemplo 29.1. Extracto de schema.core (numeración de líneas para facilitar la comprensión)

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

Como ejemplo se ha tomado el tipo de atributo organizationalUnitName y la clase de objeto correspondiente organizationalUnit. En la línea 1 aparece el nombre del atributo, su número de identificación de objeto (OID o Object Identifier) (numérico) y la abreviatura del atributo.

En la línea 2, DESC introduce una breve descripción del atributo que incluye el RFC del que procede la definición. SUP en la línea 3 hace referencia a 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 con un OID y el nombre de la clase de objeto, al igual que en la definición de atributo. La línea 5 contiene una breve descripción de la clase de objeto. La entrada SUP top en la línea 6 indica que esta clase de objeto no está subordinada a ninguna otra clase de objeto. La línea 7, que empieza por MUST, enumera todos los tipos de atributo que deben ser utilizados obligatoriamente en un objeto del tipo organizationalUnit. A continuación de MAY en la línea 8 se incluyen todos los tipos de atributos que pueden ser utilizados en conexión con esta clase de objeto.

La documentación del programa OpenLDAP, disponible en el sistema en /usr/share/doc/packages/openldap2/admin-guide/index.html, constituye una excelente introducción para la utilización de esquemas.


SUSE LINUX Manual de administración 9.3