Diferencia entre revisiones de «LDAP»

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda
Sin resumen de edición
 
(No se muestran 13 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
LDAP es el acrónimo de "Lightweight Directory Access Protocol". Se trata de un protocolo a [[nivel de aplicación]] para acceder a un servicio de directorio ordenado y distribuido para encontrar información en un entorno de red.
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.
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.
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.


== Protocolo LDAP ==
== Visión Global ==


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.  
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.
 
[[Archivo:DiagramaLDAP1.png]]


Las peticiones son las siguientes:
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]].


* Start TLS - Para utilizar la extensión TLS de LDAPv3 para una conexión segura.
Por tanto:
* Bind - Sirve para autenticarse en el servidor especificando una versión del protocolo LDAP
* Cabe resaltar que LDAP NO define cómo se almacenan los datos. Sin embargo, servidores como OpenLDAP si tienen unos backends implementados.
* Search - Para buscar entradas dentro del directorio.
* Cuando se comunica con un servidor LDAP no importa cómo se implemente, de hecho el cliente no lo sabe.
* Compare - Prueba si una entrada tiene un valor concreto.
* 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.
* 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.


== Clientes LDAP ==
=== Cuándo usar LDAP ===


Los clientes de LDAP pueden ser muy diversos. La mayoría lo usan para autentificarse. Entre ellos:
Se puede decir que cuando se necesite una base de datos centralizada, de rápida consulta y accesible con protocolos estándar.


* Sistemas operativos como Windows (Active Directory) o Linux, Para autentificar usuarios.
* Autenticación de máquinas
* [[Samba]] puede usar LDAP como backend para su base de datos de usuarios.
* Autenticación de usuarios
* Moodle, Joomla y otros CMS pueden aprovechar los mecanismos de autenticación de LDAP para sus propios usuarios.
* Usuarios/Grupos del sistema
* Squid
* 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 ==  
== Directorio LDAP ==  


LDAP accede a su base de datos entendiéndola como una base de datos jerárquica en forma de árbol.  
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.
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.
Cada nodo del árbol es un objeto LDAP y puede contener otros nodos hijos.
Línea 50: Línea 67:
El nodo raíz puede tener una nomenclatura basada en DNS, como es el caso o en el criterio que se desee.  
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'''.  
* 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


Un '''schema''' es un conjunto de definiciones que describen los datos que puede almacenar cada objeto. Hay varios esquemas según las necesidades, pero se puede personalizar o crear uno propio.
          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

Revisión actual - 10:46 17 sep 2012

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