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