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