Servicios de Directorios en OpenLDAP + FreeBSD

  • Introducción

La presentación de este material tiene como objetivo la implementación de un servidor LDAP para proveer servicios de directorio, específicamente usando la versión que nos brinda OpenLDAP de este protocolo, así como dar breve introducción al nuevo backend de almacenamiento LMDB.

  • ¿Qué es LDAP?

LDAP son las siglas de Lightweight Directory Access Protocol (en español Protocolo Ligero de Acceso a Directorios) que hacen referencia a un protocolo a nivel de aplicación el cual permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red. LDAP es un protocolo de comunicación independiente de la plataforma.

  • ¿Cómo surge OpenLDAP?

El proyecto comenzó como un clon de la implementación LDAP de la Universidad de Michigan, entidad donde se desarrolló originalmente el protocolo LDAP y que también actualmente trabaja en la evolución del mismo.

  • ¿Cómo está compuesto OpenLDAP?

Básicamente, OpenLDAP posee tres componentes principales:

  1. slapd – Dominio de servidor y herramientas.
  2. Bibliotecas que implementan el protocolo LDAP.
  3. Programas cliente: ldapsearch, ldapadd, ldapdelete, entre otros.

Adicionalmente, el proyecto OpenLDAP es anfitrión de los subproyectos:

  1. JLDAP – biblioteca de clases LDAP para Java.
  2. JDBC-LDAP – controlador Java JDBC – LDAP.
  3. ldapc++ – biblioteca de clases LDAP para C++.
  • Backends disponibles en OpenLDAP

Backends de almacenamiento de datos (Data Storage Backends):

  1. back-bdb: el primer backend transaccional para OpenLDAP, construido en base a BerkeleyDB.
  2. back-hdb: una variante de back-bdb que es totalmente jerárquica y soporta renombrado de sub-árboles.
  3. back-ldif: construido en archivos LDIF de texto plano.
  4. back-mdb: pretende ser el próximo backend por defecto como base de datos de slapd.

Proxy backends (actúan como puertas de enlace a otros sistemas de almacenamiento de datos).

  1. back-ldap: proxy simple a otros servidores LDAP.
  2. back-meta: proxy con características de meta-directorio.
  3. back-passwd: usa un sistema basado en Unix de datos passwd y group.
  4. back-relay: internamente redirige a otros backends de servidores slapd.
  5. back-sql: establece conexiones a bases de datos SQL.

Backends dinámicos – estos generan datos sobre la marcha

  1. back-config: configuración del servidor slapd vía LDAP.
  2. back-dnssrv: localiza servidores LDAP vía DNS.
  3. back-monitor: estadísticas de slapd vía LDAP.
  4. back-null: un backend nulo, análogo a /dev/null en Unix.
  5. back-perl: invoca arbitrariamente módulos de perl en respuesta a peticiones LDAP.
  6. back-shell: invoca scripts de shell para peticiones LDAP.
  7. back-sock: redirige peticiones LDAP sobre IPC a demonios de manera arbitraria.
  • ¿Como surge LMDB?

LMDB surge como una necesidad para resolver la dificultad de rendimiento usando la base de datos transaccional Oracle BerkeleyDB (BDB). Para poder mejorar el rendimiento usando este backend (BDB), es necesario un esmerado proceso de optimización, ya el mismo posee un nivel de complejidad alto. Los desarrolladores de OpenLDAP en vez de ir mejorando herramientas de terceros, como es el caso de BDB, decidieron crear una biblioteca orientada específicamente a usarse en OpenLDAP, de hay el naciemento de LMDB.

  • Comparando a LMDB con otros SGBD de tipo Llave/Valor
Características LMDB BDB LevelDB Kyoto TreeDB
Transacciones ACID X X
Transacciones Anidadas X X
Espacio de nombres múltiples X X
Llaves ordenadas X X X X
Llaves duplicadas ordenadas X X
Concurrencia Multi-hilo X X X X
Concurrencia Multi-proceso X X
Cero optimización de cache X
Recuperación instantánea X
Lecturas Zero-copy X
Escrituras Zero-copy X
Atomicidad en Hot Backup X

Lo que debe saber para llevar a cabo este tutorial:

  • Instalar FreeBSD.
  • Conocimientos básicos en la shell.
  • Conocimientos básicos de vim.
  • Instalar ports.

Entorno de pruebas:

  • Sistema Operativo: FreeBSD 10.
  • OpenLDAP: openldap-server-2.4.38_1.
  • JXplorer: jxplorer-3.3.

Comenzando:
prime@prime:~ % su
Password:
root@prime:/home/prime # portsnap fetch update
root@prime:/home/prime # whereis openldap24-server
openldap24-server: /usr/ports/net/openldap24-server
root@prime:/home/prime # cd /usr/ports/net/openldap24-server
root@prime:/usr/ports/net/openldap24-server # make rmconfig
===> Removing user-configured options for openldap-server-2.4.38_1
root@prime:/usr/ports/net/openldap24-server # make config

1

Quedándonos así:

2

root@prime:/usr/ports/net/openldap24-server # make install

Alternativa de instalación:

root@prime:/home/prime # portsnap fetch update
root@prime:/home/prime # whereis openldap24-server
openldap24-server: /usr/ports/net/openldap24-server
root@prime:/home/prime # portmaster -v net/openldap24-server
root@prime:~ # cd /usr/local/etc/openldap/
root@prime:/usr/local/etc/openldap # ls -lh
total 32
-rw——- 1 root wheel 845B 2 ene 01:21 DB_CONFIG.example
-rw-r–r– 1 root wheel 245B 3 dic 10:14 ldap.conf
-rw-r–r– 1 root wheel 245B 28 nov 13:57 ldap.conf.default
drwxr-xr-x 2 root wheel 1,5k 23 ene 11:31 schema
-rw——- 1 root wheel 2,1k 23 ene 11:31 slapd.conf
-rw——- 1 root wheel 2,1k 2 ene 01:21 slapd.conf.default
-rw——- 1 root wheel 2,5k 2 ene 01:21 slapd.ldif
-rw——- 1 root wheel 2,5k 2 ene 01:21 slapd.ldif.default
root@prime:/usr/local/etc/openldap # cp slapd.conf slapd.temp
root@prime:/usr/local/etc/openldap # ls -lh schema/ | grep .schema
-r–r–r– 1 root wheel 6,0k 23 ene 11:31 collective.schema
-r–r–r– 1 root wheel 7,9k 23 ene 11:31 corba.schema
-r–r–r– 1 root wheel 20k 23 ene 11:31 core.schema
-r–r–r– 1 root wheel 72k 23 ene 11:31 cosine.schema
-r–r–r– 1 root wheel 10k 23 ene 11:31 duaconf.schema
-r–r–r– 1 root wheel 3,2k 23 ene 11:31 dyngroup.schema
-r–r–r– 1 root wheel 6,1k 23 ene 11:31 inetorgperson.schema
-r–r–r– 1 root wheel 13k 23 ene 11:31 java.schema
-r–r–r– 1 root wheel 2,3k 23 ene 11:31 misc.schema
-r–r–r– 1 root wheel 7,5k 23 ene 11:31 nis.schema
-r–r–r– 1 root wheel 1,5k 23 ene 11:31 openldap.schema
-r–r–r– 1 root wheel 20k 23 ene 11:31 pmi.schema
-r–r–r– 1 root wheel 19k 23 ene 11:31 ppolicy.schema
root@prime:/usr/local/etc/openldap # vim slapd.temp

include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

modulepath      /usr/local/libexec/openldap
moduleload      back_mdb

database        config
rootdn          «cn=manager,cn=config»
rootpw          manager
~

root@prime:/usr/local/etc/openldap # mkdir slapd.d
root@prime:/usr/local/etc/openldap # slaptest -f slapd.temp -F slapd.d/
config file testing succeeded
root@prime:/usr/local/etc/openldap # ls -lh slapd.d/
total 8
drwxr-x—  3 root  wheel   512B 24 ene 09:53 cn=config
-rw——-  1 root  wheel   1,0k 24 ene 09:53 cn=config.ldif
root@prime:/usr/local/etc/openldap # ls -lh slapd.d/cn=config/cn=schema/
total 32
-rw——-  1 root  wheel    15k 24 ene 09:53 cn={0}core.ldif
-rw——-  1 root  wheel    11k 24 ene 09:53 cn={1}cosine.ldif
-rw——-  1 root  wheel   2,8k 24 ene 09:53 cn={2}inetorgperson.ldif
root@prime:/usr/local/etc/openldap # chown -Rf ldap:ldap slapd.d

root@prime:/usr/local/etc/openldap # vim /etc/rc.conf.local

# OpenLDAP
slapd_enable=»YES»
slapd_flags=»-4 -h ‘ldap://127.0.0.1 ldapi:///’  -l local4″
slapd_cn_config=»YES”
~

root@prime:/usr/local/etc/openldap # service slapd start
Starting slapd.
root@prime:/usr/local/etc/openldap # slappasswd
New password:
Re-enter new password:
{SSHA}R0lNCEVqXXoXDXy/h68LGppdzNmN2Cfx
root@prime:/usr/local/etc/openldap # vim temp.ldif

dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}R0lNCEVqXXoXDXy/h68LGppdzNmN2Cfx
~

root@prime:/usr/local/etc/openldap # ldapmodify -H ldapi:/// -D \ cn=manager,cn=config -w manager -f temp.ldif
modifying entry «olcDatabase={0}config,cn=config»
root@prime:/usr/local/etc/openldap # mkdir /var/db/openldap-data/home_net
root@prime:/usr/local/etc/openldap # vim temp.ldif

dn: olcDatabase=mdb,cn=config
objectClass: olcMdbConfig
olcDatabase: mdb
olcDbDirectory: /var/db/openldap-data/home_net/
olcSuffix: dc=home,dc=net
olcRootDN: cn=manager,dc=home,dc=net
olcRootPW: manager
~

root@prime:/usr/local/etc/openldap # ldapmodify -a -H ldapi:/// -D \ cn=manager,cn=config -w manager -f temp.ldif

adding new entry «olcDatabase=mdb,cn=config»

root@prime:/usr/local/etc/openldap # ls -lh /var/db/openldap-data/home_net/
total 20
-rw——- 1 ldap ldap 12k 24 ene 14:24 data.mdb
-rw——- 1 ldap ldap 8,0k 24 ene 14:24 lock.mdb
root@prime:/usr/local/etc/openldap # vim template.ldif

dn: dc=home,dc=net
objectClass: dcObject
objectClass: organization
o: HOME.NET
description: HOME.NET

dn: cn=manager,dc=home,dc=net
objectClass: organizationalRole
cn: manager
~

root@prime:/usr/local/etc/openldap # ldapmodify -a -H ldapi:/// -D \ cn=manager,dc=home,dc=net -w manager -f template.ldif
adding new entry «dc=home,dc=net»

adding new entry «cn=manager,dc=home,dc=net»

Capturas:

3

5

4

Herramientas gráficas para administrar OpenLDAP:

  • http://jxplorer.org/
  • https://directory.apache.org/

¿Te resultó interesante? Compártelo ...



Eduardo Noel Núñez

Publicado por Eduardo Noel Núñez

Forma parte de GUTL desde el 29 septiembre, 2013. Administrador, científico y forense de la Red. Mi pasión son los entornos BSD.

Este artículo tiene 9 comentarios

  1. Excelente entrega… Pero, por favor, categoricen bien los artículos, utilicen las etiquetas (que no muerden) y una imagen destacada nunca esta de mas. A los admins déjenlo solo una revisión, pero no hacer el resto. Si ustedes escriben los artículos, es justo que ustedes mismos seleccionen imagen destacada, categoricen bien y empleen las etiquetas correctas…

    Saludos y repito, excelente entrega, poniendo en alto la comunidad BSD

  2. Muy buen articulo

    Estoy haciendo la instalación siguiendo esta muy interesante guía y me conseguí con algunas sorpresas

    Debes hacer mención de la instalación del paquete dialog4ports

    Debes indicar claramente donde comienza y donde termina cada una de las opciones de instalación a las que haces mención para no confundir a los mas novatos

    Haciendo la instalación el sistema me pide si se desea habilitar el soporte para FETCH, podrías indicar como configuraste este soporte?

    Gracias por el aporte

    • Sobre el paquete dialog4ports no hice referencia, porque ya había instalado otros port y se instaló como dependencia, no obstante a eso, si uno no lo tiene es tan simple como instalarlo.

      Sobre el soporte de fetch, debes darme más detalles porque no entiendo que es lo que verdaderamente me preguntas, ya que no se si a lo que te refieres es al sistema operativo o a la aplicación y también especificarme donde te hace esta pregunta.

      Felicidades por haber logrado la instalación.

Los comentarios están cerrados.