<!doctype linuxdoc system>

<!-- LDAP Linux HOWTO -->

<article>

<!-- Title information -->

<title>LDAP-Linux-Como
<author>Luiz Ernesto Pinheiro Malere, <tt/malere@yahoo.com/. Traducción de J. Iván Juanes Prieto, <tt/kerberos@insflug.org/.
<date>v1.01, 15 febrero 2000
<abstract>
En este documento se presenta la información acerca de la instalación,
configuración, ejecución y mantenimiento de un servidor del Protocolo
Ligero de Acceso a Directorios (LDAP) en una máquina Linux. También se
dan detalles sobre cómo crear bases de datos LDAP, cómo actualizar y
borrar información de la base de datos, cómo implementar acceso móvil
y cómo utilizar la Libreta de Direcciones (Address Book) de
Netscape. Este documento está fuertemente inspirado en las páginas
informativas de LDAP de la Universidad de Michigan.
</abstract>

<!-- Table of contents -->
<toc>

<!-- Begin the document -->

<sect>Introducción

<p>
La finalidad principal de este documento es permitirle configurar y
utilizar un Servidor de directorio LDAP (Protocolo Ligero de Acceso a
Directorios) en su máquina Linux. Aprenderá cómo instalar, configurar,
ejecutar y mantener el servidor LDAP. Después, aprenderá también cómo
almacenar, recuperar y actualizar información en su Directorio,
utilizando las utilidades y clientes LDAP. El demonio o programa
servidor para el directorio LDAP se llama <em/slapd/ y puede
ejecutarse sobre muchas plataformas UNIX diferentes.

<p>
Hay otro demonio o programa servidor que se encarga de la replicación
entre servidores. Su nombre es <tt/slurpd/ y por el momento no
necesitará preocuparse de él. En este documento, ejecutaremos un
<em/slapd/ que proporciona servicio de directorio para su dominio
local únicamente, es decir, sin <em/slurpd/.

<p>
He aquí una configuración sencilla del servidor, válida para empezar,
pero fácil también de actualizar a una configuración distinta más
adelante, si lo desea. La información que se presenta en este
documento representa una buena forma de iniciarse en el uso del
protocolo LDAP. Es probable que tras la lectura del documento se
sienta con fuerzas para ampliar las capacidades de su servidor, e
incluso con ganas de escribir sus propios clientes, usando los
entornos de desarrollo ya existentes para C, C++ y Java.

<sect1>¿Qué es LDAP?
<p>
LDAP (``Lightweight Directory Access Protocol'', «Protocolo Ligero de
Acceso a Directorios») es un protocolo de tipo cliente-servidor para
acceder a un servicio de directorio. Se usó inicialmente como un
<em/front-end/ o interfaz final para X.500, pero también puede usarse con
servidores de directorio únicos y con otros tipos de servidores de
directorio.

<sect1>¿Qué es un servicio de directorio?
<p>
Un directorio es como una base de datos, pero en general contiene
información más descriptiva y más basada en atributos. La información
contenida en un directorio normalmente es lee mucho más de lo que se
escribe. Como consecuencia los directorios no implementan normalmente
los complicados esquemas para transacciones o esquemas de reducción
(<em/rollback/) que las bases de datos utilizan para llevar a cabo
actualizaciones complejas de grandes volúmenes de datos. Por contra,
las actualizaciones en un directorio son usualmente cambios sencillos
de «todo o nada», si es que se permiten en algo.

<p>
Los directorios están afinados para proporcionar una repuesta rápida a
operaciones de búsqueda o consulta. Pueden tener la capacidad de
replicar información de forma amplia, con el fin de aumentar la
disponibilidad y la fiabilidad, y a la vez reducir el tiempo de
respuesta. Cuando se duplica (o se replica) la información del
directorio, pueden aceptarse inconsistencias temporales entre la
información que hay en las réplicas, siempre que finalmente exista una
sincronización.

<p>
Existen muchas maneras distintas de proporcionar un servicio de
directorio. Los diferentes métodos permiten almacenar en el directorio
diferentes tipos de información, establecer requisitos diferentes para
hacer referencias a la información, consultarla y actualizarla,
la forma en que protege al directorio de accesos no autorizados, etc.
Algunos servicios de directorio son locales, proporcionando servicios
a un contexto restringido (por ejemplo, el servicio de <tt/finger/ en una
única máquina). Otros servicios son globales, proporcionando servicio
en un contexto mucho más amplio.

<sect1>¿Cómo funciona LDAP?
<p>
El servicio de directorio LDAP se basa en un modelo
cliente-servidor. Uno o más servidores LDAP contienen los datos que
conforman el árbol del directorio LDAP o base de datos troncal. el
cliente ldap se conecta con el servidor LDAP y le hace una
consulta. El servidor contesta con la respuesta correspondiente, o
bien con una indicación de dónde puede el cliente hallar más
información (normalmente otro servidor LDAP). No importa con qué
servidor LDAP se conecte el cliente: siempre observará la misma vista
del directorio; el nombre que se le presenta a un servidor LDAP hace
referencia a la misma entrada a la que haría referencia en otro
servidor LDAP. Es ésta una característica importante de un servicio de
directorios universal como LDAP.

<sect1>Backends, objetos y atributos en LDAP 
<p>
<em/slapd/ se suministra con tres diferentes bases de datos de backend
(dorsal, o base de datos de segundo plano) entre las que elegir. Se
trata de LDBM, una base de datos de gran rendimiento basada en disco:
SHELL, una interfaz de base de datos para órdenes arbitrarias de UNIX
o guiones (scripts) del intérprete de órdenes (shell); y PASSWD, una 
sencilla base de datos de contraseñas.

<p>
En el desarrollo de este documento, se da por supuesto que ha elegido
la base de datos LDBM.

<p>
La base de datos LDBM funciona asignando un identificador compacto de
cuatro bytes, único para cada entrada de la base de datos. La base de
datos utiliza este identificador para hacer referencia a entradas en
los índices. La base de datos está compuesta de un fichero índice
principal, llamado <tt/id2entry/, que mapea el identificador único de una
entrada en la representación en texto de esa misma entrada. También se
da mantenimiento a otros ficheros índice.

<p>
Para importar y exportar información de directorio entre servidores de
directorios basados en LDAP, o para describir una serie de cambios que
han de aplicarse al directorio, se usa en general del fichero de
formato conocido como LDIF (siglas de <em>"LDAP interchange format"</em>,
«formato de intercambio de LDAP»). Un fichero LDIF almacena
información en jerarquías de entradas orientadas a objeto. El paquete
de software LDAP que va a utilizar incluye una utilidad para convertir
ficheros LDIF a formato LDBM.

<p>
Un fichero LDIF corriente tiene este aspecto:

<p>
<tscreen><verb>
dn: o=Insflug, c=ES
o: Insflug
objectclass: organization
dn: cn=Luiz Malere, o=Insflug, c=ES
cn: Luiz Malere
sn: Malere
mail: malere@yahoo.com
objectclass: person
</verb></tscreen>

<p>
Como puede comprobar, cada entrada está identificada unívocamente por
un nombre distintivo (<tt/DN/, <em>"distinguished name"</em>). El DN
(nombre distintivo) está compuesto por el nombre de la entrada en
cuestión, más la ruta de nombres que permiten rastrear la entrada
hacia atrás hasta la parte superior de la jerarquía del directorio.

<p>
En LDAP, una clase de objetos define la colección de atributos que
pueden usarse para definir una entrada. El estándar LDAP proporciona
estos tipos básicos para las clases de objetos:
<itemize>
<item>Grupos en el directorio, entre ellos listas no ordenadas de
objetos individuales o de grupos de objetos.
<item>Emplazamientos, como por ejemplo el nombre del país y su
descripción. 
<item>Organizaciones que están en el directorio.
<item>Personas que están en el directorio.
</itemize>

<p>
Una entrada determinada puede pertenecer a más de una clase de
objetos. Por ejemplo, la entrada para personas se define mediante la
clase de objetos <tt/person/, pero también puede definirse mediante
atributos en las clases de objetos <tt/inetOrgPerson/,
<tt/groupOfNames/ y <tt/organization/. La estructura de clases de
objetos del servidor (su esquema) determina la lista total de
atributos requeridos y permitidos para una entrada concreta.

<p>
Los datos del directorio se representan mediante pares de atributo y
su valor. Cualquier pieza de información específica se asocia con un
atributo descriptivo.

<p>
Por ejemplo el atributo  <tt/commonName/, o <tt/cn/ («nombre de pila»), se
usa para almacenar el nombre de una persona. Puede representarse en el
directorio a una persona llamada Jonás Saqueiro mediante

<tscreen><verb>
cn: Jonás Saqueiro
</verb></tscreen>

<p>
Cada persona que se introduzca en el directorio se define mediante la
colección de atributos que hay en la clase de objetos
<em/person/. Otros atributos que se usan para definir esta entrada
serán: 
<tscreen><verb>
givenname: Jonás
surname: Saqueiro
mail: jonass@midominio.com
</verb></tscreen>

<p>
Los atributos requeridos son aquellos que deben estar presentes en las
entradas que utilicen la clase de objetos. Todas las entradas precisan
del atributo <tt/objectClass/, que lista las clases de objeto a las que
pertenece una entrada. 

<p>
Los atributos permitidos son aquellos que pueden estar presentes en
las entradas que utilicen la clase de objetos. Por ejemplo, en la
clase de objetos <tt/person/, se requieren los atributos <tt/cn/ y 
<tt/sn/. Los atributos <tt/description/ («descripción»),
<tt/telephoneNumber/ («número de teléfono»), <tt/seeAlso/ («véase
también»), y <tt/userpassword/ («contraseña del usuario») se permiten
pero no se requieren.

<p>
Cada atributo tiene la definición de sintaxis que le corresponde. La
definición de sintaxis describe el tipo de información que proporciona
ese atributo: 
<itemize>
<item><tt/bin/ binario
<item><tt/ces/ cadena con mayúsculas y minúsculas exactas (las mayúsculas y
minúsculas son significativas durante las comparaciones)
<item><tt/cis/ cadena con mayúsculas y minúsculas ignoradas (las mayúsculas
y minúsculas no son significativas durante las comparaciones)
<item><tt/tel/ cadena de número de teléfono (como <tt/cis/, pero durante las
comparaciones se ignoran los espacios en blanco y los guiones "-")
<item><tt/dn/ "distinguished name" («nombre distintivo»)
</itemize>

<p> 
Para conocer en qué lugar de su sistema se emplazan las definiciones
de clases de objetos y de atributos, véase el primer párrafo de la
<ref id="3" name="sección 3">. 

<sect1>Nuevas versiones de este documento.
<p>

Este documento puede experimentar actualizaciones y correcciones en
razón de la respuesta que suscite entre sus lectores. Por favor busque
nuevas versiones del original inglés en:

<p>
<url url="http://www.ddtc.dimes.tudelft.nl/~malere/LDAP-Linux-HOWTO.html"
name="http://www.ddtc.dimes.tudelft.nl/~malere/LDAP-Linux-HOWTO.html">
<p>
(y nuevas versiones de la traducción castellana de este <em/Cómo/ en 
<url url="http://www.insflug.org/" name="http://www.insflug.org/">,
<bf/N. del T./)

<sect1>Opiniones y sugerencias
<p>
Si tiene alguna duda sobre cualquier información disponible en este
documento, por favor contacte con nosotros en la siguiente dirección
de correo electrónico:

<p>
<url url="mailto:malere@yahoo.com" name="malere@yahoo.com">
<p>
Si tiene algún comentario o sugerencia, no dude en comunicármelo.

<sect1>Agradecimientos 

<p>Este <em/Cómo/ es el resultado de unas prácticas que
hemos realizado en la universidad de TUDelft, en Holanda. Queremos dar
las gracias a las personas que nos animaron a escribir este documento:
Rene van Leuken y Wim Tiwon. Muchísimas gracias. También ellos son
entusiastas del Linux como nosotros.

<sect1>Copyright y descargo de responsabilidad.

<p>
El <em/LDAP-Linux-Cómo/ es Copyright 1999 de Luiz Ernesto Pinheiro
Malere. Puede redistribuirse libremente. No puede modificarse. Si
tiene cualquier tipo de sugerencia, por favor envíeme un correo
electrónico (actualizaré el documento si la sugerencia es adecuada).

<p>
Si desea una traducción, por ejemplo al Portugués, puede enviarme
también un correo sobre el particular.

<p>

No liability for the contents of this document can be accepted. I have
no responsability about the consequences of following the Steps
provided in this document.

<p>
Si tiene preguntas, por favor contacte con el coordinador de Linux
HOWTO en 

<p>
<url url="linux-howto@metalab.unc.edu" name="linux-howto@metalab.unc.edu">

<sect>Instalación del servidor LDAP
<p>
Cuatro pasos son necesarios para instalar el servidor: obtener el
paquete, descomprimir y desempaquetar el servidor, configurar los
ficheros <tt/Makefile/ del programa y compilar el servidor.

<sect1>Obtención del paquete
<p>
Existen dos servidores LDAP que se distribuyen libremente: el servidor
LDAP de la Universidad de Michigan y el servidor
<em/OpenLDAP/. También está el <em/Netscape Directory Server/, que es
libre sólo bajo ciertas condiciones (por ejemplo, las instituciones
educativas lo pueden obtener gratis). El servidor <em/OpenLDAP/ está
basado en la última versión del servidor de la Universidad de
Michigan, y hay disponibles listas de correo y documentación adicional
para él. Este documento da por supuesto que está Usted utilizando el
servidor <em/OpenLDAP/.

<p>
La versión comprimida en formato <tt/.gz/ está disponible en la siguiente
dirección: 
<p>
<url url="http://www.openldap.org" name="http://www.openldap.org">
<p>
Si desea obtener la última versión del servidor de la Universidad de
Michigan, diríjase a esta dirección:
<p>
<url url="ftp://terminator.rs.itd.umich.edu/ldap" name="ftp://terminator.rs.itd.umich.edu/ldap">
<p>
Para escribir este documento nos hemos basado en la última versión
estable de <em/OpenLDAP/, utilizando OpenLDAP 1.2.8 sobre un servidor
Slackware Linux con núcleo 2.2.6. En la sede Web de <em/OpenLDAP/
encontrará las últimas versiones estables y de desarrollo del servidor
OpenLDAP. En el momento de actualizar este documento, la última
versión era <tt>/openldap-stable-20000129.tgz</tt>. La última versión
de desarrollo era <tt>openldap-1.2.9.tgz</tt> (eran las últimas
versiones en el momento de traducir, <bf/N. del T./)

<sect1>Desempaquetado del servidor
<p>
Ahora que ya dispone del archivo <tt/.tar.gz/ en su máquina local, puede
desempaquetarlo. 
<p>
En primer lugar, copie el paquete en un directorio de su conveniencia,
por ejemplo <tt>/usr/local</tt>.
<p>
Luego utilice la siguiente orden:
<p>
<tscreen><verb>
tar xvzf openldap-stable.tgz 
</verb></tscreen>
<p>
También puede usar la siguiente orden:
<p>
<tscreen><verb>
gunzip openldap-stable.tgz &verbar; tar xvf - 
</verb></tscreen>

<sect1>Configuración del programa
<p>
Hay varias opciones que tal vez desee personalizar, de manera que el
programa se construya de la forma más adaptada a sus sistema.

<p>
Para configurar el programa sólo necesita dos pasos:
<itemize>
<item>Edite el fichero <tt/ldapconfig.h.edit/, situado en el
subdirectorio <tt>include/</tt> que cuelga del directorio en el que ha
desempaquetado el programa.
<item>Ejecute el guión <tt>./configure</tt>. Si le gustan las emociones
fuertes, puede editar igualmente el fichero <tt/Make-common/ en lugar
de ejecutar el guión de configuración  :^) 
</itemize>

<p>
En el fichero <tt>include/ldapconfig.h.edit</tt> puede configurar
opciones como el emplazamiento de los demonios <em/slapd/ y
<em/slurpd/. El fichero propiamente dicho contiene muchos comentarios
y sus opciones por defecto también reflejan las opciones que los
administradores eligen con más frecuencia, de manera que si tiene
prisa puede saltarse este paso y ejecutar directamente:

<p>
<tscreen><verb>
vi include/ldapconfig.h.edit 
</verb></tscreen>

<p>
El código fuente de <em/OpenLDAP/ se distribuye con un guión de
configuración para ajustar opciones como por ejemplo el directorio de
instalación y las ««banderas»» del compilador y del enlazador. Escriba
la orden siguiente en el directorio donde haya desempaquetado el
programa: 
<tscreen><verb>
./configure --help 
</verb></tscreen>

Ello mostrará por pantalla todas las opciones que puede personalizar
con el guión <tt/configure/ antes de compilar el programa. Algunas
opciones útiles para establecer los directorios de instalación son
<tt>--prefix=pref</tt>, <tt>--exec-prefix=eprefix</tt> y
<tt>--bindir=dir</tt>. Normalmente, si ejecuta <tt>./configure</tt>
sin opciones, él mismo autodetectará las opciones adecuadas y se
preparará para construir el paquete en la localización común
predeterminada. Así pues, teclee:

<tscreen><verb>
./configure 
</verb></tscreen>
Y observe el resultado por pantalla para verificar que no se produce
ningún error. 

<sect1>Compilación del servidor

<p>
Después de configurar el programa puede empezar a compilarlo. Primero
construya las dependencias mediante la orden:

<tscreen><verb>
make depend 
</verb></tscreen>
Después compile el servidor mediante la orden:
<tscreen><verb>
make 
</verb></tscreen>

Si todo va bien, el servidor se compilará tal y como se haya
configurado. En caso contrario, vuelva al paso anterior para revisar
las opciones de configuración. Revise las sugerencias específicas para
su plataforma, que se hallan en la ruta <tt>doc/install/hints</tt> que
cuelga del directorio en el que desempaquetó el software.

<p>
Instale luego los ejecutables y las páginas de manual. Es posible que
precise de permisos de superusuario para poder llevarlo a cabo
(depende del lugar en donde instale los ficheros):

<tscreen><verb>
su 
make install 
</verb></tscreen>

Es todo. Ya dispone del ejecutable del servidor y de los ejecutables
de otras varias utilidades. Para saber cómo configurar el
funcionamiento de su servidor LDAP, véase la sección 
<ref id="3" name="siguiente">.

<p>Si antes de aprender cómo se configura su servidor LDAP desea
verificar los ejecutables recién compilados, las últimas versiones del
servidor <em/OpenLDAP/ vienen con un guión de verificación. Cuando se
actualizó este documento el guión de verificación no era estable al
100% para todos los diagnósticos que llevaba a cabo. De todas maneras
pruébelo y ejecútelo, si algún aspecto del guión no funciona bien,
siempre puede pararlo pulsando <tt>Ctrl+C</tt>. En nuestro caso, antes
de que el guión o script se detuviera, pudimos observar algunos
mensajes que mostraban que los diagnósticos más comunes se habían
llevado a cabo con éxito. Para ejecutar el guión de verificación,
cámbiese al subdirectorio <tt>test/</tt> que cuelga de la ruta en la
que desempaquetó el software, y luego teclee:  

<tscreen><verb>
make
</verb></tscreen>

<sect>Configuración del servidor LDAP<label id="3">
<p>
Cuando el software se haya compilado e instalado, ya puede
configurarlo para utilizarlo en su servidor. Toda la configuración en
tiempo de ejecución de <em/slapd/ se realiza mediante el fichero
<tt/slapd.conf/, que se instala en el directorio que haya especificado
en <tt/--prefix/ en el guión de configuración, o bien, si no
especificó ninguno, en <tt>/usr/local/etc/openldap</tt> de forma
predeterminada.

<p>
En este directorio hallará asimismo los ficheros <tt/slapd.oc.conf/ y
<tt/slapd.at.conf/ que se incluyen en el fichero <tt/slad.conf/ (véase
la opción <em/include/ en la <ref id="3.2" name="sección 3.2">) y que
incluyen, respectivamente, las definiciones de clases de objetos
(<em/objectclasses/) y atributos para la base de datos de segundo
plano de LDAP (<em/backend/). Lo que sigue es una descripción del formato
general del fichero de configuración, y continuaremos con una
descripción detallada de cada opción del fichero de configuración.

<sect1>Formato del fichero de configuración
<p>
El fichero <tt>slapd.conf</tt> está compuesto por una serie de
opciones globales de configuración que afectan a <tt>slapd</tt> en su
conjunto (incluyendo todas las bases de datos de segundo plano o
<em/backends/), seguido por cero o más definiciones de <em/backends/,
las cuales contienen información específica de una instancia de
<em/backend/.
<p>
Las opciones globales de configuración pueden anularse en un
<em/backend/ determinado (para opciones que aparecen más de una vez,
se usa la última aparición en el fichero de configuración
<tt/slapd.conf/). Se ignoran las líneas en blanco y las líneas de
comentario que comienzan por el carácter de «&num;». Si una línea
comienza por un espacio en blanco, se considera una continuación de la
línea anterior. El formato general del fichero <tt/slapd.conf/ es el
siguiente: 

<tscreen><verb>
     &num; comentario - estas opciones se aplican a cualquier base de datos
     &lt;opciones de configuración globales&gt; 
     &num; definición de la base de datos y opciones de configuración
     database &lt;backend tipo 1&gt;
     &lt;opciones de configuración específicas del backend tipo 1&gt; 
     &num;definición de la segunda base de datos y opciones de configuración
     database &lt;backend tipo 2&gt;
     &lt;opciones de configuración específicas del backend tipo 2&gt; 
     &num; definiciones subsiguientes de bases de datos y opciones de configuración 
     ... 
</verb></tscreen>

<p>
Los argumentos de la línea de configuración están separados por
espacios en blanco. Si un argumento contiene espacios en blanco, el
argumento debe encerrarse entre comillas dobles "de esta manera". Si
un argumento contiene unas dobles comillas o una barra invertida
`&bsol;', el carácter ha de ir precedido de una barra invertida
`&bsol;', (p. ej. `&bsol;&bsol;d').
<p>
La distribución de <em/OpenLDAP/ contiene un fichero de configuración de
ejemplo que se instalará en el directorio de configuración
especificado en <tt/--prefix/. También se proporcionan un
<tt/slapd.at.conf/, que contiene muchas definiciones de atributos
utilizadas a menudo, y <tt/slapd.oc.conf/, que contiene muchas
definiciones de clases usadas con frecuencia.

<sect1>Opciones globales<label id="3.2">
<p>
Las opciones que se describen en esta sección se aplican a todos los
<em/backends/, a menos que se sobreescriban o anulen específicamente
en la definición de un <em/backend/ concreto. Los argumentos de opción
que han de sustituirse por texto de verdad se muestran entre signos de
«mayor que» y «menor que» &lt;&gt;.

<descrip>
<tag>access to &lt;algo&gt; &lsqb; by &lt;quién&gt;
&lt;niveldeacceso&gt; &rsqb;+</tag>
Esta opción concede acceso (especificado en &lt;niveldeacceso&gt;) a
una serie de entradas o atributos (especificados por &lt;algo&gt;)
para uno o más peticionarios (especificados en &lt;quién&gt;). Véanse
los ejemplos de control de acceso para más detalles.

<tag>attribute &lt;nombre&gt; &lsqb;&lt;nombre2&gt;&rsqb; &lcub; bin
&verbar; ces &verbar; cis &verbar; tel &verbar; dn &rcub; </tag>
Esta opción asocia a una sintaxis con un nombre de atributo. Por
defecto se supone que un atributo tiene sintaxis «cis». Se le puede
proporcionar a un atributo un nombre alternativo opcional. Las
posibles reglas de sintaxis y su significado son éstas:
<itemize>
<item>bin: binario
<item>ces: cadena con mayúsculas y minúsculas exactas (las mayúsculas y
     minúsculas son significativas durante las comparaciones)
<item>cis: cadena con mayúsculas y minúsculas ignoradas (las mayúsculas
     y minúsculas no son significativas durante las comparaciones)
<item>tel: cadena de número de teléfono (como «cis», pero durante las 
     comparaciones se ignoran los espacios en blanco y los guiones "-")
<item>dn:  "distinguished name" («nombre distintivo»)
</itemize>

<tag>
defaultaccess &lcub; none &verbar; compare &verbar; search &verbar;
read &verbar; write &rcub; </tag> 
Esta opción especifica el acceso por defecto que se concederá a los
solicitantes que no coincidan con ninguna otra línea de acceso (véanse
los ejemplos de control de acceso más abajo). Nótese que un nivel de
acceso implica en sí también los niveles de acceso inferiores a
él. Por ejemplo, el acceso a escritura implica el acceso a lectura, el
acceso a búsqueda y el acceso a comparación. 

Valor predeterminado: <tt/defaultaccess read/

<tag>include &lt;nombrefichero&gt;</tag>
Esta opción ordena a <em/slapd/ que lea información adicional de
configuración desde el fichero especificado, antes de continuar con la
línea siguiente del fichero actual. El fichero que se especifica ha de
seguir el formato normal de configuración de <em/slapd/. Utilice esta 
opción para incluir ficheros que contengan las clases de objetos
(<em/objectclass/) y definiciones de atributo (<em/attribute
definitions/) de su base de datos de segundo plano o <em/backend/. El
paquete de software de LDAP viene con los ficheros <tt/slapd.oc.conf/ y
<tt/slapd.at.conf/. 

<bf/Nota:/ Tenga cuidado al utilizar esta opción. No hay límite mínimo en
el número de opciones <tt/include/ anidadas, ni tampoco se hace una
detección de anidamiento para el caso de bucles sin fin. 

<tag>loglevel &lt;numeroentero&gt;</tag>
Esta opción especifica el nivel de detalle con el que el sistema debe
registrar en un archivo de registro (syslog) las informaciones de
depuración y las estadísticas de funcionamiento (en este caso se
registran mediante el servicio LOCAL4 de <tt/syslogd(8)/. Para que esta
característica esté habilitada, es necesario haber compilado
<em/slapd/ con la opción de compilación <tt/-DLDAP_DEBUG/, excepto
para los dos niveles de estadísticas, que están siempre
habilitados. Los niveles de registro son acumulativos. Para visualizar
qué números corresponden a cada tipo de depuración, ejecute <tt/slapd/
con la opción <tt/-?/ o consulte la tabla de más abajo. Los valores
posibles para &lt;numeroentero&gt; son: 
<itemize>
<item>1 trazado de llamadas a función
<item>2 manejo de paquetes de depurado
<item>4 depurado de trazado intensivo <em/heavy trace/
<item>8 gestión de conexiones
<item>16 mostrar los paquetes enviados y recibidos
<item>32 procesado del filtro de búsqueda
<item>64 procesado de ficheros de configuración
<item>128 procesado de listas de control de acceso
<item>256 estadísticas de registro de conexiones/operaciones/resultados
<item>512 enviar las entradas de registro de estadísticas
<item>1024 imprimir los <em/backends/ de comunicación con el
intérprete de órdenes
<item>2048 imprimir el análisis completo de depuración
</itemize>

Ejemplo: <tt/loglevel 255/ hará que grandes cantidades de información vayan a un archivo de registro a través de syslog.

Valor predeterminado: <tt/loglevel 256/

<tag>objectclass &lt;nombre&gt;</tag>
<verb>objectclass &lt;nombre&gt;
&lsqb; requires &lt;atributos&gt; &rsqb; 
&lsqb; allows &lt;atributos&gt; &rsqb;
</verb>

Esta opción define las reglas de estructura o esquema para la clase de
objetos (<em/objectclass/) especificada. Se usa junto con la opción
<bf/schemacheck/. 

<tag>referral &lt;url&gt;</tag>
Esta opción especifica la autoridad en la que basarse cuando
<em/slapd/ no pueda hallar una base de datos local para gestionar una
petición.  

Ejemplo: 
<tt>referral ldap://ldap.itd.umich.edu</tt>

Esto remitirá las consultas no locales al servidor LDAP de la
Universidad de Michigan. Algunos clientes LDAP con capacidades
inteligentes podrán redirigir su consulta a dicho servidor, pero tenga
en cuanta que la mayoría de esos clientes no gestionarán URLs
sencillas de LDAP que contengan una parte de nombre de máquina y, como
opción, una parte de nombre distintivo (<tt/dn/).

<tag>schemacheck &lcub; on &verbar; off &rcub; </tag>
Esta opción activa (<bf/on/) o desactiva (<bf/off/) la verificación de
estructura. Si la verificación de estructura está activada, se
comprobarán las entradas que se añadan o modifiquen, con el fin de
garantizar que obedecen a las reglas de estructura o esquema que
implica la clase de objetos (<em/objectclass/) a la que pertenecen,
tal y como las definen las correspondientes opciones de la clase de
objetos correspondiente. Si la verificación de estructura está
desactivada (<bf/off/), esta verificación no se realiza.

Valor predeterminado: <tt/schemacheck off/

<tag/sizelimit &lt;numeroentero&gt;/

Esta opción especifica el número máximo de entradas que hay que
devolver de una operación de búsqueda.

Valor predeterminado: <tt/sizelimit 500/

<tag/srvtab &lt;nombrefichero&gt;/

Esta opción especifica el fichero <tt/srvtab/ en el que <em/slapd/
puede encontrar las claves <em/kerberos/ necesarias para autentificar
a los clientes que usen <em/kerberos/. Esto opción es significativa
únicamente si Usted utiliza autentificación por <em/kerberos/, que ha
de activarse en el momento de la compilación incluyendo las
definiciones apropiadas en el fichero <tt/Make-common/.
 
Valor predeterminado: <tt>srvtab /etc/srvtab</tt>

<tag/timelimit &lt;numeroentero&gt;/

Esta opción especifica el número máximo de segundos (en tiempo real)
que <em/slapd/ pasará contestando una petición de búsqueda. Si pasado
ese tiempo no se ha contestado una petición, se devolverá un resultado
que indicará <em/exceeding time/, «tiempo sobrepasado». 

Valor predeterminado: <tt/timelimit 3600 /

</descrip>

<sect1>Opciones generales del backend
<p>
Las opciones de esta sección sólo se aplican al <em/backend/ en el que
estén definidas. Estas opciones están soportadas para todos los tipos
de <em/backend/. 

<descrip>
<tag/database &lt;tipobasededatos&gt;/

Esta opción marca el comienzo de la definición de una nueva instancia
de base de datos.  <bf/&lt;tipobasededatos&gt/ debe ser una de las
siguientes: ldbm, shell, o passwd dependiendo del <em/backend/ sobre
el que servirá la base de datos.

Ejemplo: <tt/database ldbm/ marca el comienzo de la definición de una
nueva instancia de una base de datos con <em/backend/ LDBM. 

<tag/lastmod &lcub; on &verbar; off &rcub; /

Esta opción controla si <em/slapd/ mantendrá automáticamente para cada
entrada los atributos <tt/modifiersName/, <tt/modifyTimestamp/,
<tt/creatorsName/ y <tt/createTimestamp/.

Valor predeterminado: <tt/lastmod off/ 

<tag/readonly &lcub; on &verbar; off &rcub; /

Esta opción pone a la base de datos en modo «sólo lectura». Cualquier
intento de modificar la base de datos devolverá un error de "unwilling
to perform" («no se llevará a cabo la operación»).

Valor predeterminado: <tt/readonly off /

<tag/replica host=&lt;nombredemaquina&gt;&lsqb;:&lt;puerto&gt;&rsqb; /

<verb>replica host=&lt;nombredemaquina&gt;&lsqb;:&lt;puerto&gt;&rsqb;
"binddn=&lt;DN&gt;" 
bindmethod=&lcub; simple &verbar; kerberos &rcub; 
&lsqb;credentials=&lt;contraseña&gt;&rsqb; 
&lsqb;srvtab=&lt;nombrefichero&gt;&rsqb;</verb>

Esta opción especifica una dirección para la duplicación o réplica
esta base de datos. El parámetro <tt/host=/ especifica en qué máquina
(y opcionalmente, en qué puerto) puede encontrarse la instancia del 
<em/slapd/ esclavo. para <tt/&lt;nombremáquina&gt;/ puede usarse lo
mismo un nombre que una dirección IP. Si no se proporciona el
parámetro <tt/&lt;puerto&gt;/ se usará el puerto estándar de LDAP, el
389. 

El parámetro <tt/binddn/ proporciona el <tt/DN/ al que se vinculará el
<em/slapd/ esclavo para sus actualizaciones. Ha de tratarse de un
<tt/DN/ que tenga acceso de lectura y escritura a la base de datos del
esclavo, que normalmente aparece como <tt/rootdn/ en el fichero de
configuración del esclavo. También tiene que coincidir con la opción
<tt/updatedn/ en el fichero de configuración del <em/slapd/ esclavo. 
Puesto que los <tt/DN/ son proclives a contener espacios incrustados,
la cadena completa <tt/"binddn=&lt;DN&gt;"/ ha de estar encerrada
entre comillas. 

<tt/bindmethod/ puede ser o bien <tt/simple/ o bien <tt/kerberos/,
dependiendo de si se usa autentificación sencilla basada en
contraseñas o bien kerberos cuando se conecte con el <em/slapd/
esclavo. La autentificación sencilla precisa que se proporcione una
contraseña válida. La autentificación mediante kerberos precisa de un
fichero <tt/srvtab/ válido. 

El parámetro <tt/credentials=/, que sólo se precisa si se usa
autentificación sencilla, proporciona la contraseña para <tt/binddn/
en el <em/slapd/ esclavo. 

El parámetro <tt/srvtab=/, que sólo se precisa si se usa
autentificación mediante kerberos, especifica el nombre de fichero que
aloja la llave kerberos para el <em/slapd/ esclavo. Si se omite, se
utiliza el fichero <tt>/etc/srvtab</tt>. 

<tag/replogfile &lt;nombrefichero&gt; /

Esta opción especifica el nombre del fichero de registro de
duplicación (registro de réplica) en el cual <em/slapd/ registrará los
cambios. El registro de duplicación generalmente lo escribe <em/slapd/
y lo lee <em/slurpd/. Esta opción normalmente sólo tiene efecto si se
usa <em/slurpd/ para duplicar la base de datos. Sin embargo, puede 
utilizarla también para generar un registro de transacciones, si
<em/slurpd/ no se está ejecutando. En este caso, necesitará truncar
periódicamente el fichero, pues de otra manera crecería
indefinidamente. 

<tag/rootdn &lt;dn&gt; /

Esta opción identifica al <tt/DN/ de una entrada no sujeta a control
de acceso o a restricciones en los permisos de administración para las
operaciones en esta base de datos.

Ejemplo: <tt/rootdn "cn=Manager, o=U of M, c=US" /

<tag/rootkrbname &lt;nombrekerberos&gt; 

Esta opción especifica un nombre kerberos que funcionará en todos los
casos para el <tt/DN/ dado anteriormente, con independencia de que
exista una entrada con el <tt/DN/ especificado o de que tenga el atributo
<tt/krbName/. Esta opción es útil al crear una base de datos y también
cuando se utilice <em/slurpd/ para proporcionar servicios de
duplicación (servicios de réplica).

Ejemplo: <tt/rootkrbname admin@umich.edu /

<tag/rootpw &lt;password&gt; /

Esta opción especifica una contraseña, que funcionará en todos los
casos, para el <tt/DN/ dado anteriormente, con independencia de que el
<tt/DN/ en cuestión exista o ya tenga contraseña. Esta opción es útil
al crear una base de datos y también cuando se utilice <em/slurpd/
para proporcionar servicios de duplicación (servicios de réplica).
Evite tener una contraseña de texto sencillo acompañando a esta
opción. Proporcione una contraseña cifrada (puede usar una entrada
del fichero de Unix <tt>/etc/passwd/</tt>). <em/slapd/ soporta también
otros métodos de cifrado.

Ejemplos: 
<tt>rootpw secret</tt>
<tt>rootpw &lcub;crypto&rcub;contraseña_cifrada_va_aquí </tt>

<tag>suffix &lt;dn sufijo&gt; </tag>

Esta opción especifica el sufijo <tt/DN/ de consultas que se le pasará
a la base de datos de <em/backend/. Pueden proporcionarse múltiples
líneas de sufijo, y se requiere al menos una para cada definición de
base de datos. 

Ejemplo: <tt/suffix "o=University of Michigan, c=US" /

Las consultas que tengan un <tt/DN/ terminado en <tt/"o=University of
Michigan, c=US"/ se le pasarán a este <em/backend/ de base de datos.

<bf/Nota:/ cuando se selecciona el <em/backend/ al que hay que pasarle
la consulta, <em/slapd/ examina la línea o líneas de sufijo en cada
definición de base de datos en el orden en que aparecen en el
fichero. De esta manera, si el sufijo de una base de datos es el
prefijo de otra, dicho sufijo debe aparecer después que el prefijo en
el fichero de configuración.

<tag/updatedn &lt;dn&gt; /

Esta opción sólo se aplica a un <em/slapd/ esclavo. Especifica el
<tt/DN/ al que se le permite hacer cambios en la
duplicación. Generalmente se trata del <tt/DN/ al que <em/slurpd/ se
vincula cuando hace cambios a la duplicación o réplica.
</descrip>

<sect1>Opciones específicas del <em/backend/ LDBM

<p>
Las opciones de esta categoría sólo se aplican a la base de datos de
<tt/backend/ LDBM. Es decir, tienen que ir después de una línea
<tt/"database ldbm"/ y antes de otra línea de <tt/"database"/.

<descrip>
<tag/cachesize &lt;numeroentero&gt; /

Esta opción especifica a instancia de la base de datos de <em/backend/
LDBM el número de entradas en la memoria caché interna que ha de
mantener. 

Valor predeterminado:
<tt/cachesize 1000 /

<tag/dbcachesize &lt;numeroentero&gt; /

Esta opción especifica el tamaño en bytes de la memoria caché interna
asociada con cada fichero de índice abierto. En caso de no estar
soportada por el método de base de datos subyacente, esta opción se
ignora sin mayores avisos. El incremento de este número utilizará más
memoria, pero también causará un aumento espectacular del
rendimiento, especialmente durante las modificaciones o a la hora de
construir los índices. 

Valor predeterminado: <tt/dbcachesize 100000 /

<tag/directory &lt;directorio&gt; /

Esta opción especifica el directorio donde residen los ficheros LDBM
que contienen la base de datos y sus ficheros asociados.

Valor predeterminado: <tt/directory /usr/tmp /

<tag/index &lcub;&lt;listadeatributos&gt; &verbar; default&rcub; &lsqb;pres,eq,approx,sub,none&rsqb; /

Esta opción especifica qué índices hay que mantener para un atributo
especificado. Si se proporciona únicamente una
&lt;listadeatributos&gt; se mantendrán todos los índices posibles.

Ejemplos:
<tt/index cn /
<tt/index sn,uid eq,sub,approx /
<tt/index default none /

Este ejemplo hará que se dé mantenimiento a todos los índices para el
atributo <tt/cn/: que se mantengan índices de igualdad, subcadenas y
cadenas aproximadas en el caso de los atributos <tt/sn/ y <tt/uid/; y
que no se mantengan índices para todos los demás atributos.

<tag/mode &lt;numeroentero&gt; /

Esta opción especifica qué permisos de ficheros (modo de protección)
debe tener el índice de la base de datos recién creada.

Valor predeterminado: <tt/mode 0600 /
</descrip>

<sect1>Ejemplos de control de acceso<label id="bla">
<p>
La característica de control de acceso presentada en la <ref id="3.2"
name="sección 3.2"> es bastante potente. En esta sección se muestran
varios ejemplos de su uso. Primeramente, algunos ejemplos sencillos: 

<tscreen><verb>
access to * by * read 
</verb></tscreen>
<p>
Esta directiva de acceso concede acceso de lectura a todo el mundo. Si
aparece en solitario tiene el mismo efecto que la siguiente línea de 
<tt/defaultaccess/: 
<tscreen><verb>
defaultaccess read 
</verb></tscreen>
<p>
El siguiente ejemplo muestra el uso de una expresión regular para
seleccionar las entradas por <tt/DN/ en dos directivas de acceso en
las que el orden es significativo.
<tscreen><verb>
access to dn=".*, o=U of M, c=US" 
by * search 
access to dn=".*, c=US" 
by * read 
</verb></tscreen>
<p>
El acceso en modo lectura se concede a las entradas que están bajo el
sub-árbol <tt/"o=University of Michigan, c=US"/, al que se permite el
acceso en modo lectura. Si su hubiera invertido el orden de las
directivas de acceso, la directiva específica de la Universidad de
Michigan nunca hubiera coincidido, puesto que todas las entradas de la
U. de M. son también entradas de <tt/c=US/.  
<p>
El próximo ejemplo vuelve a mostrar la importancia del orden, tanto en
lo que se refiere a las directivas de acceso como a las cláusulas
<tt/"by"/. También muestra el uso de un selector de atributos para
conceder acceso a un atributo específico y a varios selectores
&lt;quién&gt; (&lt;who&gt;).
<tscreen><verb>
access to dn=".*, o=U of M, c=US" attr=homePhone 
by self write 
by dn=".*, o=U of M, c=US" search 
by domain=.*&bsol;.umich&bsol;.edu read 
by * compare 
access to dn=".*, o=U of M, c=US" 
by self write 
by dn=".*, o=U of M, c=US" search 
by * none 
</verb></tscreen>
<p>
Este ejemplo se aplica a las entradas en el sub-árbol <tt/"o=U of M,
c=US"/. Para todos los atributos excepto <tt/homePhone/, la propia
entrada tiene puede escribirlos, otras entradas de "U of M" pueden
buscar por ellas, y nadie más tiene acceso. La entrada tiene permisos
de escritura sobre el atributo <tt/homePhone/, permisos de búsqueda
para otras entradas de la "U of M", permisos de lectura para otros
clientes que conecten desde algún lugar del dominio umich.edu, y
permisos de comparación para el resto del mundo. 
<p>
A veces es útil permitir que un <tt/DN/ particular se añada o elimine
a sí mismo de un atributo. Por ejemplo, si se desea crear un grupo y
permitir que los usuarios lo añadan y eliminen de su atributo
<tt/member/ en su propio <tt/DN/, puede lograrse con una directiva de
acceso como la siguiente:
<tscreen><verb>
access to attr=member,entry 
by dnattr=member selfwrite 
</verb></tscreen>
<p>
El selector <tt/dnattr &lt;quién&gt;/ nos dice que el acceso se aplica
a entradas listadas en el atributo <tt/member/. El selector
<tt/selfwrite access/ especifica que tales miembros sólo pueden añadir
o eliminar del atributo su propio <tt/DN/ y no otros valores. El
añadido del atributo <tt/entry/ es necesario, ya que se requiere el
<tt/access/ de la entrada para acceder a alguno de los atributos de
esa entrada. 
<p>
Observe que la construcción <tt/attr=member/ en la cláusula
<tt/&lt;qué&gt;/ es un atajo para la cláusula <tt/"dn=* attr=member"/
(es decir, que coincide con el atributo <tt/member/ en todas las
entradas). 

<sect>Ejecución del servidor LDAP <label id="4">
<p>
<em/Slapd/ puede ejecutarse de dos maneras diferentes, como demonio o
servicio permanente, o bien desde <tt/inetd(8)/. Se recomienda la
ejecución como demonio permanente, sobre todo si usa el <em/backend/
de LDBM. Ello permitirá al <tt/backend/ beneficiarse del uso de
memoria de almacenamiento intermedio (<em/caché/) y evita problemas de
acceso compartido a los ficheros de índices de LDBM. Si únicamente
ejecuta un <em/backend/ de tipo SHELL o PASSWD, entonces sí puede
considerar la opción de ejecutar <em/slapd/ desde <tt/inetd/. 

<sect1>Opciones desde la línea de órdenes<label id="4.1">
<p>
<em/Slapd/ soporta las siguientes opciones de línea de órdenes: 
<descrip>
<tag/-d &lt;nivel&gt; &verbar; ? /

Esta opción fija el nivel de depuración de <em/slapd/ en
<tt/&lt;nivel&gt;/. Cuando el nivel es un carácter  <tt/`?/', se
muestran los distintos niveles de depuración y <em/slapd/ termina, con
independencia de cualquier otra opción que se introduzca. Los niveles
de depuración existentes son: 

<itemize>
<item>1 trazado de llamadas a función
<item>2 manejo de paquetes de depurado
<item>4 depurado de trazado intensivo <em/heavy trace/
<item>8 gestión de conexiones
<item>16 mostrar los paquetes enviados y recibidos
<item>32 procesado del filtro de búsqueda
<item>64 procesado de ficheros de configuración
<item>128 procesado de listas de control de acceso
<item>256 estadísticas de registro de conexiones/operaciones/resultados
<item>512 enviar las entradas de registro de estadísticas
<item>1024 imprimir los <em/backends/ de comunicación con el
intérprete de órdenes
<item>2048 imprimir el análisis completo de depuración
<item>65535 activar depuración completa
</itemize>

Los niveles de depuración son acumulativos. Si desea trazar llamadas a
funciones y observar qué fichero de configuración se está procesando,
fije el nivel de depuración al resultado de la suma de estos dos
niveles ( en este caso, 65). Consulte el fichero <tt/&lt;ldap.h&gt;/
para más detalles. 

Observe que <em/slapd/ se tendrá que haber compilado con la opción
<tt/-DLDAP_DEBUG/ definida, si se desea un nivel de depuración
superior a los dos niveles de estadísticas disponibles.

<tag/-f &lt;nombrefichero&gt; /

Esta opción especifica un fichero de configuración alternativo para
<em/slapd/ 

<tag/-i /

Esta opción le especifica a <em/slapd/ que se ejecute desde <tt/inetd/
en vez de hacerlo como un demonio o servicio independiente. En la
próxima sección encontrará más detalles sobre la ejecución de
<em/slapd/ desde <tt/inetd/.

<tag/-p &lt;puerto&gt; /

Esta opción especifica un puerto TCP alternativo en el que <em/slapd/
se mantendrá a la escucha para las conexiones. El puerto por defecto
es el 389.
</descrip>

<sect1>Ejecución de <em/slapd/ como demonio o servicio independiente<label id="42">
<p>
Como norma general, <em/slapd/ se ejecuta de la siguiente manera:

<tscreen><verb>
# $(ETCDIR)/slapd &lsqb;&lt;opción&gt;&rsqb;* 
</verb></tscreen>

donde ETCDIR tiene el valor que le haya asignado en el fichero
<tt/Make-common/ o en el guión <tt>./configure</tt> durante la
configuración previa a la compilación, y <tt/&lt;opción&gt;/ es una de
las opciones descritas más arriba.
A menos que haya especificado un nivel de depuración, <em/slapd/ se
desvinculará automáticamente del terminal desde el que lo lanzó, y se
ejecutará en segundo plano, en modo demonio o servicio. Cualquiera de
las opciones de más arriba pueden darse en la línea de órdenes para
hacer que <em/slapd/ cargue un fichero de configuración diferente, o
que escuche en otro puerto, etcétera.

<p>
Véase el siguiente ejemplo de comienzo de <em/slapd/: 

<tscreen><verb>
$(ETCDIR)/slapd -f /home/malere/mi_slapd.conf -d 255 
</verb></tscreen>

<sect1>Ejecución de slapd desde inetd
<p>
En primer lugar, asegúrese de que sea una buena idea ejecutar
<em/slapd/ desde <tt/inetd/. Si está usando el <em/backend/ LDBM,
entonces no es buena idea. Si está en un entorno de mucho servicio,
entonces la sobrecarga que supone ejecutarlo desde <tt/inetd/ también
lo convierte en una mala idea. Si no es su caso puede seguir adelante
con los dos pasos necesarios.
<p>
El primer paso es añadir a <tt>/etc/services/</tt> una línea como la
siguiente: 
<tscreen><verb>
ldap 389 &num; ldap directory service 
</verb></tscreen>
<p>
El segundo paso es añadir una línea como la siguiente a su fichero
<tt>/etc/inetd.conf</tt>: 
<tscreen><verb>
ldap stream tcp nowait nobody $(ETCDIR)/slapd slapd -i 
</verb></tscreen>
<p>
donde ETCDIR tiene el valor que le haya asignado en el fichero
<tt/Make-common/ o en el guión <tt>./configure</tt> durante la
configuración previa a la compilación. 
Finalmente envíele a <tt/inetd/ una señal <tt/-HUP/ y ya tendrá su
configuración. (<bf/N. del T.:/ pruebe con <tt/killall -HUP inetd/ o mejor
todavía <tt/kill -HUP $(pidof inetd)/ o 
<tt>kill -TERM `cat $(ETCDIR)/inetd.pid`</tt>)

<sect>Creación y mantenimiento de bases de datos
<p>
Esta sección le explica cómo crear una base de datos de <em/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 <em/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).
<p>
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.

<sect1>Creación de una base de datos en línea
<p>
El paquete de software <em/OpenLDAP/ viene con una utilidad llamada
<tt/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 <tt/ldapadd/ para añadir las entradas. Tras 
de añadir las primeras entradas, puede seguir usando posteriormente
<tt/ldapadd/ para añadir más entradas. Antes de iniciar <em/slapd/,
asegúrese de que activa las siguientes opciones de configuración en su
fichero <tt/sladp.conf/:

<p>
<tt/suffix &lt;dn&gt; /
<p>

Tal como se explicó en la <ref id="3" name="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 <tt/DN/ de la raíz del sub-árbol que va a
crear. Por ejemplo: 
<p>
<tt/suffix "o=TUDelft, c=NL" /
<p>
Asegúrese de especificar en qué directorio se crearán los archivos de
configuración: 
<p>
<tt>directory &lt;directorio&gt;</tt>
<p>
Por ejemplo:
<p>
<tt>directory /usr/local/tudelft</tt>
<p>
Tendrá que realizar el siguiente paso para poder conectar con <em/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: 
<p>
<tt/rootdn &lt;dn&gt; /
<p>
<tt>rootpw &lt;contraseña&gt;</tt> /* ¡Recuerde usar contraseña «cripto» aquí ! */
<p>
Estas opciones especifican un <tt/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 <tt/DN/ y la contraseña especificados aquí
funcionarán siempre, con independencia de que la entrada de <tt/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.
<p>
Finalmente debe asegurarse de que la definición de base de datos
contiene las definiciones de índices que usted desea:
<p>
<tt>index &lcub;&lt;attrlist&gt; &verbar; default&rcub; &lsqb;pres,eq,approx,sub,none&rsqb; </tt>
<p>
Para indexar los atributos de clase de objetos (<tt/objectclass/)
<tt/cn/, <tt/sn/ y <tt/uid/ se pueden usar por ejemplo las siguientes
líneas de configuración:
<p>
<tt/ index cn,sn,uid /
<p>
<tt/index objectclass pres,eq /
<p>
<tt/index default none /
<p>
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 <tt/TUDelft/ seguida de una entrada <tt/Postmaster/
utilizando la herramienta <tt/ldapadd/, puede crear un fichero llamado <tt>/tmp/entradanueva</tt> con el contenido: 
<tscreen><verb>
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 
</verb></tscreen>
<p>
y luego utilizar una orden como la siguiente para crear de verdad la
entrada:  
<tscreen><verb>
ldapadd -f /tmp/entradanueva -D "cn=Manager, o=TUDelft, c=NL" -w secret 
</verb></tscreen>
<p>
Estar orden supone que Usted ha configurado <tt/rootdn/ como
<tt/"cn=Manager, o=TUDelft, c=NL"/ y que la contraseña <tt/rootpw/ es
«secret». 
Si no desea escribir la contraseña en la línea de órdenes, utilice la
opción <tt/-W/ de la orden <tt/ldapadd/, en lugar de <tt/-w
"contraseña"/. Se le pedirá que introduzca interactivamente la
contraseña: 
<tscreen><verb>
ldapadd -f /tmp/entradanueva -D "cn=Manager, o=TUDelft, c=NL" -W 
Enter LDAP Password : 
</verb></tscreen>

<sect1>Creación de una base de datos sin estar en línea
<p>
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 <em/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:  
<p>
<tt/suffix &lt;dn&gt; /
<p>
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 <tt/DN/ de la raíz del sub-árbol que
intenta crear, por ejemplo: 
<p>
suffix "o=TUDelft, c=NL" 
<p>
Asegúrese de especificar un directorio en el que crear los ficheros de
índice:
<p>
<tt/directory &lt;directorio&gt; /
<p>
Por ejemplo: 
<p>
<tt>directory /usr/local/tudelft</tt>
<p>
Después querrá seguramente aumentar el tamaño de la memoria de
almacenamiento intermedio (<em/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:
<p>
dbcachesize &lt;númeroentero&gt; 
<p>
Por ejemplo:
<p>
dbcachesize 50000000 
<p>
Esto creará una memoria de almacenamiento intermedio (<em/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 <em/slapd/. 
<p>
Finalmente tendrá que especificar concretamente qué índices desea
construir. Esto se consigue con una o más opciones que se aplican a
los índices.
<p>
<tt/index &lcub;&lt;listaatributos&gt; &verbar; default&rcub; &lsqb;pres,eq,approx,sub,none&rsqb; /
<p>
Por ejemplo: 
<p>
<tt/index cn,sn,uid pres,eq,approx /
<p>
<tt/index default none /
<p>
Esto creará índices de presencia (<em/presence/), igualdad
(<em/equality/) y aproximación (<em/approximate/) de los atributos
<tt/cn/, <tt/sn/ y <tt/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  <ref id="3" name="sección 3">. 
<p>
Una vez que haya configurado estos parámetros según sus preferencias,
cree los índices ejecutando el programa <tt/ldif2ldbm/:
<p>
<tt>ldif2ldbm -i &lt;ficheroentrada&gt; -f &lt;ficheroconfigslapd&gt; 
&lsqb;-d &lt;niveldepuración&gt;&rsqb; &lsqb;-j &lt;númeroentero&gt;&rsqb; 
&lsqb;-n &lt;numerodebasedatos&gt;&rsqb; &lsqb;-e &lt;directorioetc&gt;&rsqb; </tt>
<p>
Los argumentos tienen estos significados:
<p>
<tt/-i &lt;ficheroentrada&gt; /
<p>
Especifica el fichero de entrada LDIF que contiene en formato de texto
las entradas por añadir.
<p>
-f &lt;ficheroconfigslapd&gt; 
<p>
Especifica el fichero de configuración de <em/slapd/ que indica dónde
crear los índices, qué índices hay que crear, etc.
<p>
<tt/-d &lt;niveldepuración&gt; /
<p>
Activa la depuración, según se especifique en &lt;niveldepuración&gt;.
Los niveles de depuración son los mismos que para <em/slapd/ (véase la
<ref id="4.1" name="sección 4.1">). 
<p>
<tt/-j &lt;númeroentero&gt; /
<p>
Es un argumento opcional que especifica que, como mínimo la cantidad
&lt;númeroentero&gt;  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, <tt/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. 
<p>
<tt/-n &lt;númerodebasedatos&gt; /
<p>
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.
<p>
<tt/-e &lt;etcdir&gt; /
<p>
Es un argumento opcional que especifica el directorio en donde
<tt/ldif2ldbm/ podrá hallar las otras herramientas de conversión de
bases de datos que precisa para ejecutarse (<tt/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 <tt/ldif2ldbm/:
<p>
<tt>/usr/local/sbin/ldif2ldbm -i nuevas_entradas -f myslapd.conf </tt>

<sect1>Cuestiones adicionales sobre el formato LDIF
<p>
El formato de intercambio de datos de LDAP (<em/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:
<tscreen><verb>
&lsqb;&lt;id&gt;&rsqb; 
dn: &lt;distinguished name&gt; 
&lt;tipodeatributo&gt;: &lt;valordel_atributo&gt; 
&lt;tipodeatributo&gt;: &lt;valordel_atributo&gt; 
... 
</verb></tscreen>
<p>
en donde <tt/&lt;id&gt;/ 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 <tt/ldbmcat/, no
obstante, produce un formato LDIF que incluye <tt/&lt;id&gt;/ de
manera que los nuevos índices que se creen sean consistentes. 
<p>
Puede continuarse una línea añadiendo un espacio al principio de la
siguiente, p. ej.:
<tscreen><verb>
dn: cn=Barbara J Jensen, o=University of Michi
 gan, c=US 
</verb></tscreen>
<p>
Múltiples valores de un atributo se especifican en líneas separadas,
por ejemplo:
<tscreen><verb>
cn: Barbara J Jensen 
cn: Babs Jensen 
</verb></tscreen>
<p>
Si un &lt;valordel_atributo&gt; contiene un carácter no imprimible, o
comienza con un espacio o con dos puntos «:», entonces el
&lt;tipodeatributo&gt;  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:
<tscreen><verb>
cn:: IGJlZ2lucyB3aXRoIGEgc3BhY2U= 
</verb></tscreen>
<p>
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:
<tscreen><verb>
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 
... 
</verb></tscreen>
<p>
Nótese que el tipo de atributo <tt/jpegPhoto/ en la entrada de
Jennifer Jensen se codifica usando base64. El programa <em/ldif/ que
viene con el paquete <em/OpenLDAP/ puede usarse para producir el formato
LDIF. 
<p>
<bf/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.

<sect1>Las utilidades ldapsearch, ldapdelete y ldapmodify
<p>
<tt/ldapsearch/ - <em/ldapsearch/ es una interfaz, accesible desde la
línea de órdenes, para la llamada a biblioteca
<em/ldap_search(3)/. Use esta utilidad para buscar entradas en el
dorsal (<em/backend/) de nuestra base de datos LDAP.
<p>
La sinopsis de las opciones de <em/ldapsearch/ es la siguiente (véase
la página de manual de <tt/ldapsearch(1)/ para conocer el significado
de cada opción): 
<tscreen><verb>
ldapsearch  &lsqb;-n&rsqb;  &lsqb;-u&rsqb;  &lsqb;-v&rsqb;
&lsqb;-k&rsqb;  &lsqb;-K&rsqb;  &lsqb;-t&rsqb;  &lsqb;-A&rsqb;
&lsqb;-B&rsqb; &lsqb;-L&rsqb; &lsqb;-R&rsqb; 
&lsqb;-d niveldepuración&rsqb; &lsqb;-F separador&rsqb; 
&lsqb;-f fichero&rsqb; &lsqb;-D dn_deacceso&rsqb;  &lsqb;-W&rsqb;  
&lsqb;-w contraseña_acceso&rsqb;  &lsqb;-h servidorldap&rsqb;  
&lsqb;-p puertoldap&rsqb;   &lsqb;-b basebúsqueda&rsqb;   
&lsqb;-s base&verbar;one&verbar;sub&rsqb;  
&lsqb;-a never&verbar;always&verbar;search&verbar;find&rsqb; 
&lsqb;-l límitetiempo&rsqb; &lsqb;-z límitetamaño&rsqb; filtro
&lsqb;atributos...&rsqb;  
</verb></tscreen>
<p>
<tt/ldapsearch/ abre una conexión a un servidor LDAP, se «engancha» a
él y lleva a cabo una búsqueda utilizando el filtro <tt/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 <em/ldapsearch/ encuentra una o más entradas, se
obtienen los atributos especificados en <tt/atributos/ y se imprimen
por salida estándar las entradas y sus valores. Si no se listan
atributos, se devuelven todos los atributos.
<p>
He aquí algunos ejemplos del uso de <em/ldapsearch/:
<tscreen><verb>
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 
</verb></tscreen>
<p>
La opción <tt/-b/ representa la base de búsqueda (el punto inicial de
la búsqueda) y la opción <tt/-u/ representa la opción «amigable para
el usuario», refiriéndose a la información de salida.
<p>
<tt/ldapdelete/ - <em/ldapdelete/ es una interfaz, accesible desde la
línea de órdenes, para la llamada a biblioteca <em/ldap_delete(3)/. Use
esta utilidad para buscar entradas en el dorsal (<em/backend/) de 
nuestra base de datos LDAP.
<p>
La sinopsis de las opciones de <em/ldapdelete/ es la siguiente (véase
la página de manual de <tt/ldapdelete(1)/ para conocer el significado
de cada opción): 
<tscreen><verb>
ldapdelete   &lsqb;-n&rsqb;   &lsqb;-v&rsqb;  &lsqb;-k&rsqb;
&lsqb;-K&rsqb;  &lsqb;-c&rsqb;  &lsqb;-d nivel_depuración&rsqb;
&lsqb;-f fichero&rsqb;  &lsqb;-D dn_de_enganche&rsqb;  &lsqb;-W&rsqb;
&lsqb;-w contraseña&rsqb;  &lsqb;-h servidorldap&rsqb; 
&lsqb;-p puertoldap&rsqb; &lsqb;dn&rsqb;... 
</verb></tscreen>
<p>
<em/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 <tt/dn/, se borrarán las entradas con estos
<tt/Distinguished Names/. Cada <tt/dn/ debe se la representación
mediante una cadena de un <tt/DN/ de la forma especificada en el RFC
1779. Si no se proporcionan argumentos de <tt/dn/, entonces se leerá
la lista de <tt/DNs/ desde la entrada estándar (o bien desde un
fichero si se utiliza la opción <tt/-f/).
<p>
He aquí algunos ejemplos del uso de <em/ldapdelete/:
<tscreen><verb>
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 
</verb></tscreen>

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

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

<p>
La sinopsis de las opciones de <em/ldapmodify/ es la siguiente (véase
la página de manual de <tt/ldapmodify(1)/ para conocer el significado
de cada opción): 
<tscreen><verb>
ldapmodify   &lsqb;-a&rsqb;  &lsqb;-b&rsqb;  &lsqb;-c&rsqb;
&lsqb;-r&rsqb;  &lsqb;-n&rsqb;  &lsqb;-v&rsqb;  &lsqb;-k&rsqb;
&lsqb;-d nivelde_depuración&rsqb;  &lsqb;-D dn_de_enganche&rsqb;
&lsqb;-W&rsqb;  &lsqb;-w contraseña&rsqb;  &lsqb;-h servidorldap&rsqb;
&lsqb;-p puertoldap&rsqb; &lsqb;-f fichero&rsqb; 

ldapadd &lsqb;-b&rsqb; &lsqb;-c&rsqb; &lsqb;-r&rsqb; &lsqb;-n&rsqb;
&lsqb;-v&rsqb;  &lsqb;-k&rsqb;  &lsqb;-K&rsqb;  
&lsqb;-d nivelde_depuración&rsqb;  &lsqb;-D dn_de_enganche&rsqb;  
&lsqb;-w contraseña&rsqb;  &lsqb;-h servidorldap&rsqb;  
&lsqb;-p puertoldap&rsqb; &lsqb;-f fichero&rsqb; 
</verb></tscreen>
<p>
<em/ldapadd/ está implementado en forma de enlace no simbólico 
(<em/hard link/) a la utilidad <em/ldapmodify/. Cuando se llama a la
utilidad en la forma <tt/ldapadd/, la opción <tt/-a/ (añadir nueva
entrada) se activa automáticamente.

<em/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 <tt/-f/.
<p>
He aquí algunos ejemplos del uso de ldapmodify:
<p>
Suponiendo que el fichero <tt>/tmp/entrymods</tt> exista y tenga un
contenido: 
<tscreen><verb>
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 
- 
</verb></tscreen>
<p>
La orden:  
<tscreen><verb>
ldapmodify -b -r -f /tmp/modif_entrada
</verb></tscreen>
<p>
sustituirá el contenido del atributo <tt/mail/ de la entrada
<tt/"Modify Me"/ con el valor
<tt/"modme@terminator.rs.itd.umich.edu"/, le añadirá el título de 
<tt/"Grand Poobah"/, el contenido del fichero <em>/tmp/modme.jpeg</em>
como <tt/jpegPhoto/, y eliminará completamente el atributo
<tt/description/. 
<p>
Pueden llevarse a cabo las mismas modificaciones usando el formato de
introducción más antiguo de <em/ldapmodify/: 
<tscreen><verb>
cn=Modify Me, o=University of Michigan, c=US 
mail=modme@terminator.rs.itd.umich.edu 
+title=Grand Poobah 
+jpegPhoto=/tmp/modme.jpeg 
-description 
</verb></tscreen>
<p>
Esto más la orden siguiente:
<tscreen><verb>
ldapmodify -b -r -f /tmp/modif_entrada 
</verb></tscreen>
<p>
Eso suponiendo que el fichero /tmp/newentry exista y tenga el
siguiente contenido:
<tscreen><verb>
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 
</verb></tscreen>
<p>
La orden:
<tscreen><verb>
ldapadd -f /tmp/modif_entrada
</verb></tscreen>
<p>
Suponiendo que el fichero /tmp/modif_entrada exista y tenga el contenido:
<tscreen><verb>
dn: cn=Barbara Jensen, o=University of Michigan, c=US 
changetype: delete 
</verb></tscreen>
<p>
La orden:
<tscreen><verb>
ldapmodify -f /tmp/modif_entrada 
</verb></tscreen>
<p>
eliminará la entrada de Babs Jensen.
<p>
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). 

<sect>Más información y características adicionales
<p>
En esta sección hallará información sobre el Libro de Direcciones de
Netscape, un cliente LDAP que puede utilizar para consultar su
Directorio; también presentamos los detalles sobre cómo implementar
acceso móvil o itinerante (<em/roaming access/) utilizando el Netscape
Navigator en sus versiones 4.5 y superiores más su servidor LDAP. Se
ha vertido mucha tinta electrónica en las listas de correo de
<em/OpenLDAP/ sobre el acceso itinerante, pues se trata de una
característica todavía no implementada totalmente. A muchas personas
no les agrada la forma en que Netscape Navigator interactúa con el
servidor LDAP a la hora de realizar grabaciones y recuperaciones de
datos. Así pues, si tras la lectura de estas líneas tiene la impresión
de que el acceso itinerante no funciona de la forma que usted
desearía, no se preocupe; muchas personas tienen la misma impresión
que usted. La finalidad de la introducción de esta característica ha
sido principalmente dar a la gente una idea de las posibilidades del
protocolo LDAP, más que otras consideraciones. Para terminar, verá
algunas informaciones sobre cómo matar con seguridad el proceso
<em/slapd/ y sobre los ficheros de registro (logs) de <em/slapd/.

<sect1>Acceso itinerante (perfiles móviles)
<p>

El objetivo del acceso itinerante (llamado en Netscape «perfiles
móviles») es que, desde cualquier lugar de la Red donde se encuentre,
pueda obtener localmente sus marcadores de URL's, preferencias que
personalizan la aplicación, filtros de correo, etcétera, mediante la
utilización de un Navegador Netscape y un servidor LDAP.

Se trata de una característica muy conveniente. Imagine que desde
cualquier lugar al que pueda acceder a la Web, pueda tener sus propias
preferencias en el navegador. Si va a viajar y precisa acceder a ese
sitio de cambio de divisas que tiene almacenado en sus marcadores
personales (<em/bookmarks/), no se inquiete; simplemente cargue sus
marcadores y otros ficheros de configuración en un servidor LDAP y
podrá recuperarlos todos después con independencia del lugar en el que
se encuentre. 
<p>
Para implementar acceso itinerante (en inglés <em/roaming access/) ha
de seguir los pasos que se detallan a continuación:
<itemize>
<item>Cambiar su fichero de descripción de atributos
<item>Cambiar su fichero de descripción de clases de objetos (<tt/objectclass/).
<item>Cambiar el fichero LDIF para que incluya perfiles
<item>Configurar el Netscape Navigator para que utilice el servidor LDAP como el servidor de acceso itinerante.
<item>Reiniciar el servidor LDAP con la nueva configuración.
</itemize>
<p>
- Cambiar el fichero de atributos
Es preciso que añada nuevos atributos a la lista existente en el
fichero <tt/slapd.at.conf/; es este el fichero que se incluye en su
<tt/slapd.conf/ y que normalmente se localiza en
/usr/local/etc/openldap (<bf/N. del T.:/ si ha instalado su distribución
OpenLDAP a partir de un fichero <tt/.deb/ o de un <tt/.rpm/, el lugar
más probable será <tt>/etc/openldap/</tt>)
: 
<tscreen><verb>
attribute	nsLIPtrURL		ces 
attribute	nsLIPrefs		ces 
attribute	nsLIProfileName		cis 
attribute	nsLIData		bin 
attribute	nsLIElementType		cis 
attribute	nsLIServerType		cis 
attribute	nsLIVersion		cis 
</verb></tscreen>
<p>
- Cambiar el fichero <tt/objectclass/:
Debe añadir algunas clases nuevas a su fichero <tt/lapd.oc.conf/ (es
otro fichero que se incluye en su <tt/slapd.conf/ y que se localiza
normalmente en <tt>/usr/local/etc/openldap</tt>, para habilitar el
acceso itinerante (<bf/N. del T.:/ si ha instalado su distribución
OpenLDAP a partir de un fichero <tt/.deb/ o de un <tt/.rpm/, el lugar
más probable será <tt>/etc/openldap/</tt>):

<tscreen><verb>
objectclass nsLIPtr 
requires 
	objectclass 
allows 
	nsliptrurl, 
	owner 

objectclass nsLIProfile 
requires 
	objectclass, 
	nsliprofilename 
allows 
	nsliprefs, 
	uid, 
	owner 

objectclass nsLIProfileElement 
requires 
	objectclass, 
	nslielementtype 
allows 
	owner, 
	nslidata, 
	nsliversion 

objectclass nsLIServer 
requires 
	objectclass, 
	serverhostname 
allows 
	description, 
	cn, 
	nsserverport, 
	nsliservertype, 
	serverroot 
</verb></tscreen>
<p>
- Cambiar el fichero LDIF: 
Ahora ha de modificar el fichero LDIF, añadiéndole entradas de
perfiles relativas a cada usuario que desee probar la característica
de perfiles móviles del Netscape. Obsérvese un ejemplo de un fichero
LDIF sencillo con entradas de perfiles:

<tscreen><verb>
dn: o=myOrg,c=NL 
o: myOrg 
objectclass: organization 

dn: cn=seallers,ou=People,o=myOrg,c=NL 
cn: seallers 
userpassword: MiClaVE 
objectclass: top 
objectclass: person 

dn: nsLIProfileName=seallers,ou=Roaming,o=myOrg,c=NL 
changetype: add 
objectclass: top 
owner: cn=seallers,ou=People,o=myOrg,c=NL 
objectclass: top 
objectclass: nsLIProfile 
</verb></tscreen>
El paso siguiente es configurar Netscape para que habilite los
perfiles móviles basados en su servidor LDAP. Sólo tiene que seguir la
secuencia:
<p>
- Vaya al menú Edit -&gt; Preferences -&gt; Roaming User 
<p>
Ahora tiene que activar el perfil móvil (<em/Roaming Access/) para
este perfil, haciendo click sobre la casilla de verificación
correspondiente a esta opción. 
<p>
- Rellene la caja del nombre de usuario (<em/username/) con el
contenido apropiado, por ejemplo john 
<p>
Despliegue la flecha de la opción de Roaming User en la parte
izquierda de la ventana de preferencias, para poder ver las opciones
detalladas del acceso itinerante (perfiles móviles).
<p>
- Haga click sobre Server Information, habilite la opción LDAP Server
y rellene las cajas de diálogo con la siguiente información:
<p>
Address: ldap://myHost/nsLIProfileName=$USERID,ou=Roaming,o=myOrg,c=NL 
<p>
User DN: cn=$USERID,ou=People,o=myOrg,c=NL 
<p>
<bf/IMPORTANTE:/ Netscape sustituye automáticamente la variable
$USERID por el nombre del perfil que haya seleccionado al arrancar el
navegador. De manera que si ha elegido el perfil <bf/sanchez/, sustituirá 
$USERID por sanchez, y si ha seleccionado el prefil <bf/gonzalez/,
sustituirá $USERID por gonzalez. Si no está familiarizado con los
perfiles, ejecute la aplicación <em/Profile Manager/ que se incluye en
el paquete del Netscape Communicator (<bf/N. del T.:/ a partir de la
versión 6.0, Netscape ha dejado otra vez de llamarse Communicator). El
<em/Profile Manager/ es una aplicación diseñada para satisfacer a
múltiples usuarios de un navegador en una misma máquina, de manera que
cada uno de ellos pueda tener sus propia configuración en el
navegador. 

<p>
El último paso consiste en reiniciar el servidor; examine la <ref
id="6.3" name="sección 6.3"> para ver la manera de hacerlo con
seguridad, y la <ref id="4" name="section 4"> para ver cómo
reiniciarlo. 

<sect1>Libreta de direcciones de Netscape (Address Book)
<p>
Una vez que tenga su servidor LDAP configurado y en marcha, puede
acceder a él a través de clientes muy diferentes (por ejemplo la
utilidad de línea de órdenes <em/ldapsearch/). Un cliente muy
interesante es la Libreta de direcciones de Netscape (Address
Book). Está disponible a partir de la versión 4.x de Netscape pero,
para interactuar de manera estable con su servidor LDAP, tendrá que
usar la versión 4.5 o superiores (<bf/N. del T.:/ ya está disponible el
Netscape 6.0). 
<p>
Sólo tiene que seguir la secuencia:
<p>
Abra Netscape Navigator -&gt; Vaya al ménu Communicator -&gt; Address Book
<p>
La libreta de direcciones (Address Book) de Netscape arrancará con
algunos directorios LDAP predeterminados. Ha de añadir también su
propio directorio LDAP, evidentemente.
<p>
Vaya al menú File -&gt; New Directory 
<p>
Complete los cuadros de diálogo con la información de su servidor, por
ejemplo: 
<p>
- Description : TUDelft 

- LDAP Server : dutedin.et.tudelft.nl 

- Server Root : o=TUDelft, c=NL 
<p>
El puerto por defecto para LDAP es 389; no debe cambiarlo, a menos que
cambiara esta opción al compilar su servidor.
<p>
Realice ahora consultas sencillas a su servidor, unsando el cuadro de
diálogo Show Names Containing, o consultas avanzadas, usando el botón
Search for.

<sect1>Matar al servidor LDAP <label id="6.3">
<p>
Para matar con seguridad al servidor <em/slapd/, debe utilizar una
línea de órdenes como la siguiente:
<p>
<tscreen>
<verb>
kill -TERM `cat $(ETCDIR)/slapd.pid` 
</verb>
</tscreen>
<p>
(<bf/N. del T.:/ en RedHat y distribuciones basadas en rh, como
Mandrake y Esware, valdrá simplemente con <tt>/etc/rc.d/init.d/opeldap
stop</tt>, mientras que en Debian y distribuciones basadas en Debian
(Corel, Storm, Citius) bastará con un <tt>/etc/init.d/openldap
stop</tt>. En otras distribuciones el procedimiento es similar,
buscando tal vez <tt/slapd/ en vez de <tt/openldap/).  

Matar <it/slapd/ de una manera más drástica puede provocar corrupción
de las bases de datos, pues puede ser preciso vaciar ciertos tampones
de almacenamiento intermedio antes de salir del servidor. Nótese que
<em/slapd/ escribe su PID en un fichero llamado <tt/slapd.pid/ en el
directorio que haya configurado en el fichero <tt/slapd.conf/, por
ejemplo en <tt>/var/pid/slapd.pid</tt> (<bf/N. del T.:/ es éste
precisamente el caso de Debian). 

Puede cambiar la localización de este fichero PID cambiando la
variable SLAPD_PIDFILE en <tt>include/ldapconfig.h.edit</tt>.

<em/slapd/ escribirá también sus argumentos en un fichero llamado
<tt/slapd.args/ en el directorio que haya configurado en el fichero
<tt/slapd.conf/ por ejemplo en <tt>/usr/local/var/slapd.args</tt>

Podrá cambiar la ubicación del fichero <tt>slapd.args</tt> si cambia
la variable SLAPD_ARGSFILE en <tt>include/ldapconfig.h.edit</tt>.

<sect1>Ficheros de registro (logs)
<p>
<em/slapd/ utiliza el recurso <tt/syslog(8)/ para generar registros de
sus actividad. El usuario predeterminado del recurso <tt/the
syslog(8)/ es LOCAL4, pero se permiten valores que van de LOCAL0,
LOCAL1, hasta LOCAL7.
<p>
Para habilitar la característica de generación de archivos de registro
(logs), debe editar el fichero <tt/syslog.conf/, situado generalmente
en el directorio <tt>/etc</tt>.
<p>
Cree una línea como la siguiente:
<p>
local4.*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/adm/ldalog 
<p>
Esto hará que se utilice el usuario predeterminado LOCAL4 para el
recurso <em/syslog/. Si no está familiarizado con la sintaxis de esta
línea, examine las páginas de manual de <tt/syslog/,
<tt/syslog.conf(5)/ y <tt/syslogd(8)/ para el recurso de syslog.  Si
desea cambiar el usuario predeterminado o especificar el nivel de
detalle de los registros generados (logs), tiene disponibles las
siguientes opciones en el momento de arrancar <em/slapd/:
<p>
-s nivel-de-syslog
    Esta opción le dice a <em/slapd/ en qué nivel de detalle deben
registrarse las informaciones sobre depuración en el recurso
<tt/syslog(8)/. El nivel especifica la gravedad del mensaje, y
representa una palabra clave tomada de la siguiente lista ordenada (de
mayor a menor gravedad):  emerg, alert, crit, err, warning, notice,
info, y debug.  Ejemplo:
<tt/slapd -f myslapd.conf -s debug/
<p>
-l usuario-local-de-syslog
    Selecciona el usuario local del recurso syslog(8). Los valores
pueden ir desde LOCAL0, LOCAL1, y así hasta LOCAL7. El valor
predeterminado es LOCAL4. No obstante, esta opción se permite
únicamente en sistemas que soportan usuarios locales en el recurso
syslog(8). 
<p>
Eche un vistazo en este momento a los registros generados (logs);
pueden ayudarle a resolver problemas con consultas, actualizaciones,
enganches (bindings), etc.

<sect>Referencias
<sect1>Vínculos (URLs)
<p>
Se ofrecen aquí URLs que contienen información muy útil acerca de
LDAP. Se ha redactado este <em/Cómo/ a partir de estas URLs, así que
si necesita información mas específica tras la lectura de este
documento, es probable que la encuentre aquí:
<itemize>
<item>
Página del LDAP de la Universidad de Michigan:
<p>
<url url="http://www.umich.edu/&tilde;dirsvcs/ldap/index.html" name="http://www.umich.edu/&tilde;dirsvcs/ldap/index.html">
<item>
Página de documentación del LDAP de la Universidad de Michigan:
<p>
<url url="http://www.umich.edu/&tilde;dirsvcs/ldap/doc/" name="http://www.umich.edu/&tilde;dirsvcs/ldap/doc/">
<item>
Implementar manualmente el acceso itinerante (perfiles móviles)
<p>
<url
url="http://help.netscape.com/products/client/communicator/manual_roaming2.html"
name="http://help.netscape.com/products/client/communicator/manual_roaming2.html">

<item>
Personalizar las opciones de LDAP para Communicator 4.5: 
<p>
<url url="http://developer.netscape.com/docs/manuals/communicator/ldap45.htm" name="http://developer.netscape.com/docs/manuals/communicator/ldap45.htm">

<item>
Linux Directory Service (Servicio de Directorio en Linux)
<p>
<url url="http://www.rage.net/ldap/" name="http://www.rage.net/ldap/">
</itemize>

<sect1>Libros

<p>
He aquí los libros más populares acerca de LDAP:
<itemize>
<item><em/LDAP: Programming Directory-Enabled Applications with Lightweight
Directory Access Protocol/, por Howes and Smith
<item><em/Understanding and Deploying LDAP Directory Servers/, por Howes, Smith,
and Good
</itemize>
<sect1>RFCs
<p>
He aquí los RFC que se refieren a la cuestión de LDAP. 
(<bf/N. del T.:/ si desea estar actualizado en los RFC de LDAP, teclee
en Debian (v 2.2. y siguientes) : <tt/apt-get install ldap-rfc/) 
<itemize>
<item>RFC 1558: A String Representation of LDAP Search Filters
(«Representación en cadenas de los filtros de búsqueda de LDAP»)
<item>RFC 1777: Lightweight Directory Access Protocol («Protocolo
ligero de acceso a directorios»)
<item>RFC 1778: The String Representation of Standard Attribute
Syntaxes («Representación en cadenas de las sintaxis estándar de los
atributos»)  
<item>RFC 1779: A String Representation of Distinguished Names
(«Representación en cadenas de los nombres distintivos»)
<item>RFC 1781: Using the OSI Directory to Achieve User Friendly
Naming («Utilización del directorio OSI para obtener denominaciones
amigables para el usuario»)
<item>RFC 1798: Connectionless LDAP («LDAP sin conexión»)
<item>RFC 1823: The LDAP Application Programming Interface («La
interfaz de programación de aplicaciones LDAP»)
<item>RFC 1959: An LDAP URL Format («Formato de URLs para LDAP»)
<item>RFC 1960: A String Representation of LDAP Search Filters («Representación en cadenas de los filtros de búsqueda de LDAP»)
<item>RFC 2251: Lightweight Directory Access Protocol (v3) («Protocolo
ligero de acceso a directorios, versión 3») 
<item>RFC 2307: LDAP as a Network Information Service («LDAP como
servicio de información en redes»)
</itemize>
</article>
<!--  LocalWords:  Jennifer Jensen ldif internnnos ldapsearch ldapdelete
 -->
