Añadir un nuevo esquema en OpenLDAP 2.4


Una de las principales novedades de la versión 2.4 de OpenLDAP es que se incluye toda la configuración del servidor slapd en un directorio de base cn=config, en lugar del habitual fichero /etc/ldap/slapd.conf. Esto tiene la ventaja de que las modificaciones de configuración se pueden hacer sin tener que reiniciar el servicio, pero tiene el inconveniente de que tenemos que aprender una cosa nueva :-).

En esta entrada vemos en concreto la forma de incluir un esquema nuevo en cn=config, en particular samba3.schema. Hemos utilizado en el desarrollo la versión de pruebas de Debian GNU/Linux (squeeze), que en poco tiempo será la versión estable, pero debería haber pocas diferencias con la configuración en otra distribución. La versión de slapd utilizada es 2.4.23.

Características de cn=config

Tal como aparece en el fichero /usr/share/doc/slapd/README.Debian.gz, para acceder al directorio cn=config se utiliza el socket UNIX ldapi:///, por ejemplo, para hacer una búsqueda genérica se utiliza la instrucción:

# ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config"

En la siguiente figura puede verse un esquema del directorio cn=config en una instalación limpia, donde se puede observar que los 6 objetos que cuelgan de la base y en particular cn=schema, donde se encuentran los cuatro esquemas instalados por defecto: core, cosine, nis e inetorgperson.

Esquema de config

Para añadir un esquema nuevo al directorio hay que subir un fichero ldif con el nuevo esquema al dn: cn=schema,cn=config, pero como todavía no es habitual encontrarlos en este formato, sino en .schema hay que realizar previamente una transformación.

Añadir el esquema de samba3

En lugar de añadir un esquema genérico, vamos a concretar añadiendo el esquema de Samba 3. En primer lugar hay que obtener el fichero samba3.schema, que se incluye por ejemplo en el paquete gosa-schema, ubicado en /etc/ldap/schema/gosa/. Ahora hay que transformar este fichero a formato ldif, lo que se puede hacer utilizando la herramienta slaptest que permite transforma un fichero de configuración de formato antigua al nuevo. En primer lugar creamos el fichero /tmp/borrame.conf con el siguiente contenido:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/gosa/samba3.schema

y creamos un directorio temporal /tmp/borrame.d:

# mkdir /tmp/borrame.d

Ahora podemos utilizar la aplicación slaptest que crea toda la estructura necesaria de ficheros ldif a partir de un fichero de configuración antiguo de slapd, en nuestro caso que contiene sólo esquemas.

slaptest -f /tmp/borrame.conf -F /tmp/borrame.d

Ahora podemos encontrar el fichero /tmp/borrame.d/cn=config/cn=schema/cn={4}samba3.ldif, que incluye el esquema de Samba3 en formato ldif.

Opción 1:

Si seguimos este proceso, copiamos el nuevo esquema a la ubicación adecuada y reiniciamos el servicio:

# cp /tmp/borrame.d/cn\=config/cn\=schema/cn\=\{4\}samba3.ldif /etc/ldap/slapd.d/cn\=config/cn\=schema/
# chown openldap:openldap /etc/ldap/slapd.d/cn\=config/cn\=schema/cn\=\{4\}samba3.ldif
# /etc/init.d/openldap restart

Aunque hacerlo así no supone ninguna ventaja respecto a versiones anteriores de openLDAP, sino justamente lo contrario. La principal ventaja de incluir la configuración del servicio dentro del propio directorio es que las modificaciones se pueden hacer sin parar en ningún momento el servicio, como se explica a continuación.

Opción 2:

Editamos el fichero ldif del esquema de samba y modificamos las primeras líneas de la siguiente forma:

dn: cn=samba3,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: samba3

Además, borramos todas las líneas finales que incluyen atributos de creación del objeto y demás:

structuralObjectClass: olcSchemaConfig
entryUUID: 8309b686-91ed-102f-93fa-972e7504ce9b
creatorsName: cn=config
createTimestamp: 20101201232147Z
entryCSN: 20101201232147.210006Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20101201232147Z

Ahora podemos añadir el nuevo fichero ldif mediante la instrucción:

# ldapadd -Y EXTERNAL -H ldapi:/// -f /tmp/borrame.d/cn\=config/cn\=schema/cn\=\{4\}samba3.ldif

El resultado será exactamente el mismo que con la opción 1, pero ahora no ha sido necesario reiniciar el servicio.

Si se utiliza otra distribución de GNU/Linux o una configuración diferente del directorio, es posible que la instrucción de ldapadd varíe, aunque en cualquier caso tiene que hacerse con permisos de escritura sobre la base cn=config.

Referencias

Añadir un nuevo esquema en OpenLDAP 2.4

9 comentarios en “Añadir un nuevo esquema en OpenLDAP 2.4

  1. Agonizer dijo:

    Genial, la mejor explicación que he encontrado sobre el tema en español, gracias por esto, ese openldap 2.4.23 está dando muchos problemas.

    Me gusta

  2. dadava dijo:

    Buenas!

    En el momento de incluir los schemas con «slaptest -f /tmp/borrame.conf -F /tmp/borrame.d» presenta este error: /etc/ldap/schema/collective.schema: line 28 attributeType: AttributeType not found: «l»

    Me gusta

    1. Sylvain dijo:

      El orden de la lineas es importante. La primera linea del fichero «/tmp/borrame.conf» debe ser : include /etc/ldap/schema/collective.schema

      Me gusta

  3. fisx dijo:

    Me ocurre igual, y ando un poco (bastante) perdida, dado que no existe demasiada documentación al respecto. La cuestión es que me acabo de dar cuenta de que en la empresa donde trabajo y debido a que estamos migrando a linux, necesitamos un servidor de directorio tipo LDap. Como he podido ver, esta versión, respecto a las anteriores resulta que funciona diferente. No me ha sido posible encontrar documentación (o no he sabido) después de varios dias de intensa búsqueda. La explicación que uds aquí ofrecen esta muy bien, pero me da el mismo error que la persona que escribe anterior a mi. ¿Podría ser que hubiese algun error? De antemano se les agradece la paciencia y les mando un agradecimiento de antemano.

    Me gusta

    1. #dadava y #fisx, o bien el esquema no es correcto (puede que haya algún error tipográfico o similar) o bien hay algún atributo que está definido en otro esquema que debe cargarse previamente (como una especie de dependencia), en concreto el atributo «l» es un alias de «localityName» y es un atributo definido en core.schema, que debería estar ya definido en el sistema.

      Una referencia útil de los atributos, objectClasses y esquemas básicos es la de zytrax [1]

      [1] http://www.zytrax.com/books/ldap/ape/

      Me gusta

  4. Hola Alberto, muy buena explicación. Funcionó correctamente. Ahora tengo una nueva inquietud, y es saber cómo se incluyen los .ldif que antiguamente se incluían con slapadd -l people.ldif por ejemplo. Estoy intentando implementar GOsa2 en un Debian Squeeze con ldap y samba 3 (ya que no he logrado crear shares compartidos con privilegios por usuarios para Samba 4). Desde ya, muchísimas gracias por tu ayuda. Como dicen los otros comentarios, la explicación más clara sobre este tema en español. El resto de las búsquedas siguen haciendo referencia a la utilización del archivo slapd.conf.

    Saludos cordiales,
    Ariel Mannelli
    Argentina.
    arielmannelli@gmail.com

    Me gusta

    1. Hola Ariel,
      La forma de añadir un fichero ldif al directorio sigue siendo igual, no ha habido ningún cambio. Lo que me extraña un poco es que preguntas por slapadd, que sólo puede utilizarse desde el propio servidor y con el servicio LDAP parado. Lo más habitual y recomendable es utilizar algún cliente bien local o remoto. ldapadd del paquete ldap-utils es el más habitual de línea de comandos, pero puedes utilizar cualquier cliente LDAP gráfico, como por ejemplo Apache Directory Studio.

      Me gusta

Deja un comentario