LDAP

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda

LDAP es el acrónimo de "Lightweight Directory Access Protocol". Se trata de un protocolo a nivel de aplicación que define cómo acceder a un servicio de directorio ordenado y distribuido para encontrar información en un entorno de red.

LDAP no es la base de datos a la que se consulta, aunque de manera coloquial se suele referir tanto al protocolo como a la base de datos a la que se realizan las consultas. Aunque, necesariamente, define cómo se representan los datos y cómo se exportan o importan (LDIF). Cómo se almacenen los datos no es tarea de LDAP.

El uso de LDAP puede ser muy diverso, pero el más común para los administradores de sistemas es para almacenar o consultar información sobre el login como los usuarios, contraseñas, grupos o política de contraseñas.

Visión Global

LDAP define cuatro modelos:

  • El modelo de datos define cómo se debe representar la información dentro del protocolo. Puede que sea la forma en que se almacena o puede que no.
  • El modelo de nombres. Especifica que para nombrar los objetos de la base de datos se debe usar una nomenclatura con un formato como: dc=example,dc=com, por ejemplo.
  • El modelo funcional. Es decir, qué se puede hacer: leer, escribir, modificar, borrar...
  • El modelo de seguridad se encarga de gestionar de forma muy detallada quien puede o no puede ver o modificar qué partes del servicio o de la base de datos.

DiagramaLDAP1.png

Lo que está marcado en rojo es tarea del protocolo LDAP, de lo demás se encarga el servidor LDAP, por ejemplo, OpenLDAP o Active Directory.

Por tanto:

  • Cabe resaltar que LDAP NO define cómo se almacenan los datos. Sin embargo, servidores como OpenLDAP si tienen unos backends implementados.
  • Cuando se comunica con un servidor LDAP no importa cómo se implemente, de hecho el cliente no lo sabe.
  • Es conveniente separar el concepto de acceder al servidor LDAP del de sus operaciones internas. Es decir, hay que preocuparse de la organización del directorio, de los schemas y del contenido.

Cuándo usar LDAP

Se puede decir que cuando se necesite una base de datos centralizada, de rápida consulta y accesible con protocolos estándar.

  • Autenticación de máquinas
  • Autenticación de usuarios
  • Usuarios/Grupos del sistema
  • Libreta de direcciones
  • Seguimiento de activos
  • Telefonía
  • Gestión de recursos
  • E-mail, búsquedas de direcciones
  • ...

LDAP no se debería usar cuando se requiere modificar muy a menudo su contenido o la organización lógica de la información se corresponde más con el modelo relacional.

En el propio nombre LDAP especifica que es ligero. Esto quiere decir que es ligero respecto a X.500. X.500 se considera pesado porque utiliza todas las capas del protocolo OSI, mientras que LDAP usa el TCP/IP. Además, omite operaciones que X.500 utiliza pocas veces. Esta simplicidad permite a los programadores centrarse menos en cumplir el protocolo y más en la semántica de las consultas.

LDAP vs Bases de datos relacionales

Cuando pensamos en una base de datos relacional pensamos en un servicio de gran cantidad de tráfico para escritura y consulta. Una base de datos para LDAP no debería ser modificada muy a menudo. Por lo que se pueden central en mejorar la velocidad de acceso para búsquedas. Las bases de datos jerárquicas permiten búsquedas con una complejidad computacional menor.

Por otra parte, En las réplicas puede haber una cierta incoherencia de datos. Las bases de datos relacionales no pueden permitirse esto.

Directorio LDAP

LDAP accede a su base de datos entendiéndola como una base de datos jerárquica en forma de árbol. (No implica que, internamente, esté guardado así). Esto implica que hay un nodo raíz y a partir de ahí se organiza una estructura con subárboles.

Las bases de datos para LDAP, al ser jerarquicas, tienen un tiempo de consulta mucho menor que, por ejemplo, una base de datos relacional. Sin embargo, son menos eficientes para insertar o modificar entradas. Los directorios están pensados para ser consultados muy a menudo y modificado poco o nada. Tampoco necesitan tener que hacer transacciones complicadas ni mantener la consistencia cuando se replican.

Un ejemplo de directorio es el http://www.dmoz.org/ .

Cada nodo del árbol es un objeto LDAP y puede contener otros nodos hijos.

Ldap1.png

Si observamos este esquema, podemos ver varios elementos en el directorio:

  • El DIT o Directory Information Tree, que es el aŕbol en sí.
  • Cada nodo tiene un Relative Distinguished Name RDN, que es su nombre relativo, sin tener en cuenta en la posición del árbol en que está respecto a sus nodos padres. Por ejemplo, el primero tiene de RDN dc=com. Este puede indicar lo que se desee, por ejemplo ou=People significa "unidad organizativa" y se refiere a personas.
  • Cada nodo tiene un Distinguished name DN que es la unión de su RDN con el de sus nodos padres. Así, Juan Gama tiene como DN cn=Juan Gama, ou=People, I=Alicante, dc=compañíaB, dc=com

El nodo raíz puede tener una nomenclatura basada en DNS, como es el caso o en el criterio que se desee.

  • Cada objeto LDAP, además de tener un DN, puede tener clases y atributos que lo describen. Las clases definen que atributos deben o pueden estar presentes. Estas clases se definen en el schema.

Los atributos tienen un nombre y uno o más valores. Las clases se definen con el nombre objectClass. Un schema es un conjunto de definiciones que describen los datos que puede almacenar cada objeto. Los objetos pueden heredar características de objetos padres o proporcionar características a sus hijos. Hay varios esquemas según las necesidades, pero se puede personalizar o crear uno propio.

Clientes LDAP

Los clientes de LDAP pueden ser muy diversos. La mayoría lo usan para autentificarse. Entre ellos:

  • Sistemas operativos como Windows (Active Directory) o Linux, Para autentificar usuarios.
  • Samba puede usar LDAP como backend para su base de datos de usuarios.
  • Moodle, Joomla y otros CMS pueden aprovechar los mecanismos de autenticación de LDAP para sus propios usuarios.
  • Squid
  • ...

Protocolo LDAP

Cuando un cliente LDAP quiere hacer una consulta a un servidor LDAP se produce una comunicación a través de la red. El puerto por defecto es el TCP 389. Al igual que otros clientes, este envía una petición y el servidor envía respuestas.

Las peticiones son las siguientes:

  • Start TLS - Para utilizar la extensión TLS de LDAPv3 para una conexión segura.
  • Bind - Sirve para autenticarse en el servidor especificando una versión del protocolo LDAP
  • Search - Para buscar entradas dentro del directorio.
  • Compare - Prueba si una entrada tiene un valor concreto.
  • Add - Añadir nuevas entradas.
  • Delete - Borrar entradas.
  • Modify - Modificar una entrada.
  • Modify Distinguished name (DN) - Modificar el DN de una entrada. Es diferente al modificar porque esto puede suponer cambiar la estructura del directorio.
  • Abandon - Avortar una petición previa.
  • Extended Operation - Operación genérica usada para definir otras.
  • Unbind - Cerrar una conexión.


LDIF

Artículo principal (LDIF)

Para poder entender el contenido de una base de datos LDAP o para poder crear y modificar sus entradas existe un lenguaje llamado LDIF (LDAP Data Interchange Format). Este representa en texto plano las entradas que LDAP guarda en su formato interno binario.

Un ejemplo con todas las combinaciones:

          dn: cn=Barbara J Jensen,dc=example,dc=com
          cn: Barbara J Jensen
          cn: Babs Jensen
          objectclass: person
          description:< file:///tmp/babs
          sn: Jensen
          dn: cn=Bjorn J Jensen,dc=example,dc=com
          cn: Bjorn J Jensen
          cn: Bjorn Jensen
          objectclass: person
          sn: Jensen
          dn: cn=Jennifer J Jensen,dc=example,dc=com
          cn: Jennifer J Jensen
          cn: Jennifer Jensen
          objectclass: person
          sn: Jensen
          jpegPhoto:: /9j/4AAQSkZJRgABAAAAAQABAAD/2wBDABALA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVG