LDAP: De qué hablamos cuando hablamos de LDAP?

Publicado por Diego Córdoba en

En este artículo daremos una introducción al protocolo de servicio de directorios LDAP, sus características, usos y ejemplos de configuración.


Servicio de directorios

Un servicio de directorio es un sistema de software que almacena y organiza información en un directorio. Un directorio es una base de datos jerárquica, como un árbol, en el que dado un patrón de nombre, podemos acceder a un elemento particular, y todos sus datos asociados.

Estos datos almacenados para una entidad en el directorio pueden ser de muchos tipos distintos de datos.

Por ejemplo, podríamos disponer de una empresa, identificada por un dominio, como empresa.com, y dentro de la misma disponer de varias secciones, como compra, venta, o taller.

Ahora bien, cada una de estas entidades podría considerarse como un estante en una biblioteca, o como una unidad de organización dentro del árbol completo, de modo que cada unidad disponga de su propia información particular, como nombre, identificador, o sección a la que pertenece.ad

Luego podríamos tener, por ejemplo, empleados de compras, o ventas, y a su vez, cada persona sería un individuo dentro del árbol, y dispondría de su propia información personal, como nombre, apellido, documento, sección a la que pertenece, email, o datos particulares, por ejemplo, de privilegios en un sistema *nix para con diversos recursos, y sus accesos.

A todo este conjunto de datos, organizado jerárquicamente en un árbol, cuya rama principal es la empresa, de la que se descuelgan áreas o unidades de organización, y debajo de cada una sus elementos particulares, como usuarios o recursos, se lo llama árbol de directorio, o árbol LDAP.

Un servicio de directorios define un espacio de nombres para una red, y cada uno de sus elementos se identifica mediante un Disginguished Name, o DN, que representa una forma de acceso a un elemento particular, y toda la información que posee.

El servicio de directorios, en fin, permite compartir información entre diferentes plataformas, administrarla, almacenarla, y organizarla en items dentro del árbol, cada uno de los cuales dispondrá a su vez de atributos que le den ciertas características. Elementos posibles de almacenar en un arbol de directorios son, por ejemplo, personas, volúmenes, usuarios, grupos, dispositivos, teléfonos, etc.

Comparación con un modelo relacional

Un servicio de directorios es, ni mas ni menos, que una base de datos jerárquica, y esa es la principal diferencia que tiene con una base de datos relacional conocida.

Una base de datos de directorios es mucho más eficiente en operaciones de lectura que con operaciones de escritura. Es drelational_model_conceptsecir, es apta principalmente cuando necesitamos cargar una base de datos que luego va a ser fuertemente consultada, pero que a lo largo de su vida recibirá pocos cambios.

Otra característica distintiva respecto de un modelo relacional, es que existen atributos obligatorios para los ítems, y atributos opcionales, es decir, atributos que pueden omitirse a la hora de almacenar un nuevo elemento.

También podemos disponer de muchas instancias del mismo atributo para el mismo objeto, lo que es imposible de realizar en una base de datos relacional.

Y por último, y hablando de seguridad, en una base de datos jerárquica de directorio tenemos la ventaja de poder asignar niveles de acceso mediante ACL’s (Access Control List – Listas de control de acceso) a diferentes ramas de la base de datos de una manera muy simple.

LDAP – Lightweight Directory Access Protocol

LDAP, o protocolo de acceso ligero a directorios, es un protocolo de red, de capa de aplicación, destinado a acceder y mantener un sistema de directorios distribuido en redes TCP/IP.

ldapLDAP en sí es el protocolo, descrito en la rfc2251 en su versión 3.

LDAP es el protocolo que permite administrar y, en cierta forma, dar vida y funcionalidad a una base de datos jerárquica de directorio.

Es un protocolo cliente-servidor, por lo que necesitaremos implementaciones de software en ambas partes. Los clientes ldap iniciarán sesión con el servidor ldap, por defecto, utilizando el puerto 389 de tcp y udp. Entonces el cliente enviará la consulta al servidor y el servidor la resolverá y responderá al ciente.

Esta consulta se puede llevar a cabo en el cliente mediante diferentes maneras, directamente por comando, o mediante la parametrización de consultas en archivos de formato LDIF (Ldap Interchange Format), y, por supuesto, también a través de interfaces gráficas desarrolladas para administrar el árobl de una manera más cómoda, si se quiere.

Las consultas a su vez pueden consistir en solicitudes de información a la base de datos, o solicitudes de insersión de datos nuevos, o modificación de datos existentes, etc, y cuando hablamos de datos nos referimos a items de la base de datos jerárquica, identificados por sus DN’s, o atributos de los mismos.

Un ejemplo de una entrada LDAP

Un ejemplo de una entrada en un árbol LDAP podría ser la siguiente:

dn: cn=Diego Cordoba,dc=juncotic,dc=com
cn: Diego Cordoba
givenName: Diego
sn: Cordoba
telephoneNumber: +54 (260) 123-4567
mail: dieg@juncotic.com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top

Como se puede apreciar, disponemos de información personal del usuario, su dn que representa su identificación dentro de la base de datos, atributos como telephoneNumber, o mail, que incluso está repetido para ejemplificar los atributos de múltiples valores, y una serie de objectClass de las que hereda nuestro usuario atributos.

De mas está decir que podríamos agregar más atributos incluyendo las objectClass adicionales para cada caso. Por ejemplo, si quisiéramos un UID-Number o un password posix para sistemas *nix, podríamos incluir la objectClass posixAccount.

Algunas implementaciones de servicios de directorios

Protocolos y aplicativos que utilizan servicios de directorios son, por ejemplo, DNS, NIS o los dominios NT. Todas estas representan bases de datos jerárquicas que pueden considerarse bases de datos de directorios, o servicios de directorios.

DNS por ejemplo almacena atributos en formato de registros de resolución de nombres, para entidades llamadas zonas de dominio, que a su vez pueden depender unas de otras, como dominios y subdominios y delegaciones.

Implementaciones de árboles LDAP

Como dijimos, LDAP es el protocolo, mientras que una implementación podría ser un servidor LDAP, un software que le de vida al protocolo.

Implementaciones de árbol LDAP existen muchas. Ejemplos son Active Directory de Micro$oft, eDirectory de Novell, el Directory Server de Red-Hat, Apache Directory Server (ApacheDS) de la Apache Software Foundation, OpenDS como implementación open source de un servicio de directorios escrito en Java, o, por supuesto, OpenLDAP, una implementación Open source del software original de la Universidad de Michigan.

OpenLDAP soporte todas las arquitecturas de sistemas operativos, incluyendo Unix y derivados, como GNU/Linux, Windows, y una variedad de sistemas embebidos y de tiempo real.

OpenLDAP requiere especial atención, ya que es una de las implementaciones opensource multiplataforma más completas y estables, y de por sí recomendable para cualquier implementación de servicios de directorio basado en GNU/Linux.

Algunos links interesantes

https://en.wikipedia.org/wiki/Directory_services

https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol

RFC’s relacionadas con el proyecto:

https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol#RFCs

http://www.openldap.org/

¡Espero que esta breve intro les haya sido de utilidad!

¡Cualquier consulta quedamos a disposición en la sección de comentarios, redes sociales o form de contacto!


Diego Córdoba

- Ingeniero en Informática - Mg. Teleinformática - Tesis pendiente - Docente universitario - Investigador