ⓘ Protocolo ligero de acceso a directorios. El protocolo ligero de acceso a directorios hace referencia a un protocolo a nivel de aplicación que permite el acceso ..

                                     

ⓘ Protocolo ligero de acceso a directorios

El protocolo ligero de acceso a directorios hace referencia a un protocolo a nivel de aplicación que permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red.

Un directorio es un conjunto de objetos con atributos organizados en una manera lógica y jerárquica. El ejemplo más común es el directorio telefónico, que consiste en una serie de nombres personas u organizaciones que están ordenados alfabéticamente, con cada nombre teniendo una dirección y un número de teléfono adjuntos. Para entender mejor, es un libro o carpeta, en la cual se escriben nombres de personas, teléfonos y direcciones, y se ordena alfabéticamente.

Un árbol de directorio LDAP a veces refleja varios límites políticos, geográficos u organizacionales, dependiendo del modelo elegido. Los despliegues actuales de LDAP tienden a usar nombres de Sistema de Nombres de Dominio DNS por sus siglas en inglés para estructurar los niveles más altos de la jerarquía. Conforme se desciende en el directorio pueden aparecer entradas que representan personas, unidades organizacionales, impresoras, documentos, grupos de personas o cualquier cosa que representa una entrada dada en el árbol o múltiples entradas.

Habitualmente, almacena la información de autenticación usuario y contraseña y es utilizado para autenticarse aunque es posible almacenar otra información. A manera de síntesis, LDAP es un protocolo de acceso unificado a un conjunto de información sobre una red.

La versión actual es LDAPv3, y se encuentra definido en el RFC 4511una hoja de ruta de las especificaciones técnicas está suministrada por la RFC 4510.

                                     

1. Origen e influencias

La comprensión de los requerimientos de directorios por parte de las compañías de telecomunicaciones estaba bien desarrollada después de 70 años de producir y manejar directorios de teléfonos. Estas compañías introdujeron el concepto de servicios de directorio a tecnologías de información y redes informáticas, que culminó en la especificación X.500, un conjunto de protocolos producido por la Unión Internacional de Telecomunicaciones ITU por sus siglas en inglés en la década de 1980.

Los servicios de directorio X.500 se accedían tradicionalmente vía DAP Directory Access Protocol, que requería la pila de protocolos OSI Open Systems Interconnection. LDAP fue originalmente dirigido a ser un protocolo alternativo y ligero para acceder a servicios de directorio X.500 a través de la pila de protocolos más simple y ahora más difundida TCP/IP. Este modelo de acceso a directorio fue imitado de los protocolos DIXIE Directory Assistance Service.

Pronto se implementaron servidores de directorio LDAP independientes, así como los servidores de directorio que soportaban DAP y LDAP. El último se hizo popular en empresas debido a que eliminaba cualquier necesidad de desplegar una red OSI. Ahora, los protocolos de directorio X.500 incluyendo DAP pueden ser usados directamente sobre TCP/IP.

El protocolo fue creado originalmente por Tim Howes Universidad de Míchigan, Steve Kille Isode Limited, y Wengyik Yeong Performance Systems International hacia 1993. Un desarrollo más completo ha sido hecho por la Internet Engineering Task Force.

En las primeras etapas de ingeniería de LDAP, éste era conocido como Lightweight Directory Browsing Protocol, o LDBP. Posteriormente fue renombrado dado que el ámbito del protocolo había sido expandido para incluir no sólo navegación en el directorio y funciones de búsqueda, sino también funciones de actualización de directorio.

LDAP ha influenciado protocolos posteriores de Internet, incluyendo versiones posteriores de X.500, XML Enabled Directory XED, Directory Service Markup Language DSML, Service Provisioning Markup Language SPML, y Service Location Protocol SLP.

                                     

2. Visión general del protocolo

Un cliente inicia una sesión de LDAP conectándose a un servidor LDAP, preestablecido en el puerto TCP 389. El cliente luego envía una petición de operación al servidor, y el servidor envía respuestas. Con algunas excepciones, el cliente no necesita esperar una respuesta antes de enviar la siguiente petición, y el servidor puede responder en cualquier orden.

El cliente puede requerir las siguientes operaciones:

  • Compare - probar si una entrada nombrada contiene un valor de atributo dado
  • Start TLS - usar la extensión Transport Layer Security TLS LDAPv3 para una conexión segura
  • Abandon - abortar una petición previa
  • Add - Añadir una nueva entrada
  • Bind - autenticarse y especificar una versión del protocolo LDAP
  • Search - buscar y obtener entradas de directorio
  • Extended Operation - operación genérica usada para definir otras operaciones
  • Modify Distinguished Name DN - Modificar o renombrar una entrada
  • Unbind - cerrar la conexión no es el inverso de Bind
  • Delete - Borrar una entrada
  • Modify - Modificar una entrada

Además, el servidor puede enviar "notificaciones no solicitadas" que no son respuestas a ninguna petición, por ejemplo antes de que se termine el tiempo de conexión.

Un método alternativo común para asegurar las comunicaciones LDAP es usar un túnel SSL. Esto es denotado en las URLs de LDAP usando el esquema de URLs "ldaps". El puerto por defecto para LDAP sobre SSL es 636. El uso de LDAP sobre SSL fue común en LDAP Version 2 LDAPv2 pero nunca fue estandarizado en una especificación formal. Su uso es considerado obsoleto al igual que LDAPv2, que ha sido retirado oficialmente en 2003. ​

LDAP es definido en términos de ASN.1, y los protocolos del mensaje están codificados en el formato binario BER. Sin embargo, utiliza representaciones textuales para un número de campos y tipos ASN.1.

                                     

3. Estructura de directorio

El protocolo accede a directorios LDAP, que siguen la edición de 1993 del modelo X.500:

  • Cada entrada tiene un identificador único: su Nombre distinguido Distinguished Name, DN. Este consta de su Relative Distinguished Name RDN construido por algunos atributos en la entrada, seguidos del DN de la entrada del padre. Pensar en el nombre distinguido como el nombre completo de archivo y el nombre distinguido relativo como el nombre de archivo relativo en una carpeta.
  • Un directorio es un árbol de entradas de directorio.
  • Un atributo tiene un nombre un tipo de atributo o descripción de atributo y uno o más valores. Los atributos son definidos en un esquema véase luego.
  • Una entrada consta de un conjunto de atributos.

Se debe tener cuidado con el hecho de que un nombre distinguido puede cambiar durante tiempo de vida de una entrada, por ejemplo, cuando se mueven las entradas en el árbol. Para hacer más confiables e identificar de manera no ambigua las entradas se podría proporcionar un UUID en el conjunto de los atributos operacionales de la entrada.

Cuando se representa una entrada en el formato LDAP Data Interchange Format LDIF LDAP por sí mismo es un protocolo binario puede tener el siguiente aspecto:

dn: cn=John Doe,dc=example,dc=com cn: John Doe givenName: John sn: Doe telephoneNumber: +1 888 555 6789 telephoneNumber: +1 888 555 1232 mail: john example.com manager: cn=Barbara Doe,dc=example,dc=com objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: top

dn ” es el nombre de la entrada; no es un atributo ni tampoco parte de la entrada." cn=John Doe ” es el nombre distinguido relativo, y" dc=example,dc=com ” es el nombre distinguido de la entrada del padre, donde dc indica domain component componente de dominio. Las otras líneas presentan los atributos en la entrada. Los nombres de atributos son generalmente cadenas mnemotécnicas, como" cn ” para common name nombre común," dc ” para domain component componente de dominio," mail ” para dirección de correo electrónico y" sn ” para surname apellido.

Un servidor aloja un subárbol comenzando por una entrada específica, por ejemplo" dc=example,dc=com ” y sus hijos. Los servidores también pueden almacenar referencias a otros servidores, con los cual un intento de acceso a" ou=department,dc=example,dc=com ” puede retornar una referencia o continuación de referencia a un servidor que aloja esa parte del árbol de directorio. El cliente luego puede contactar al otro servidor. Algunos servidores también soportan encadenamiento chaining, que implica que el servidor contacta al otro servidor y devuelve el resultado al cliente.

LDAP raramente define un ordenamiento: el servidor puede devolver los valores de un atributo, los atributos en una entrada y las entradas encontradas por una operación de búsqueda en cualquier orden. Esto sigue la definición formal - una entrada es definida como un conjunto de atributos, y un atributo es un conjunto de valores, y los conjuntos no necesitan estar ordenados.



                                     

4. URLs de LDAP

Un formato URL de LDAP existe para descubrir qué clientes soportan en variedad de grados, y qué servidores retornan como referentes y referencias de continuación ver RFC 4516:

ldap://host:port/DN?attributes?scope?filter?extensions

La mayoría de los componentes, que son descritos debajo, son opcionales.

  • host es el FQDN o dirección IP del servidor LDAP donde se realiza la consulta.
  • scope especifica el ámbito de búsqueda y puede ser "base" por defecto, "one" o "sub".
  • DN es el nombre distinguido a usar como base de búsqueda.
  • filter es un filtro de búsqueda. Por ejemplo objectClass=* como es definido en RFC 4515.
  • attributes es una lista separada con comas de atributos a devolver.
  • extensions son extensiones al formato URL de LDAP.
  • port es el puerto de red del servidor LDAP.

Por ejemplo," ldap://ldap.example.com/cn=John%20Doe,dc=example,dc=com ” refiere a todos los usuarios en la entrada de John Doe en ldap.example.com, mientras" ldap:///dc=example,dc=com?sub?givenName=John ” busca por la entrada en el servidor por defecto. Así como en otros URL, los caracteres especiales deben ser codificados con signos de porcentaje.

Hay un esquema de URL similar y no estándar para LDAP sobre SSL, ldaps. Esto no debe confundirse con LDAP sobre TLS, que se puede conseguir usando la operación STARTTLS usando el esquema normal. ldap.

                                     

5. Variantes

Varias de las operaciones de servidor son dejadas al implementador o administrador para que él decida cómo serán realizadas. En consecuencia, los servidores pueden contar con soporte para una amplia variedad de escenarios.

Por ejemplo, el almacenamiento de datos en el servidor no es especificado -el servidor puede usar archivos de texto plano, bases de datos, o sólo ser una puerta de enlace para otro servidor. El control de acceso no es estándar, aunque se han realizado trabajos en él y existen modelos comúnmente usados. Las claves de usuarios pueden ser almacenadas en sus entradas del directorio o en otro lugar. El servidor puede rechazar realizar operaciones que desee, e imponer varias limitaciones.

La mayoría de secciones de LDAP son extensibles. Por ejemplo: Uno puede definir nuevas operaciones. Los controles pueden modificar peticiones y respuestas, por ejemplo para solicitar resultados ordenados de búsqueda. Nuevos ámbitos de búsqueda y métodos de enlace pueden ser definidos. Los atributos pueden tener opciones que podrían modificar su semántica.

                                     

6. Otros modelos de datos

Así como LDAP ha tenido su momento cumbre, los proveedores lo han proporcionado como un protocolo de acceso a otros servicios. La implementación luego da forma a los datos para imitar el modelo LDAP/X.500, pero la rigidez con la que es seguido este modelo varía entre implementaciones. Por ejemplo, existe software para acceder a bases de datos SQL a través de LDAP, a pesar de que LDAP no se presta para que esto ocurra. ​ Los servidores X.500 pueden soportar también LDAP.

De forma similar, los datos que fueron previamente alojados en otros tipos de almacenamiento de datos son a veces movidos a directorios LDAP. Por ejemplo, los usuarios de Unix y la información de grupos puede almacenarse en LDAP y accedidos vía módulos de PAM y NSS. LDAP es utilizado en ocasiones por otros servicios para conseguir autenticación.



                                     

7.1. Uso Estructura de nombres

Dado que un servidor LDAP puede devolver referencias a otros servidores para efectuar nuevas peticiones que el servidor mismo no puede devolver, una estructura de nombres para las entradas LDAP es requerida para que sea posible encontrar un servidor alojando un nombre distinguido dado. Dado que una estructura ya existe en el DNS, los nombres de alto nivel de los servidores a veces ofrecen nombres de DNS simulados, así como se hacía en X.500.

Si una organización tiene el nombre de dominio example.org, su entrada de más alto nivel en LDAP tendrá generalmente como nombre distinguido dc=example,dc=org donde dc significa componente de dominio. Si el servidor LDAP es también denominado ldap.example.org, el nivel más alto de la organización de la URL del LDAP URL se convierte en ldap://ldap.example.org/dc=example,dc=org.

Bajo el alto nivel, los nombres de entradas generalmente reflejan la estructura organizacional interna o las necesidades, en lugar de nombres de DNS.



                                     

8. Terminología

La terminología de LDAP que puede encontrarse es en ocasiones engorrosa. Esto en parte se debe a malentendidos, otros ejemplos son debido a orígenes históricos, otros surgen cuando se usó con servicios distintos de X.500 que usan terminología distinta. Por ejemplo, "LDAP" es a veces utilizado para referirse al protocolo, otras veces para el protocolo y los datos. Un "directorio LDAP" puede ser los datos o también el punto de acceso. Un "atributo" puede ser el tipo de atributo, o los contenidos de un atributo en un directorio o la descripción de un atributo un tipo de atributo con opciones. Un enlace bind anónimo es un método distinto de un enlace no autenticado, aunque ambos producen estados de autenticación anónima, por lo cual ambos términos son usados para ambas variantes. El atributo "uid" debe almacenar nombres de usuarios en lugar de identificadores numéricos de usuarios.

                                     

9.1. Implementaciones Active Directory

Active Directory es el nombre utilizado por Microsoft desde Windows 2000 como almacén centralizado de información de uno de sus dominios de administración.

Un Servicio de Directorio es un depósito estructurado de la información de los diversos objetos que contiene el Active Directory, en este caso podrían ser impresoras, usuarios, equipos.

Bajo este nombre se encuentra realmente un esquema definición de los campos que pueden ser consultados LDAP versión 3, lo cual permite integrar otros sistemas que soporten el protocolo. En este LDAP se almacena información de usuarios, recursos de la red, políticas de seguridad, configuración, asignación de permisos, etc.

                                     

9.2. Implementaciones Novell Directory Services

También conocido como eDirectory es la implementación de Novell utilizada para manejar el acceso a recursos en diferentes servidores y computadoras de una red. Básicamente está compuesto por una base de datos jerárquica y orientada a objetos, que representa cada servidor, computadora, impresora, servicio, personas, etc. entre los cuales se crean permisos para el control de acceso, por medio de herencia. La ventaja de esta implementación es que corre en diversas plataformas, por lo que puede adaptarse fácilmente a entornos que utilicen más de un sistema operativo.

                                     

9.3. Implementaciones iPlanet - Sun ONE Directory Server

Basado en la antigua implementación de Netscape, iPlanet se desarrolló cuando AOL adquirió Netscape Communications Corporation y luego conjuntamente con Sun Microsystems comercializaron software para servidores, entre ellos el iPlanet Directory Server, su implementación de LDAP. Actualmente se denomina Sun ONE Directory Server.

                                     

9.4. Implementaciones OpenLDAP

Se trata de una implementación libre del protocolo que soporta múltiples esquemas por lo que puede utilizarse para conectarse a cualquier otro LDAP.

Tiene su propia licencia, la OpenLDAP Public License. Al ser un protocolo independiente de la plataforma, varias distribuciones GNU/Linux y BSD lo incluyen, al igual que AIX, HP-UX, Mac OS X, Solaris, Windows 2000/XP y z/OS.

OpenLDAP tiene cuatro componentes principales:

  • Utilidades, herramientas y clientes.
  • slapd - demonio LDAP autónomo.
  • Rutinas de biblioteca de soporte del protocolo LDAP.
  • slurpd - demonio de replicación de actualizaciones LDAP autónomo.


                                     

9.5. Implementaciones Red Hat Directory Server

Directory Server es un servidor basado en LDAP que centraliza configuración de aplicaciones, perfiles de usuarios, información de grupos, políticas así como información de control de acceso dentro de un sistema operativo independiente de la plataforma.

Forma un repositorio central para la infraestructura de manejo de identidad, Red Hat Directory Server simplifica el manejo de usuarios, eliminando la redundancia de datos y automatizando su mantenimiento.

                                     

9.6. Implementaciones Apache Directory Server

Apache Directory Server ApacheDS, es un servidor de directorio escrito completamente en Java por Alex Karasulu y disponible bajo la licencia de Apache Software, es compatible con LDAPv3 certificado por el Open Group, soporta otros protocolos de red tal como Kerberos y NTP, además provee Procedimientos Almacenados, triggers y vistas; características que están presente en las Base de Datos Relacionales pero que no estaban presentes en el mundo LDAP.

                                     

9.7. Implementaciones Open DS

Basado en los estándares LDAPv3 y DSMLv2, OpenDS surgió como un proyecto interno de SUN, aunque posteriormente se puso a disposición de la comunidad. Está desarrollado en JAVA y precisa de un entorno de ejecución Java Runtime Environment para funcionar. Es multiplataforma.

La primera versión estable fue liberada en julio de 2008. ​