Preparación para el examen 301 del LPI, Tema 302: Instalación y desarrollo

Senior Level Linux Professional (LPIC-3)

En este tutorial, Sean Walberg lo ayuda a prepararse para tomar el examen de Linux Professional Institute® Senior Level Linux Professional (LPIC-3). En esta segunda serie de seis tutorials, Sean lo guía a través de la instalación y la configuración de un servidor de Lightweight Directory Access Protocol (LDAP), y por la escritura de algunos scripts de Perl para acceder a los datos. Hacia el final de este tutorial, usted tendrá conocimientos acerca de la instalación, la configuración y la programación del servidor LDAP.

Sean Walberg, Senior Network Engineer, P.Eng

Photo of Sean WalbergSean Walberg ha estado trabajando con Linux y UNIX desde 1994 en entornos de proveedores de servicios académicos, corporativos y de Internet. Ha escrito extensamente sobre la administración de los sistemas en los últimos años.



15-07-2011

Antes de comenzar

Conozca lo que estos tutorials pueden enseñarle y cómo usted puede obtener el máximo de ellos.

Información acerca de esta serie

El Linux Professional Institute (LPI) certifica a los administradores del sistema Linux en tres niveles: nivel junior (también denominado "nivel de certificación 1"), nivel avanzado (también denominado "nivel de certificación 2"), y nivel senior (también denominado "nivel de certificación 3"). Para obtener el nivel de certificación 1, usted debe pasar los exámenes 101 y 102. Para obtener el nivel de certificación 2, debe pasar los exámenes 201 y 202. Para obtener el nivel de certificación 3, debe tener un nivel avanzado y activo de certificación y haber pasado el examen 301 ("central"). También puede pasar los exámenes adicionales sobre especialidades en el nivel senior.

developerWorks ofrece tutorials que lo ayudan a prepararse para los cinco exámenes de certificación de los niveles junior, avanzado y senior. Cada examen cubre varios temas y cada tema tiene su correspondiente tutorial de auto estudio acerca de developerWorks. La Tabla 1 lista los seis temas y los correspondientes tutorials sobre developerWorks para el examen LPI 301.

Tabla 1. Examen 301 del LPI: Tutorials y temas
Tema del examen 301 del LPITutorial sobre developerWorksResumen del tutorial
Tema 301Preparación para el examen 301 del LPI:
Conceptos, arquitectura y diseño
Conozca más detalles sobre los conceptos y la arquitectura del LDAP, cómo diseñar e implementar un directorio de LDAP, e información acerca de los esquemas.
Tema 302Preparación para el examen 301 del LPI:
Instalación y desarrollo
(Este tutorial) Sepa cómo instalar, configurar y usar el software OpenLDAP. Vea los objetivos detallados.
Tema 303Preparación para el examen 301 de LPI:
Configuración
Próximamente.
Tema 304Preparación para el examen 301 de LPI:
Uso
Próximamente.
Tema 305Preparación para el examen 301 de LPI:
Integración y migración
Próximamente.
Tema 306Preparación para el examen 301 del LPI:
Planificación de la capacidad
Próximamente.

Para pasar el examen 301 (y obtener el nivel 3 de certificación), usted debería:

  • Poseer varios años de experiencia en la instalación y el mantenimiento de Linux en una cantidad de computadoras con varios propósitos
  • Poseer experiencia en la integración de diversas tecnologías y distintos sistemas operativos
  • Poseer experiencia profesional como, o estar capacitándose para ser, profesional de Linux a nivel empresarial (incluyendo la experiencia como parte de otro rol)
  • Conocer los niveles avanzado y empresarial de la administración de Linux incluyendo la instalación, la administración, la seguridad, la resolución de problemas y el mantenimiento.
  • Ser capaz de usar las herramientas de fuente abierta para medir la planificación de la capacidad y resolver los problemas en cuanto a los recursos
  • Poseer experiencia profesional en el uso de LDAP para la integración a los servicios de UNIX® y Microsoft® Windows®, incluyendo Samba, Pluggable Authentication Modules (PAM), e-mail y Active Directory
  • Poder planificar, construir, diseñar, crear e implementar un entorno completo utilizando Samba y LDAP, así como también medir la planificación de la capacidad y la seguridad de los servicios
  • Poder crear scripts en Bash o Perl o tener conocimientos de al menos un lenguaje de programación de sistemas (tal como C)

El Linux Professional Institute no avala ningún material de terceros o técnicas determinadas para la preparación del examen.

Información acerca de este tutorial

Bienvenido a "Instalación y desarrollo", el segundo de seis tutorials diseñados para prepararlo para el examen 301 de LPI. En este tutorial, usted aprende acerca de la instalación y la configuración del servidor LDAP, y la forma de usar Perl para acceder a su nuevo servidor LDAP.

Este tutorialestá organizado de acuerdo con los objetivos de LPI para este tema. En términos generales, esperamos más consultas sobre el examen con respecto a los objetivos de mayor valor.

Objetivos

La Tabla 2 muestra los objetivos detallados para este tutorial.

Tabla 2. Instalación y desarrollo: Objetivos del examen cubiertos en este tutorial
Objetivo del examen LPIValor del objetivoResumen del objetivo
302.1
Compilación e instalación de OpenLDAP
3Compile e instale OpenLDAP de la fuente y de los paquetes
302.2
Desarrollo para LDAP con Perl/C++
1Escriba scripts básicos en Perl que interactúen con un directorio de LDAP

Prerrequisitos

Para obtener lo máximo del presente tutorial, usted debería tener conocimientos avanzados de Linux y un sistema Linux en funcionamiento en el cual practicar los comandos cubiertos.

Si sus conocimientos fundamentales de Linux están un poco faltos de práctica, es probable que desee primero revisar los tutorials para los exámenes LPIC-1 y LPIC-2.

Las diferentes versiones de un programa pueden darle un formato diferente a la salida, entonces sus resultados pueden no aparecer exactamente como los listados y las figuras de este tutorial.

Requisitos de sistemas

A fin de seguir con los ejemplo en estos tutorials, usted necesitará una estación de trabajo Linux con el paquete de OpenLDAP y soporte a PAM. Muchas distribuciones modernas cumplen con estos requisitos.


Compilación e instalación de OpenLDAP

Esta sección cubre el material para el tema 302.1 del examen 301 del the Senior Level Linux Professional (LPIC-3). Este tema tiene un valor de 3.

En esta sección aprenda cómo:

  • Compilar y configurar OpenLDAP de la fuente
  • Comprender las bases de datos backend de OpenLDAP
  • Administrar los daemons de OpenLDAP
  • Resolver los errores durante la instalación

OpenLDAP es una aplicación de fuente abierta que implementa un servidor LDAP y las herramientas asociadas. Debido a que es una fuente abierta, usted puede descargar el código fuente gratuitamente. El proyecto de OpenLDAP no distribuye directamente los binarios, pero muchos distribuidores importantes los empaquetan. En este tutorial, usted aprende de qué manera instalar OpenLDAP tanto de la fuente como de los paquetes.

Compilación de la fuente

La primera orden de la empresa es descargar la versión más reciente de OpenLDAP del sitio del proyecto (vea la sección Resources a fin de obtener un enlace para la descarga). El proyecto generalmente tiene dos versiones activas disponibles: Una es una versión estable y la otra es una versión de prueba. Este tutorial fue escrito utilizando las versiones estables 2.3.30 y 2.3.38. Si continúa, algunos de los nombres de los directorios pueden ser diferentes dependiendo de qué versión tenga usted.

Para extraer el código fuente del "tarball" descargado ingrese tar -xzf openldap-stable-20070831.tgz. Esto descomprime y descompacta el archivo descargado en un directorio. Cambie al nuevo directorio con cd openldap-2.3.38 (sustituyendo su versión de OpenLDAP, según sea apropiado).

En este punto, usted se encuentra en el directorio fuente. Ahora debe configurar el entorno de construcción de su sistema y luego crear el software. OpenLDAP usa un script denominado configure que realiza estas acciones. Ingrese ./configure --help para ver todas las opciones disponibles. Algunas definen dónde están instalados los archivos (tal como --prefix), otros definen los dispositivos de OpenLDAP que usted desea crear. El Listado 1 enumera los dispositivos y sus valores por omisión.

Listado 1. Opciones para la configuración relacionadas con los dispositivos de OpenLDAP
SLAPD (Standalone LDAP Daemon) Options:
  --enable-slapd          enable building slapd [yes]
    --enable-aci          enable per-object ACIs (experimental) [no]
    --enable-cleartext    enable cleartext passwords [yes]
    --enable-crypt        enable crypt(3) passwords [no]
    --enable-lmpasswd     enable LAN Manager passwords [no]
    --enable-spasswd      enable (Cyrus) SASL password verification [no]
    --enable-modules      enable dynamic module support [no]
    --enable-rewrite      enable DN rewriting in back-ldap and rwm overlay [auto]
    --enable-rlookups     enable reverse lookups of client hostnames [no]
    --enable-slapi        enable SLAPI support (experimental) [no]
    --enable-slp          enable SLPv2 support [no]
    --enable-wrappers     enable tcp wrapper support [no]

SLAPD Backend Options:
    --enable-backends     enable all available backends no|yes|mod
    --enable-bdb          enable Berkeley DB backend no|yes|mod [yes]
    --enable-dnssrv       enable dnssrv backend no|yes|mod [no]
    --enable-hdb          enable Hierarchical DB backend no|yes|mod [yes]
    --enable-ldap         enable ldap backend no|yes|mod [no]
    --enable-ldbm         enable ldbm backend no|yes|mod [no]
      --enable-ldbm-api   use LDBM API auto|berkeley|bcompat|mdbm|gdbm [auto]
      --enable-ldbm-type  use LDBM type auto|btree|hash [auto]
    --enable-meta         enable metadirectory backend no|yes|mod [no]
    --enable-monitor      enable monitor backend no|yes|mod [yes]
    --enable-null         enable null backend no|yes|mod [no]
    --enable-passwd       enable passwd backend no|yes|mod [no]
    --enable-perl         enable perl backend no|yes|mod [no]
    --enable-relay        enable relay backend no|yes|mod [yes]
    --enable-shell        enable shell backend no|yes|mod [no]
    --enable-sql          enable sql backend no|yes|mod [no]

SLAPD Overlay Options:
    --enable-overlays     enable all available overlays no|yes|mod
    --enable-accesslog    In-Directory Access Logging overlay no|yes|mod [no]
    --enable-auditlog     Audit Logging overlay no|yes|mod [no]
    --enable-denyop       Deny Operation overlay no|yes|mod [no]
    --enable-dyngroup     Dynamic Group overlay no|yes|mod [no]
    --enable-dynlist      Dynamic List overlay no|yes|mod [no]
    --enable-lastmod      Last Modification overlay no|yes|mod [no]
    --enable-ppolicy      Password Policy overlay no|yes|mod [no]
    --enable-proxycache   Proxy Cache overlay no|yes|mod [no]
    --enable-refint       Referential Integrity overlay no|yes|mod [no]
    --enable-retcode      Return Code testing overlay no|yes|mod [no]
    --enable-rwm          Rewrite/Remap overlay no|yes|mod [no]
    --enable-syncprov     Syncrepl Provider overlay no|yes|mod [yes]
    --enable-translucent  Translucent Proxy overlay no|yes|mod [no]
    --enable-unique       Attribute Uniqueness overlay no|yes|mod [no]
    --enable-valsort      Value Sorting overlay no|yes|mod [no]

SLURPD (Replication Daemon) Options:
  --enable-slurpd         enable building slurpd [auto]

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-subdir=DIR       change default subdirectory used for installs
  --with-cyrus-sasl       with Cyrus SASL support [auto]
  --with-fetch            with fetch(3) URL support [auto]
  --with-threads          with threads [auto]
  --with-tls              with TLS/SSL support [auto]
  --with-yielding-select  with implicitly yielding select [auto]
  --with-odbc             with specific ODBC support iodbc|unixodbc|auto [auto]

  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
  --with-pic              try to use only PIC/non-PIC objects [default=use
                          both]
  --with-tags[=TAGS]
                          include additional configurations [automatic]

En el Listado 1, usted puede ver que muchos dispositivos están inhabilitados por omisión, tales como los metadirectorios y los módulos. Además, muchas opciones están marcadas como "auto," lo que activa los dispositivos si las bibliotecas adecuadas están presentes en su sistema. En lugar de basarse en esta conducta automática, es mejor hacer una lista de los dispositivos requeridos y habilitarlos. Si le falta alguna biblioteca, obtendrá un error a este efecto en el momento de la compilación, en lugar de obtenerlo posteriormente.

Algunas opciones de configuración pueden ser pasadas ya sea como no, yes o mod. noinhabilita la opción, yes hace que la opción esté estáticamente vinculada con el binario final, y mod crea la opción como una biblioteca compartida por separado. Las bibliotecas compartidas están cargadas en el servidor en el momento de la ejecución (vea "Server parameters (global)" más abajo). Por omisión, los módulos están estáticamente vinculados, es decir, forman parte del binario y son inseparables. Si desea utilizar los módulos dinámicos, también necesitará la opción --enable-modules. Los beneficios de los módulos dinámicos consisten en que usted puede probar varias opciones sin aumentar su binario, y usted puede empaquetar los módulos por separado.

El Listado 2 muestra una línea de configuración, basada en la configuración que se envía con Fedora 7, y que habilita muchos dispositivos útiles. En su mayor parte, las opciones elegidas habilitarán los dispositivos que serán requeridos en posteriores tutorials, tales como --enable-slurpd y --enable-multimaster para la duplicación, y --enable-meta para los meta-directorios. Otras opciones habilitan varios backends, tales como ldab, bdb, null y monitor.

Listado 2. Una configuración de construcción modelo
./configure --enable-plugins --enable-modules --enable-slapd --enable-slurpd \
   --enable-multimaster --enable-bdb --enable-hdb --enable-ldap --enable-ldbm \
   --enable-ldbm-api=berkeley --enable-meta --enable-monitor --enable-null \
   --enable-shell --enable-sql=mod --disable-perl \
   --with-kerberos=k5only --enable-overlays=mod --prefix=/tmp/openldap

El Listado 2 habilita los plug-ins y los múltiples backends, incluyendo los backends basados en el Structured Query Language (SQL) y los archivos de Berkeley Database. Los backends son la forma de OpenLDAP de almacenar y recuperar los datos, y son examinados más detalladamente bajo "Backends y bases de datos," y en tutorials posteriores.

El Listado 2 también crea el daemon independiente slapd y el daemon de duplicación slurpd. Las capas que permiten una adaptación más sencilla de los datos de backend son también habilitados para la prueba. Debido a que ésta es una configuración de prueba, el prefijo de la instalación ha sido cambiado por /tmp/openldap, de manera que los binarios resultantes finalicen en /tmp/openldap/libexec.

Cuando usted ejecuta el script configure, éste verifica las bibliotecas necesarias y luego genera el entorno de construcción. Si configurese completa con éxito, compile el OpenLDAP con make depend; make.

Luego de haber compilado el código, usted puede instalar el OpenLDAP con make install. Éste copia todos los binarios, las manpages y las bibliotecas en su lugar en /tmp/openldap.

Instalación de los paquetes

Si se encuentra intimidado por la sección anterior sobre la compilación de la fuente, no está solo. La compilación de la fuente consume tiempo y puede empeorar si no están disponibles las bibliotecas adecuadas de desarrollo. Si su experiencia de desarrollo C es limitada o inexistente, entonces probablemente tenga problemas al interpretar cualquier error de construcción. Afortunadamente, muchas distribuciones empaquetan el OpenLDAP como un conjunto de binarios con una configuración predefinida. Generalmente, estos binarios tienen todos los dispositivos que necesitará.

Distribuciones basadas en RPM

Fedora y CentOS usan la herramienta yum para instalar los paquetes de RedHat (RPMs) de los almacenes. A fin de descubrir qué paquetes están disponibles use el comando yum list, pasando una expresión normal opcional que filtre la lista de paquetes devueltos. El Listado 3 muestra una búsqueda de todos los paquetes que contienen el término openldap.

Listado 3. Determinar qué paquetes están disponibles a través de yum
# yum list \*openldap\*
Loading "installonlyn" plugin
Setting up repositories
Reading repository metadata in from local files
Installed Packages
openldap.i386                            2.3.30-2.fc6           installed       
openldap-clients.i386                    2.3.30-2.fc6           installed       
openldap-devel.i386                      2.3.30-2.fc6           installed       
openldap-servers.i386                    2.3.30-2.fc6           installed       
openldap-servers-sql.i386                2.3.30-2.fc6           installed       
Available Packages
compat-openldap.i386                     2.3.30_2.229-2.fc6    updates

En una aplicación grande tal como OpenLDAP, las herramientas del cliente y del servidor están, con frecuencia, divididas en dos paquetes por separado. Además, usted puede buscar algunas bibliotecas de compatibilidad (para asegurar que todavía funcionan las aplicaciones vinculadas con las versiones mucho más antiguas del software). Para instalar un paquete use yum install con el nombre del paquete, tal como yum install openldap-clients openldap-servers, éste descarga e instala tanto el paquete del cliente como el del servidor, junto con cualquier dependencia necesaria.

Para Red Hat Enterprise Linux, el comando para buscar los paquetes deopenldap es up2date --showall | grep openldap. Para instalar un paquete provea los nombres del mismo como argumentos de up2date, tal como up2date openldap-clients openldap-servers.

Para asegurarse de que el servidor de OpenLDAP comience el arranque use chkconfig ldap on.

Distribuciones basadas en Debian

Las distribuciones basadas en Debian, tal como Ubuntu, usan las herramientas Advanced Packaging (APT) para instalar los paquetes. Primero, para buscar los paquetes de OpenLDAP use apt-cache search openldap, como se muestra en el Listado 4.

Listado 4. Listado de los paquetes disponibles de OpenLDAP en Ubuntu Linux
notroot@ubuntu:~$ apt-cache search openldap
libldap2 - OpenLDAP libraries
libldap2-dev - OpenLDAP development libraries
python-ldap - A LDAP interface module for Python. [dummy package]
python-ldap-doc - Documentation for the Python LDAP interface module
python2.4-ldap - A LDAP interface module for Python 2.4
ldap-utils - OpenLDAP utilities
libldap-2.2-7 - OpenLDAP libraries
slapd - OpenLDAP server (slapd

El Listado 4 muestra varios paquetes disponibles. El paquete slapd provee el servidor y cualquier dependencia será resuelta en el momento de la instalación. Ejecute sudo apt-get install slapd para instalar el servidor. Usted también puede incluir el paquete ldap-utils, el que contiene los clientes de la línea de comandos.

Configuración del software

Una vez que haya instalado el OpenLDAP deberá configurarlo. A los fines de la prueba, necesita especificar sólo unas pocas cosas, pero para el mundo real (y para el examen 3 de LPIC) usted deberá estar muy familiarizado con las distintas opciones.

Dos archivos de configuración gobiernan el comportamiento de OpenLDAP; ambos se encuentran en /etc/openldap/ por omisión. El primero es ldap.conf, el cual controla la conducta global de los cientes de LDAP. El archivo de configuración para todos los servidores de LDAP se llama slapd.conf. A pesar del nombre, slapd.conf también tiene la configuración para el daemon de duplicación slurpd. El centro de este artículo se encuentra en slapd.conf, específicamente correspondiente al daemon slapd.

slapd.conf tiene un formato sencillo: una palabra clave única seguida de uno o más argumentos, sujeta a las siguientes condiciones:

  • La palabra clave deberá comenzar en la columna 0— es decir, no deben existir espacios adelante de ella.
  • Si un argumento tiene espacios deberá contener dobles comillas ("").
  • Si una línea comienza con un espacio se la considera una continuación de la línea anterior.
  • Las palabras claves no distinguen entre mayúsculas y minúsculas, pero es posible que los argumentos dependan de qué palabra clave sea utilizada.

Como sucede con muchas herramientas de UNIX®, el símbolo numeral (#) denota un comentario. Todo lo que se encuentre después de él es ignorado.

slapd.conf está dividido en dos secciones: las opciones globales y las opciones backend de la base de datos. Aunque esta clasificación no es obligatoria, usted debe ser cuidadoso al colocar sus directivas porque algunas de ellas alteran el contexto en el que las siguientes directivas son procesadas. Por ejemplo, si no se ha encontrado ninguna de las palabras claves, backend o database una opción es considerada global. Una vez leída la directiva database, el resto de las opciones se aplica a esa base de datos. Esto continúa hasta que otra directiva database sea leída, en ese punto los próximos comandos se aplican a la nueva base de datos.

Algunas de las opciones globales serán cubiertas en posteriores tutorials en esta serie 301, tales como las que tratan los controles de acceso y la duplicación. A continuación se encuentra una descripción de las directivas de configuración comúnmente utilizadas.

Parámetros de servidor (global)

Varios parámetros limitan el trabajo que el proceso slapd puede hacer, el que evita la falta de recursos.conn_max_pending acepta un entero que dicte cuántas solicitudes anónimas pueden estar pendientes en un momento dado. Usted aprenderá acerca del enlace con el servidor de LDAP en un tutorial posterior en esta serie 301; en pocas palabras, usted puede realizar solicitudes del servidor conectándose como un usuario (una sesión autenticada) o sin ninguna credencial (sesión anónima). Las solicitudes más allá del límite de conn_max_pending son abandonadas por el servidor. De manera similar, conn_max_pending_auth es lo mismo que conn_max_pending pero se refiere a las sesiones autenticadas.

El parámetro idletimeout (especificado en segundos) le indica a slapd cómo los clientes con mucho tiempo de ocio pueden ser mantenidos antes de ser desconectados. Si este número es 0, no ocurre ninguna desconexión.

El parámetro sizelimit limita la cantidad de resultados de búsqueda que puede volver de una única consulta y timelimit limita el tiempo que el servidor le dedica a la búsqueda. Estos dos parámetros pueden tomar tanto un entero, la palabra clave unlimited, o "hard" y "soft limits" más complejos. Esto le permitiría a usted fijar un tiempo de espera por omisión (soft) o un tamaño del "result-set", pero si un cliente solicita una cantidad mayor de filas o un tiempo de espera mayor, puede acomodarse hasta el "hard limit". Por ejemplo, sizelimit sizesoft=400 size.hard=1000 especifica que por omisión son devueltas 400 filas. Los clientes pueden solicitar que este límite aumente hasta llegar a 1.000. Este formato puede ser aplicado a los grupos de usuarios de manera que algunas personas o aplicaciones puedan realizar grandes búsquedas, y otras puedan realizar sólo pequeñas búsquedas

Cuando un cliente realiza una búsqueda en un árbol, generalmente especifica un nodo (denominado la base de la búsqueda, obase) desde el cual la búsqueda debería iniciar—los Distinguished Names (DNs) de todos los resultados tienen la base de la búsqueda en ellos. Esto permite una búsqueda más veloz (porque menos nodos necesitan ser buscados) y la implementación más sencilla de un cliente (porque la búsqueda de sólo parte de un árbol es un filtro simple pero efectivo). Si el cliente no especifica una base, se utiliza el valor de defaultsearchbase. Éste es un buen parámetro de fijar para evitar sorpresas con los clientes mal configurados. Dependiendo del diseño de su árbol de LDAP, es probable que usted desee usar ya sea su contenedor de usuarios o la raíz del árbol. (Los árboles y los distinguished names son tratados en el anterior tutorial.)

Tres comandos gobiernan varios dispositivos soportados por su servidor, tales como el soporte legacy y los requisitos de seguridad por parte de los clientes. Estos comandos son allow, disallow y require. Cada comando toma una serie de palabras claves de espacios en blanco que habilitan, inhabilitan o requieren un dispositivo. Las palabras claves se muestran en la Tabla 3.

Tabla 3. Palabras claves usadas con allow, disallow y require
Comando(s)Palabra claveDescripciónValor por omisión
allowbind_v2Si se define les permite conectarse a los clientes de LDAPv2 legacy. La documentación de OpenLDAP indica repetidas veces que OpenLDAP no le da soporte realmente a LDAPv2, entonces algunas solicitudes pueden dar como resultado una conducta inesperada.Disallowed
allowbind_anon_credLe permite a un cliente vincularse con una contraseña pero no con un DN. Si se permite esta opción, entonces el cliente puede ser un enlace anónimo.Inhabilitado
allowbind_anon_dnLe permite a un cliente vincularse con un DN pero no con la contraseña, generalmente porque dicho cliente está mal configurado. Si se permite esta opción, entonces el cliente es habilitado como un enlace anónimo.Disallowed
allow, disallowupdate_anonPermite un enlace anónimo, lo que ocurre cuando un cliente se conecta con el servidor de LDAP sin DN o contraseña.Habilitado
disallowbind_simplePermite una autenticación simple (nombres de usuarios y contraseñas no cifrados) en oposición a un método más fuerte como Simple Authentication and Security Layer (SASL).Habilitado
requirebindRequiere que el cliente se conecte con el directorio con la operación bind antes de realizar cualquier otra operación.No se requiere
requireLDAPv3Determina si se requiere LDAPv3. Observe que esto puede crear conflicto con allow bind_v2.No se requiere
requireauthcRequiere autenticación, en oposición a un enlace anónimo.No se requiere
requireSASLRequiere que un método SASL sea utilizado para conectarse con el servidorNo se requiere
requirestrongRequiere que un método fuerte de autenticación sea usado. Éste puede ser SASL o la autenticación simple por encima de un método protegido.No se requiere
requirenoneEsta opción elimina todos los requisitos, generalmente si usted remite los requisitos de una cierta base de datos utilizando este comando en la sección de las bases de datos de slapd.conf. Si desea cambiar los requisitos de la base de datos (en oposición a sólo limpiar la lista), debe usar none antes de agregar sus nuevos requisitos, aun si han sido requeridos en la sección global.No se aplica

Aunque ciertos tipos de conexión pueden ser habilitados por algunos comandos de la Tabla 3, las conexiones aún están sujetas a los controles de acceso. Por ejemplo, se le puede otorgar acceso de lectura solamente a un enlace anónimo a una parte del árbol. La naturaleza de su aplicación y las capacidades de sus clientes dictan la forma en la que usted habilita o inhabilita varios métodos de autenticación.

Si usted desea mantener un nivel mayor de disponibilidad, entonces habilite gentlehup. Con este comando habilitado, slapd deja de escuchar la red cuando recibe una señal SIGHUP, pero no deja ninguna conexión abierta. Entonces se puede iniciar un nuevo ejemplo de slapd, generalmente con una configuración actualizada.

Para obtener conexiones más prolijas, ajuste el valor de loglevel. Este comando acepta un entero, múltiples enteros o una serie de palabras claves, lo que habilita la conexión para una función determinada. Consulte la manpage sobre slapd.conf para obtener la lista completa de palabras claves y de valores. Por ejemplo, el rastreo de la conexión tiene un valor de 8 y una palabra clave conns, y la sincronización tiene un valor de 4096 y una palabra clave sync. Para habilitar la conexión de estos dos ítems logging 5004, logging 8 4096 o logging conns sync obtendrá el m ismo resultado.

Si usted compiló el OpenLDAP de la fuente es probable que haya habilitado algunos módulos. En forma alternativa, es probable que haya descargado módulos extra de su administrador de paquetes, tal como el paquete de openldap-server-sql, el que incluye el módulo de backend de SQL. Las opciones modulepath y moduleload son utilizadas para cargar los módulos dinámicos en slapd. modulepath especifica el directorio (o la lista de directorios) que contiene las bibliotecas compartidas, y cada instancia de moduleload especificaun módulo para cargar. No es necesario especificar el número de la versión del módulo o la extensión, porque slapd busca una biblioteca compartida. Por ejemplo, para una biblioteca llamada back_sql-2.3.so.0.2.18 use moduleload back_sql. De manera alternativa, se le puede dar la ruta completa a moduleload (sin la versión y la extensión) a la biblioteca, tal como moduleload /usr/share/openldap/back_sql.

Algunos scripts esperan la id de un proceso que será mantenido en determinado archivo. pidfile indica slapd dóndese debe escribir su id de proceso.

Parámetros de esquema

Una cantidad de comandos le permiten agregar los ítems de esquema a su árbol, ya sea incluyendo un archivo de esquema o definiendo el objeto en slapd.conf. Recuerde del anterior tutorial que el esquema provee los atributos y las clases de objeto que pueden ser utilizados por su árbol de LDAP.

A fin de agregarle un nuevo archivo de esquema a su servidor use el comando include seguido de la ruta completa al archivo de esquema (generalmente encontrado en /etc/openldap/schema). Si un esquema hace referencia a otro (tal como inetOrgPerson heredado de organizationalPerson), usted necesita incluir todos los archivos necesarios en el orden correcto, con los objetos base en primer lugar. El OpenLDAP analiza sintácticamente cada archivo de esquema a medida que es incluido, entonces el orden de inclusión es importante.

Puede agregar nuevos ítems de esque,a directamente a través de slapd.conf con los comandos attributetype y objectclass para los atributos y las clases de objeto, respectivamente. Esto es lo mismo que colocar la información en un archivo de esquema incluyéndola con el comando include.De manera similar, usted puede definir los object identifiers (OIDs) con objectidentifier.

Backends y bases de datos

Los backends y las bases de datos son dos conceptos separados pero estrechamente relacionados. Una base de datos representa parte de un árbol, tal como dc=ertw,dc=com. Un backend describe el método por el cual slapdrecupera los datos. (El árbol dc=ertw,dc=com ha sido el principal ejemplo en esta serie).

En muchos casos, el backend es un archivo en el disco (en algún formato; más información sobre este tema más adelante), o puede ser un método para obtener los datos de otra fuente, de una base de datos de SQL, al DNS, y aun a través de un script. Cada base de datos es manejada por un backend, y el mismo tipo de backend puede ser utilizado por múltiples bases de datos.

Como se observó antes, slapd.conf comienza con las directivas globales. Entonces, la modalidad de backend comienza en la primera instancia de la directiva de backend. Todas las directivas es esta modalidad resguardada se aplican al backend determinado que está siendo configurado. Toda opción que fuera definida globalmente se aplica al backend, salvo que esté sobrescrita al nivel de backend. De manera similar, usted configura las bases de datos con la palabra clave database. Una base de datos está vinculada con un tipo de backend, el que hereda cualquier configuración al nivel global o de backend. Usted puede sobrescribir cualquier opción al nivel de la base de datos también.

OpenLDAP divide los backends en tres tipos:

  1. Los que almacenan datos:
    • bdb — Usa el motor de la base de datos Berkeley (tal como Sleepycat, ahora propiedad de Oracle)
    • hdb — Una mejora en back-ldb, el que agrega alguna mejoras en la indexación
  2. Los que autorizan los datos:
    • ldap — Autoriza otra servidor LDAP
    • meta — Autoriza varios servidores LDAP para diferentes parte del árbol
    • sql — Devuelve los datos de una base de datos de SQL
  3. Los que generan datos:
    • dnssrv — Devuelve los referidos de LDAP basándose en los datos de los registros DNS SRV
    • monitor — Devuelve las estadísticas del servidor LDAP
    • null — Un módulo de prueba; no devuelve nada
    • passwd — Devuelve los datos del archivo de contraseñas
    • perl — Devuelve los datos generados de un script en Perl
    • shell — Devuelve los datos generados de un script shell

Las opciones de configuración son específicas de cada backend, y se las puede encontrar en la manpage pertinente (tal como slapd-bdb para el backend bdb).

Las bases de datos representan el árbol y sus datos. El árbol dc=ertw,dc=com es un ejemplo de una base de datos. Todos los datos bajo este DN serían almacenados en una manera similar si formaran parte de la misma base de datos. También es posible tener ou=people,dc=ertw,dc=com en una base de datos, con cualquier otra cosa bajo dc=ertw,dc=com en otra. Finalmente, un servidor LDAP puede darle servicio a más de un árbol, tales como dc=ertw,dc=com y dc=lpi,dc=org. Cada base de datos tiene su propia forma de manejar la solicitud por su propio backend.

Especifique la base de datos seguida del tipo de base de datos para comenzar con la modalidad de configuración de bases de datos. La forma comúnmente utilizada es la base de datos Berkeley, de manera que el bdb de la base de datos crea una base de datos BDB. El siguiente comando que usted necesita es suffix, el que especifica la raíz del árbol al cual la base de datos le está brindando servicio.

rootdn y rootpw le permiten a usted especificar un usuario con todos los privilegios (un usuario raíz) para la base de datos. Este usuario no está sujeto aún a los controles de acceso. El rootdn debería estar dentro del sufijo especificado y puede o no tener una contraseña. Si se especifica un rootpw, éste es utilizado. De lo contrario, la conducta es buscar el registro del rootdn en el árbol y autenticar con respecto al atributo userPassword. Si no se especifica ningún usuario raíz, entonces todos los usuarios están sujetos a los controles de acceso configurados.

Si usted especifica lastmod on, OpenLDAP mantiene ocultos varios atributos (denominados atributos operativos), tal como el nombre de la persona que creó el registro y cuándo fue modificado. Algunos de estos atributos son requeridos para que la duplicación funcione, entonces es inteligente dejar habilitado el lastmod (que es el valor por omisión). Estos atributos operativos no les son mostrados a los clientes salvo que se lo solicite específicamente.

usted puede restringir más lo que puede ser hecho en la base de datos a través del comando restrict. Este comando toma los parámetros correspondientes a las operaciones de LDAP, tales como add, bind, compare, delete, renamey search. Para impedir que los usuarios eliminen los nodos del árbol, use restrict delete. Si el árbol contiene usuarios, pero por alguna razón usted no desea que puedan estar vinculados con el árbol, use restrict bind. Además ,read y write están disponibles para impedir cualquier acción de lectura y escritura en el árbol, respectivamente, en lugar de tener que detallar todas las operaciones importantes. De manera alternativa, usted puede utilizar el comando readonly para hacer que la base de datos sea de sólo lectura.

Las diferentes partes del mismo árbol pueden ser manejadas por distintas bases de datos. Si está adecuadamente configurado, OpenLDAP las reúne a todas. La base de datos que contenga la otra es llamada la base de datos superior; la base de datos que es contenida es la base de datos subordinada. Primero, defina la base de datos subordinada y agregue el comando subordinate en una de sus líneas. Luego, defina la base de datos superior. Con esta configuración, OpenLDAP puede tratar múltiples bases de datos como si fueran una, con algunos datos almacenados localmente y algunos traídos de otras fuentes (un caso especial es cuando todos los datos se encuentran en los servidores remotos de LDAP, en cuyo caso es donde se utiliza un metadirectorio). Observe que si define la base de datos superior antes de la subordinada obtendrá mensajes de error de que está intentando redefinir parte de su árbol. EL Listado 5 muestra el árbol dc=ertw,dc=com dividido en una base de datos superior y una subordinada.

Listado 5. Configuración para una base de datos subordinada y una superior
# Subordinate
database bdb
suffix "ou=people,dc=ertw, dc=com"
rootdn "cn=Sean Walberg,ou=people,dc=ertw,dc=com"
rootpw mysecret
directory       /var/db/openldap/ertw-com-people
subordinate

# Superior
database bdb
suffix "dc=ertw, dc=com"
rootdn "cn=Sean Walberg,dc=ertw,dc=com"
rootpw mysecret
directory       /var/db/openldap/ertw-com

También observe que están configurados dos rootdn s. Si desea definir una contraseña, rootdn deberá caer dentro de la base de datos. Para crear el árbol, la segunda cuenta raíz debe ser usada para definir la entrada dc=ertw,dc=com, y la primera, para definir la organizational unit (OU) de las personas, y cualquier objeto debajo de ella. Una vez que los usuarios han sido agregados, usted puede autenticar como un usuario diferente a fin de obtener acceso a todo el árbol.

Si está usando el backend de bdb, también necesita utilizar el comando directory para especificar dónde están guardados los archivos de la base de datos. Cada instancia de la base de datos necesita un directorio por separado.

La configuración de una nueva base de datos es bastante simple, debido a que sólo existen unos pocos comandos de los cuales ocuparse. Gran parte de la complejidad aparece cuando usted intenta ajustar el backend, el que será tema del siguiente tutorial en esta serie 301.

Capas

Las capas son una extensión de la base de datos. Si desea agregar un dispositivo a la base de datos, con frecuencia puede hacerlo como una capa en lugar de dividir el código de la base de datos. Por ejemplo, si desea que todos los escritos se conecten con un archivo puede adjuntar la capa auditlog con la base de datos pertinente.

Las capas operan como una pila. Luego de configurar la base de datos especifique una o más bases de datos. Luego defina cada capa con el comando overlay seguidos del nombre de la capa. Cada capa tiene sus propios parámetros de configuración.

Si ha configurado múltiples capas son ejecutadas en el orden inverso en el que las definió. Se accede a la base de datos sólo después de haber ejecutado todas las capas. Luego de que la base de datos devuelve los datos, las capas son ejecutadas nuevamente en el mismo orden antes de que slapd le devuelva los datos al cliente.

En cada paso, una capa puede realizar una acción tal como la conexión, puede modificar la solicitud o la respuesta, o puede detener el procesamiento.


Desarrollo de LDAP con Perl/C++

Esta sección cubre el material para el tema 302.2 para el examen 301 de Senior Level Linux Professional (LPIC-3). Este tema tiene un valor de 1.

En esta sección aprenda cómo:

  • Use el módulo Net::LDAP de Perl
  • Escriba scripts en Perl para vincular, buscar y modificar los directorios
  • Desarrollar en C/C++

Aunque OpenLDAP incluye los clientes de la línea de comandos, con frecuencia es útil para usar la información de LDAP en sus propios scripts. Perl es un lenguaje popular para hacer scripts. Perl tiene un módulo llamado Net::LDAP que es usado para conectarse y utilizar un servidor de LDAP.

Comenzar

Net::LDAP no se envía con Perl, pero su distribución puede incluirlo como un paquete. Vea "Installing from packages" para obtener más información sobre la búsqueda y la instalación de los paquetes.

Si su distribución no tiene el paquete de Net::LDAP, entonces usted puede descargarlo de Comprehensive Perl Archive Network (CPAN). Como raíz, ejecute perl -MCPAN -e "install Net::LDAP", para descargar e instalar Net::LDAP y cualquier dependencia.

Uso de Net::LDAP

El uso de Net::LDAP es bastante simple:

  1. Cree un nuevo objeto de Net::LDAP.
  2. Conéctese con el servidor deseado.
  3. Realice sus operaciones de LDAP.

Crear un nuevo objeto

En una modalidad típica de Perl usted debe crear una instancia del módulo Net::LDAP a través del método new. Todas las siguientes operaciones se realizarán en esta instancia. new requiere, como mínimo, el nombre del servidor con el cual usted desea conectarse. Por ejemplo:

my $ldap = Net::LDAP->new('localhost') o die "$@";

Aquí, un nuevo objeto de Net::LDAP es creado con el método new y se pasa la cadena localhost. El resultado es asignado a la variable $ldap. Si la función fracasa, el programa sale e imprime un mensaje de errores una variable interna de Perl que contiene el estado de la última operación.

Usted puede proceder realizando las operaciones de LDAP con el nuevo objeto de Net::LDAP. Cada función devuelve un objeto de Net::LDAP::Message que contiene el estado de la operación, cualquier mensaje de error y cualquier dato devuelto del servidor.

Vincularse con el árbol

La primera operación usted debería realizar es registrarse o vincularse con el árbol. El Listado 6 muestra una operación de enlace y la verificación de errores asociada.

Listado 6. Código de Perl para vincularse con el árbol
my $message = $ldap->bind(
	"cn=Sean Walberg,ou=people,dc=ertw,dc=com",
	password=>"test" );

if ($message->code() != 0) {
        die $message->error();
}

El Listado 6 comienza por llamar al método bind del objeto previamente creado. El primer parámetro de la función es el DN con el que se está conectando. Si no especifica un DN, usted se conecta anónimamente. Otros parámetros se encuentran en el formato de key=>value, el que usará con más frecuencia es la contraseña.

Cada método Net::LDAP devuelve un objeto de Net::LDAP::Message, el que tiene los resultados de la función. El código de error es recuperado a través del método code. Un código 0 significa éxito, entonces el código en el Listado 6 sale del programa con el mensaje de error si el resultado no fuera 0. Observe que el error es recuperado de $message->error en lugar de $@, como en el ejemplo anterior. Esto se debe a que el error no es un error de Perl, es interno a Net::LDAP.

Una vez que la conexión se realizó con éxito, usted puede hacer cualquier cosa que desee, sujeto controles de acceso del servidor. Para desconectarse, invoque el método unbind.

Búsqueda del árbol

La búsqueda es llevada a cabo a través del método search. Como con el método bind, usted debe pasar algunos parámetros y verificar el resultado de su consulta. Sin embargo, el objeto devuelto ahora contiene sus datos, entonces debe ser analizado sintácticamente. Con la operación search el resultado es un objeto de Net::LDAP::Search, el que hereda todos los métodos de Net::LDAP::Message (tales como code y error) , y agrega métodos para ayudarlo a analizar sintácticamente los datos. El Listado 7 muestra una búsqueda del árbol.

Listado 7. Búsqueda del árbol con search
$message = $ldap->search(base => "dc=ertw,dc=com", filter=> "(objectClass=*)");
if ($message->code() != 0) {
        print $message->error();
} else {
        foreach my $entry ($message->entries()) {
                print $entry->dn() . ": ";
                print join ", ", $entry->get_value("objectClass");
                print "\n";
        }
}

El Listado 7 comienza por llamar al método search pasando dos parámetros: la base y un filtro. La base le indica al servidor dónde comenzar la búsqueda en el árbol. Una opción complementaria, scope le indica al servidor en qué medida realizar la búsqueda:

  • base— Sólo el objeto base
  • one— Sólo los "hijos" de este objeto base (y no el objeto base ensí mismo)
  • sub— El objeto base y todos sus "hijos" (el valor por omisión)

El filtro es una cadena que describe los objetos en los que usted se interesa. Puede buscar los atributos y realizar consultas complejas AND/OR. objectClass=* devuelve cualquier objeto.

El resultado de la búsqueda es verificado y un error es impreso si ocurre un problema. Debido a que el script podría todavía recuperarse de un error, sólo imprime el error y continúa, en lugar de salir.

La función entries devuelve una lista de objetos Net::LDAP::Entry, eachcada uno con un único resultado. Primero se imprime el DN de la entrada y luego todas las clases de objetos. Si usted tuviera una versión de texto de todo el registro, el método dump imprime toda la entrada en el formato de texto.

Agregar una nueva entrada

Usted agrega una entrada al árbol a través del método add. Usted le debe pasar a la función el DN de la entrada que desea agregar, junto con los atributos. Los atributos son una lista de pares de valores de key =>. El valor también puede ser una lista en el caso de múltiples instancias del mismo atributo. El Listado 8 muestra una entrada que está siendo agregado al árbol.

Listado 8. Agregar una entrada usando Net::LDAP
$message  = $ldap->add(
        "cn=Fred Flintstone,ou=people,dc=ertw,dc=com",
        attr => [
                cn   => "Fred Flintstone",
                sn   => "Flintstone",
                objectclass => [ "organizationalPerson",
                        "inetOrgPerson" ],
        ]
);

if ($message->code() != 0) {
        print $message->error();
}

El primer parámetro para add es DN o un objeto de Net::LDAP::Entry. Si se pasa el DN, usted debe pasar una arrayref a través del método attr. Aunque el formato del valor key => sea utilizado como en una hashref, Net::LDAP está esperando una arrayref, entonces ¡tenga cuidado!

Más información acerca de Net::LDAP

Net::LDAP provee una interfaz para todas las funciones de LDAP, tales como compare, delete y moddn. Todas son utilizadas de manera similar a los ejemplos anteriores y están totalmente documentadas en la manpage Net::LDAP.

Todos los ejemplos mostrados operar en una modalidad de bloqueo, lo que significa que la función vuelve luego de que la respuesta ha sido recibida del servidor. Usted también puede operar en una modalidad asincrónica, la que involucra dar una función de respuesta que es invocada a medida que los paquetes son recibidos.

Al utilizar Net::LDAP, usted puede usar los datos almacenados en su árbol de LDAP en sus scripts. Perl ya es utilizado en una amplia variedad de software, de manera que las oportunidades para la integración son ilimitadas.

Desarrollo en C/C++

El uso de las bibliotecas C está más involucrado que las bibliotecas de Perl. La manpage ldap(3) contiene una descripción detallada de cómo usar la biblioteca, y tiene indicadores hacia las otras manpages que describen cada función. Para usar las bibliotecas C de LDAP su código debe incluir primero el archivo de inclusión ldap.h, tal como con #include <ldap.h>. Entonces sus archivos de objeto deben estar vinculados con libldap utilizando la opción -lldap del enlazador (linker).


Resumen

En este tutorial, usted aprendió acerca de la instalación y la configuración del servidor autónomo OpenLDAP. Al configurar slapd, utilice el archivo slapd.conf. Debe tener cuidado de mantener sus opciones globales en la parte superior del archivo y luego continuar con las configuraciones del backend y de la base de datos porque slapd dependen del orden de las directivas. Si tiene dudas consulte la manpage slapd.conf.

El código de Perl puede utilizar un servidor de LDAP a través del módulo Net::LDAP. Primero cree un objeto y luego llame a los método del objeto que correspondan a la operación de LDAP que usted desea. Generalmente, primero bind y luego realiza sus consultas. Es importante verificar los resultados de sus funciones a través de las funciones code y error.

Recursos

Aprender

Obtener los productos y tecnologías

  • Descargue OpenLDAP.
  • El IBM Tivoli Directory Server es un servidor LDPA competente que se integra bien a otros productos IBM.
  • phpLDAPadmin es una herramienta para la administración de LDAP basada en la Web. Si la GUI es más para su estilo, Luma es una buena de ver.
  • Con IBM trial software, que está disponible para su descarga directa de developerWorks, cree su próximo proyecto de desarrollo en Linux.

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Linux
ArticleID=651096
ArticleTitle=Preparación para el examen 301 del LPI, Tema 302: Instalación y desarrollo
publish-date=07152011