Página siguiente Página anterior Índice general

5. Creación y mantenimiento de bases de datos

Esta sección le explica cómo crear una base de datos de slapd empezando desde cero. Hay dos maneras de crear una base de datos: la primera, puede crear la base de datos en línea, usando LDAP. Con este método, sólo tiene que ejecutar slapd y añadir entradas usando el cliente LDAP de su elección. Este método es adecuado para bases de datos relativamente pequeñas (algunos cientos o miles de entradas, dependiendo de los requerimientos).

El segundo método de creación de bases de datos es no hacerlo en línea, sin mediante herramientas de generación de índices. Este es el mejor método si tiene que crear muchos miles de entradas, que si se introdujeran con el método LDAP llevarían un tiempo intolerablemente largo. También es útil si desea asegurarse de que no se accederá a la base de datos durante su creación.

5.1 Creación de una base de datos en línea

El paquete de software OpenLDAP viene con una utilidad llamada ldapadd, que se utiliza para añadir entradas mientras el servidor LDAP se ejecuta. Si decide crear en línea la base de datos, puede utilizar la herramienta ldapadd para añadir las entradas. Tras de añadir las primeras entradas, puede seguir usando posteriormente ldapadd para añadir más entradas. Antes de iniciar slapd, asegúrese de que activa las siguientes opciones de configuración en su fichero sladp.conf:

suffix <dn>

Tal como se explicó en la sección 3, esta opción describe qué entradas se mantendrán en esta base de datos. Deberá dar a esta opción el valor del DN de la raíz del sub-árbol que va a crear. Por ejemplo:

suffix "o=TUDelft, c=NL"

Asegúrese de especificar en qué directorio se crearán los archivos de configuración:

directory <directorio>

Por ejemplo:

directory /usr/local/tudelft

Tendrá que realizar el siguiente paso para poder conectar con slapd como usuario con permisos para añadir entradas. Se lleva a cabo añadiendo las dos siguientes opciones en la definición de la base de datos:

rootdn <dn>

rootpw <contraseña> /* ¡Recuerde usar contraseña «cripto» aquí ! */

Estas opciones especifican un DN y una contraseña que pueden usarse para autentificarse como la entrada «superusuario» de una base de datos (es decir, la entrada que tiene permisos para realizar cualquier tarea). El DN y la contraseña especificados aquí funcionarán siempre, con independencia de que la entrada de DN exista realmente o tenga una contraseña válida igual a la especificada. Así se arregla del problema del qué va primero, si el huevo o la gallina, a la hora de autentificarse y añadir entradas antes de que las propias entradas existan siquiera.

Finalmente debe asegurarse de que la definición de base de datos contiene las definiciones de índices que usted desea:

index {<attrlist> | default} [pres,eq,approx,sub,none]

Para indexar los atributos de clase de objetos (objectclass) cn, sn y uid se pueden usar por ejemplo las siguientes líneas de configuración:

index cn,sn,uid

index objectclass pres,eq

index default none

Una vez que haya configurado las cuestiones a su gusto, arranque su cliente LDAP y comience a añadir entradas. Por ejemplo, para añadir la entrada TUDelft seguida de una entrada Postmaster utilizando la herramienta ldapadd, puede crear un fichero llamado /tmp/entradanueva con el contenido:

o=TUDelft, c=NL 
objectClass=organization 

o=TUDelft 
description=Technical University of Delft Netherlands 

cn=Postmaster, o=TUDelft, c=NL 
objectClass=organizationalRole 
cn=Postmaster 
description= TUDelft postmaster - postmaster@tudelft.nl 

y luego utilizar una orden como la siguiente para crear de verdad la entrada:

ldapadd -f /tmp/entradanueva -D "cn=Manager, o=TUDelft, c=NL" -w secret 

Estar orden supone que Usted ha configurado rootdn como "cn=Manager, o=TUDelft, c=NL" y que la contraseña rootpw es «secret». Si no desea escribir la contraseña en la línea de órdenes, utilice la opción -W de la orden ldapadd, en lugar de -w "contraseña". Se le pedirá que introduzca interactivamente la contraseña:

ldapadd -f /tmp/entradanueva -D "cn=Manager, o=TUDelft, c=NL" -W 
Enter LDAP Password : 

5.2 Creación de una base de datos sin estar en línea

El segundo método de creación de una base de datos es hacerlo sin estar en línea, usando las herramientas de generación de índices descritas más abajo. Este es el mejor método si tiene que crear muchos miles de entradas, y crearlas con el método interactivo de LDAP descrito arriba llevaría mucho tiempo. Estas herramientas leen el fichero de configuración de slapd y un fichero de entrada LDIF que contiene una representación de las entradas que hay que añadir en formato de texto. Estas herramientas generan los ficheros de índices LDBM directamente. Deberá asegurarse de la activación de varias opciones de configuración importantes, de manera que se encuentren primero en la definición de base de datos del fichero de configuración:

suffix <dn>

Tal y como se ha descrito en la sección anterior, esta opción especifica qué entradas se mantendrán mediante esta base de datos. Debe Usted ajustarla al DN de la raíz del sub-árbol que intenta crear, por ejemplo:

suffix "o=TUDelft, c=NL"

Asegúrese de especificar un directorio en el que crear los ficheros de índice:

directory <directorio>

Por ejemplo:

directory /usr/local/tudelft

Después querrá seguramente aumentar el tamaño de la memoria de almacenamiento intermedio (caché) interna de la aplicación, y que se utiliza para cada fichero de índice abierto. Para un mejor rendimiento durante la creación del fichero de índices, la situación de rendimiento ideal es aquella en la que el fichero completo se carga en memoria. Si el volumen de sus datos no permite esta operación, o bien si no dispone de mucha memoria, todavía podrá darle un valor alto a este parámetro y dejar que haga su trabajo la paginación a disco del sistema. El tamaño se configura con la opción siguiente:

dbcachesize <númeroentero>

Por ejemplo:

dbcachesize 50000000

Esto creará una memoria de almacenamiento intermedio (caché) de un tamaño de 50 MB, que ya es bastante grande (en la Universidad de Michigan la base de datos tiene cerca de 125.000 entradas, y el mayor fichero de índices ocupa aproximadamente 45 MB). Experimente Usted varias veces con este parámetro y con el grado de paralelismo (ver más abajo), con el fin de ver qué combinación funcione mejor en su sistema. Acuérdese de devolver a este número su valor original después de crear los ficheros de índices y antes de ejecutar slapd.

Finalmente tendrá que especificar concretamente qué índices desea construir. Esto se consigue con una o más opciones que se aplican a los índices.

index {<listaatributos> | default} [pres,eq,approx,sub,none]

Por ejemplo:

index cn,sn,uid pres,eq,approx

index default none

Esto creará índices de presencia (presence), igualdad (equality) y aproximación (approximate) de los atributos cn, sn y uid, y no creará ningún índice para ningún otro atributo. Para más información acerca de esta opción, véase el fichero de configuración en la sección 3.

Una vez que haya configurado estos parámetros según sus preferencias, cree los índices ejecutando el programa ldif2ldbm:

ldif2ldbm -i <ficheroentrada> -f <ficheroconfigslapd> [-d <niveldepuración>] [-j <númeroentero>] [-n <numerodebasedatos>] [-e <directorioetc>]

Los argumentos tienen estos significados:

-i <ficheroentrada>

Especifica el fichero de entrada LDIF que contiene en formato de texto las entradas por añadir.

-f <ficheroconfigslapd>

Especifica el fichero de configuración de slapd que indica dónde crear los índices, qué índices hay que crear, etc.

-d <niveldepuración>

Activa la depuración, según se especifique en <niveldepuración>. Los niveles de depuración son los mismos que para slapd (véase la sección 4.1).

-j <númeroentero>

Es un argumento opcional que especifica que, como mínimo la cantidad <númeroentero> de procesos han de iniciarse en paralelo en el momento de construir los índices. El valor por defecto es 1. Si se especifica un valor superior a 1, ldif2ldbm creará como mínimo ese número de subprocesos a la hora de construir los índices. Para construir cada índice de atributos se crea un subproceso separado. La ejecución en paralelo de estos procesos puede acelerar grandemente el resultado, pero tenga cuidado de no crear demasiados procesos que compitan todos a la vez por los recursos de disco y memoria.

-n <númerodebasedatos>

Es un argumento opcional que especifica la base de datos del fichero de configuración para la cual hay que construir los índices. La primera base de datos aparece listada como «1», la segunda como «2», etc. Se usa por defecto la primera base de datos LDBM que aparezca en el fichero de configuración.

-e <etcdir>

Es un argumento opcional que especifica el directorio en donde ldif2ldbm podrá hallar las otras herramientas de conversión de bases de datos que precisa para ejecutarse (ldif2index y similares). El valor por defecto es el directorio de instalación que se especificó en el guión de instalación. Véase el siguiente ejemplo del uso de la orden ldif2ldbm:

/usr/local/sbin/ldif2ldbm -i nuevas_entradas -f myslapd.conf

5.3 Cuestiones adicionales sobre el formato LDIF

El formato de intercambio de datos de LDAP (LDAP Data Interchange Format, LDIF) se usa para representar entradas de LDAP en formato de texto sencillo. La forma básica de una entrada es:

[<id>] 
dn: <distinguished name> 
<tipodeatributo>: <valordel_atributo> 
<tipodeatributo>: <valordel_atributo> 
... 

en donde <id> el ID opcional de la entrada (un número decimal positivo). No se suele pasar este parámetro, permitiendo que la base de datos lo haga por usted. El programa ldbmcat, no obstante, produce un formato LDIF que incluye <id> de manera que los nuevos índices que se creen sean consistentes.

Puede continuarse una línea añadiendo un espacio al principio de la siguiente, p. ej.:

dn: cn=Barbara J Jensen, o=University of Michi
 gan, c=US 

Múltiples valores de un atributo se especifican en líneas separadas, por ejemplo:

cn: Barbara J Jensen 
cn: Babs Jensen 

Si un <valordel_atributo> contiene un carácter no imprimible, o comienza con un espacio o con dos puntos «:», entonces el <tipodeatributo> va seguido con el signo los dos puntos, dos veces, y el valor se codifica en notación de base 64; por ejemplo, el valor " begins with a space" se codificaría de la manera siguiente:

cn:: IGJlZ2lucyB3aXRoIGEgc3BhY2U= 

En el mismo fichero LDIF, las entradas múltiples se separan por líneas en blanco. He aquí un ejemplo de un fichero LDIF que contiene tres entradas:

dn: cn=Barbara J Jensen, o=University of Michigan, c=US 
cn: Barbara J Jensen 
cn: Babs Jensen 
objectclass: person 
sn: Jensen 

dn: cn=Bjorn J Jensen, o=University of Michigan, c=US 
cn: Bjorn J Jensen 
cn: Bjorn Jensen 
objectclass: person 
sn: Jensen 

dn: cn=Jennifer J Jensen, o=University of Michigan, c=US 
cn: Jennifer J Jensen 
cn: Jennifer Jensen 
objectclass: person 
sn: Jensen 
jpegPhoto:: /9j/4AAQSkZJRgABAAAAAQABAAD/2wBDABALD 
A4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQ 
ERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVG 
... 

Nótese que el tipo de atributo jpegPhoto en la entrada de Jennifer Jensen se codifica usando base64. El programa ldif que viene con el paquete OpenLDAP puede usarse para producir el formato LDIF.

Nota: en un fichero LDIF, los espacios finales no se eliminan de los valores, ni tampoco se comprimen múltiples espacios internnnos. Si no los quiere en sus datos, no debe incluirlos.

5.4 Las utilidades ldapsearch, ldapdelete y ldapmodify

ldapsearch - ldapsearch es una interfaz, accesible desde la línea de órdenes, para la llamada a biblioteca ldap_search(3). Use esta utilidad para buscar entradas en el dorsal (backend) de nuestra base de datos LDAP.

La sinopsis de las opciones de ldapsearch es la siguiente (véase la página de manual de ldapsearch(1) para conocer el significado de cada opción):

ldapsearch  [-n]  [-u]  [-v]
[-k]  [-K]  [-t]  [-A]
[-B] [-L] [-R] 
[-d niveldepuración] [-F separador] 
[-f fichero] [-D dn_deacceso]  [-W]  
[-w contraseña_acceso]  [-h servidorldap]  
[-p puertoldap]   [-b basebúsqueda]   
[-s base|one|sub]  
[-a never|always|search|find] 
[-l límitetiempo] [-z límitetamaño] filtro
[atributos...]  

ldapsearch abre una conexión a un servidor LDAP, se «engancha» a él y lleva a cabo una búsqueda utilizando el filtro filtro. Este filtro debe ajustarse a la representación de cadenas de texto para filtros LDAP, tal y como se definen en el Request for Comments 1558 (RFC 1558). Si ldapsearch encuentra una o más entradas, se obtienen los atributos especificados en atributos y se imprimen por salida estándar las entradas y sus valores. Si no se listan atributos, se devuelven todos los atributos.

He aquí algunos ejemplos del uso de ldapsearch:

ldapsearch -b 'o=TUDelft,c=NL' 'objectclass=*' 

ldapsearch -b 'o=TUDelft,c=NL' 'cn=Rene van Leuken' 

ldasearch -u -b 'o=TUDelft,c=NL' 'cn=Luiz Malere' sn mail 

La opción -b representa la base de búsqueda (el punto inicial de la búsqueda) y la opción -u representa la opción «amigable para el usuario», refiriéndose a la información de salida.

ldapdelete - ldapdelete es una interfaz, accesible desde la línea de órdenes, para la llamada a biblioteca ldap_delete(3). Use esta utilidad para buscar entradas en el dorsal (backend) de nuestra base de datos LDAP.

La sinopsis de las opciones de ldapdelete es la siguiente (véase la página de manual de ldapdelete(1) para conocer el significado de cada opción):

ldapdelete   [-n]   [-v]  [-k]
[-K]  [-c]  [-d nivel_depuración]
[-f fichero]  [-D dn_de_enganche]  [-W]
[-w contraseña]  [-h servidorldap] 
[-p puertoldap] [dn]... 

ldapdelete abre una conexión con un servidor LDAP, se «engancha» a él, y borra una o más entradas. Si se proporcionan uno o más argumentos de dn, se borrarán las entradas con estos Distinguished Names. Cada dn debe se la representación mediante una cadena de un DN de la forma especificada en el RFC 1779. Si no se proporcionan argumentos de dn, entonces se leerá la lista de DNs desde la entrada estándar (o bien desde un fichero si se utiliza la opción -f).

He aquí algunos ejemplos del uso de ldapdelete:

ldapdelete 'cn=Luiz Malere,o=TUDelft,c=NL' 

ldapdelete -v 'cn=Rene van Leuken,o=TUDelft,c=NL' -D 'cn=Luiz Malere,o=TUDelft,c=NL' -W 

La opción -v representa el modo verboso. La opción -D representa el DN de enganche (Binddn) y la opción -W sirve para que se nos pregunte interactivamente por la contraseña.

ldapmodify - ldapmodify es una interfaz, accesible desde la línea de órdenes, para la llamada a biblioteca ldap_modify(3) y ldap_add(3). Use esta utilidad para modificar entradas en el dorsal (backend) de nuestra base de datos LDAP.

La sinopsis de las opciones de ldapmodify es la siguiente (véase la página de manual de ldapmodify(1) para conocer el significado de cada opción):

ldapmodify   [-a]  [-b]  [-c]
[-r]  [-n]  [-v]  [-k]
[-d nivelde_depuración]  [-D dn_de_enganche]
[-W]  [-w contraseña]  [-h servidorldap]
[-p puertoldap] [-f fichero] 

ldapadd [-b] [-c] [-r] [-n]
[-v]  [-k]  [-K]  
[-d nivelde_depuración]  [-D dn_de_enganche]  
[-w contraseña]  [-h servidorldap]  
[-p puertoldap] [-f fichero] 

ldapadd está implementado en forma de enlace no simbólico (hard link) a la utilidad ldapmodify. Cuando se llama a la utilidad en la forma ldapadd, la opción -a (añadir nueva entrada) se activa automáticamente.

ldapmodify abre una conexión con un servidor LDAP, se «engancha» a él, y modifica o añade entradas. La información sobre la entrada que hay que modificar se lee desde la entrada estándar o desde un fichero a través de la opción -f.

He aquí algunos ejemplos del uso de ldapmodify:

Suponiendo que el fichero /tmp/entrymods exista y tenga un contenido:

dn: cn=Modify Me, o=University of Michigan, c=US 
changetype: modify 
replace: mail 
mail: modme@terminator.rs.itd.umich.edu 
- 
add: title 
title: Grand Poobah 
- 
add: jpegPhoto 
jpegPhoto: /tmp/modme.jpeg 
- 
delete: description 
- 

La orden:

ldapmodify -b -r -f /tmp/modif_entrada

sustituirá el contenido del atributo mail de la entrada "Modify Me" con el valor "modme@terminator.rs.itd.umich.edu", le añadirá el título de "Grand Poobah", el contenido del fichero /tmp/modme.jpeg como jpegPhoto, y eliminará completamente el atributo description.

Pueden llevarse a cabo las mismas modificaciones usando el formato de introducción más antiguo de ldapmodify:

cn=Modify Me, o=University of Michigan, c=US 
mail=modme@terminator.rs.itd.umich.edu 
+title=Grand Poobah 
+jpegPhoto=/tmp/modme.jpeg 
-description 

Esto más la orden siguiente:

ldapmodify -b -r -f /tmp/modif_entrada 

Eso suponiendo que el fichero /tmp/newentry exista y tenga el siguiente contenido:

dn: cn=Barbara Jensen, o=University of Michigan, c=US 
objectClass: person 
cn: Barbara Jensen 
cn: Babs Jensen 
sn: Jensen 
title: the world's most famous manager 
mail: bjensen@terminator.rs.itd.umich.edu 
uid: bjensen 

La orden:

ldapadd -f /tmp/modif_entrada

Suponiendo que el fichero /tmp/modif_entrada exista y tenga el contenido:

dn: cn=Barbara Jensen, o=University of Michigan, c=US 
changetype: delete 

La orden:

ldapmodify -f /tmp/modif_entrada 

eliminará la entrada de Babs Jensen.

La opción -f representa «fichero» (leer las modificaciones desde un fichero en vez de hacerlo desde la entrada estándar). La opción -b representa a «binario», es decir, cualquier tipo de valores que empiecen por '/' en el fichero de entrada se interpretan como binarios, y la -r representa «reemplazar» (sustituir los valores existentes de forma predeterminada).


Página siguiente Página anterior Índice general