Actualizado a: 15 de febrero de 2023
Quizás no hayas escuchado nunca hablar del protocolo LDAP o de los servidores LDAP, pero realmente son sistemas interesantes de cara a gestionar el acceso de distintos usuarios en una red. En definitiva, estos sistemas permite gestionar todos los usuarios y activos, y deberías conocerlo más de cerca…
¿Qué es LDAP y para qué sirve?
LDAP (Lightweight Directory Access Protocol) o también conocido como «Protocolo Ligero de Acceso a Directorios» es tipo de protocolo de la capa de aplicación del TCP/IP del que ya hablamos en este blog. Permite el acceso a un servicio de directorio ordenado y distribuido, para buscar cualquier información en un entorno de red.
Como debes saber, un directorio es un conjunto de objetos con atributos que están organizados de manera lógica y jerárquica, es decir, está en forma de árbol y perfectamente ordenado en función de lo que nosotros queramos, ya sea alfabéticamente, por usuarios, direcciones, etc. Una base de datos destinada a almacenar información de autenticación en este caso.
Es decir, en este servidor se encontrarán los nombres de usuario y las contraseñas correspondientes para dar el acceso al sistema. Además de almacenar las credenciales, también podría incluirse otra información, como datos de contacto del usuario, ubicación de los recursos de la red local, certificados digitales, etc.
Por ejemplo, si montamos un servidor LDAP que de servicio de acceso, se podrían generar inicios de sesión en el sistema operativo sin necesidad de agregar diferentes usuarios al sistema operativo, ya que el acceso lo daría el propio servidor. De esta forma todo sería mucho más versátil, y la gestión del servidor centralizada, pudiendo dar acceso a diversos equipos cliente.
Por ejemplo, esto podría ser algo positivo para una empresa que tenga muchos empleados que tengan que tener acceso a diferentes recursos de red o sistemas. También puede aplicarse a la autorización de usuarios en software como Docker, OpenVPN, servidores de archivos NAS, etc. Es decir, LDAP puede ser usado tanto por usuarios físicos como por software que necesite acceso.
Generalmente un servidor LDAP se encuentra en una red privada, es decir, redes de área local, para autenticar las diferentes aplicaciones y usuarios, pero también podría funcionar sobre redes públicas sin ningún problema, accediendo al servidor de forma remota.
Por otro lado, no hay que olvidar que LDAP es compatible con varios servicios de directorios de credenciales, como por ejemplo:
- Active Directory de Microsoft para Windows.
- OpenLDAP que puede funcionar sobre diversos sistemas operativos.
Actualmente, a la hora de instalar los paquetes correspondientes en un servidor, por ejemplo en Linux, la versión más actual es la LDAPv3.
Funcionamiento de un servidor LDAP
LDAP, como ya hemos dicho, es un protocolo que tiene arquitectura cliente-servidor, por lo tanto, vamos a tener varios clientes que se conectarán a un servidor LDAP. Desde el lado del servidor se debe instalar el software oportuno para implementar LDAP y también administrar todos los usuarios y demás información.
En el lado del cliente se contará con el software oportuno para establecer la conexión. Generalmente puede haber decenas o cientos de clientes conectados a un mismo servidor LDAP, y podrían estar atendiendo a varias peticiones simultáneas de acceso.
El funcionamiento de LDAP es bastante sencillo, como cualquier otro sistema cliente-servidor. Por ejemplo, los pasos a seguir serían:
- El cliente se conecta al servidor LDAP, por ejemplo con Directory System Agent o desde OpenLDAP a través del puerto TCP/IP 389 (aunque pueden ser otros).
- En ese momento se establece la conexión cliente-servidor y se intercambian datos entre ambos lados para iniciar el acceso si los datos son correctos.
Además, es importante resaltar que un cliente puede realizar dos gestiones cuando está conectado al servidor son dos:
- Autenticación: es un mecanismo por el que un usuario se identifica frente a un sistema, con sus credenciales, como es el nombre de usuario y contraseña.
- Autorización: mecanismo para conseguir permiso para realizar una acción en el sistema o tener acceso a ciertos recursos de red.
Por otro lado, desde el lado del servidor LDAP podemos hacer esto:
- Leer información: se puede leer información con la que el cliente debe autenticarse, y el servidor comprobará en la base de datos si este usuario realmente tiene acceso o no.
- Modificar información: para modificar información el proceso es el mismo, pero el servidor comprobará si tenemos permisos de modificación en el servidor.
El protocolo LDAP también nos permite intercambiar información entre varios servidores. Por ejemplo, imagina que en una red corporativa existen varios servidores y unos datos están en un servidor y otros en otro. Se puede hacer que desde uno de los servidores se pueda consultar a otro si dispone de acceso. Algo similar a lo que ocurre con los servidores DNS, que se van «preguntando» entre ellos para conseguir llegar al destino.
Tipos de operación
En el servidor LDAP existen varias operaciones que se pueden realizar como cliente, y estas llevan los siguientes nombres:
- Add: permite añadir una entrada de forma remota al servidor LDAP. Si ya existiese, el servidor lo notificará.
- Modify: permite modificar una entrada ya existente. El protocolo permite tres modificaciones diferentes:
- Añadir nuevo valor
- Reemplazar valor
- Eliminar valor.
- Delete: borrar una entrada indicada.
- Search: buscar entradas del directorio.
- Compare: permite comprobar si una entrada concreta tiene un atributo específico.
- Abandon: abortar una petición previa.
- Bind: sirve para autenticarse en el servidor LDAP.
- Start TLS: establecer una comunicación segura usando SSL/TLS en el protocolo LDAPv3.
- Unbind: cerrar la conexión o sesión creada con Bind.
Componentes y estructura
Para que todas estas acciones puedan llevarse a cabo, el servidor LDAP debe tener una serie de componentes y estructura determinada que se compone básicamente de:
- Directorios: es un árbol de entradas de directorio, jerarquizado.
- Entradas: cada entra consta de un conjunto de atributos. Por ejemplo, el nombre de usuario, contraseña, y otros detalles de identificación. Además, cada entrada tiene un identificador único con su DN (Distinguished Name).
- Atributos: los atributos tienen nombre y uno o más valores, son definidos en los esquemas.
Por ejemplo, para verlo de una forma más visual, una estructura básica de un LDAP podría parecerse a esta:
cn=Guía Hardware,dc=example,dc=es
cn: Guía Hardware
givenName: Pepito
sn: Pérez
telephoneNumber: +34 600 000 000
telephoneNumber: +34 611 111 111
mail: [email protected]
manager: cn=GuiaHardware,dc=example,dc=es
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
- dn (Distinguished Name): como puedes ver, es el nombre de la entrada.
- cn (Common Name): es el nombre distinguido relativo.
- dc (Domain Component): es el Distinguished Name de la entrada padre.
El resto de líneas son los atributos de la entrada, como el givenName, sn, telephoneNumber, mail y los diferentes objectClass que tenemos. Así es como se jerarquiza y se aloja toda esta información en la base de estos servidores LDAP.
Para realizar búsquedas tenemos que poner una URL para obtener información. Puedes usar en tu navegador web y introducir la siguiente dirección (es solo la sintaxis, habría que sustituir cada campo por el correspondiente en tu caso:
ldap://host:puerto/DN?attributes?scope?filter?extensions
En este caso habría que sustituir host:puerto por la IP y el puerto correspondiente a nuestro servidor LDAP, o por el nombre de dominio si lo tiene. Muchos de estos componentes son opcionales, es decir, no hace falta que la sintaxis se componga de todos esos atributos.
Tipos de autentificación
Por otro lado, y no menos importante, con el protocolo LDAP tenemos libertad para autenticación mediante tres métodos diferentes que debes conocer:
- Anónima: es una forma totalmente insegura, ya que permite que las cuentas de usuario puedan acceder sin necesidad de un nombre de usuario y contraseña, por lo que estaría abierto a todos.
- Simple: se basa en credenciales, es decir, una combinación de nombre de usuario y contraseña. Se entregan sin cifrar, en texto plano, lo que también supone un riesgo para la seguridad. No obstante, es más seguro que el anterior, porque solo podrán autenticarse los usuarios que cuenten con un usuario y contraseña creado y no el resto. Sin embargo, un ataque que intercepte los paquetes entre el cliente y el servidor podría hacerse con la contraseña y nombre de usuario para acceder. Por eso se debe cifrar esta información.
- SASL: es el modo más seguro para autenticarse en LDAP. Es más seguro debido a que usa un cifrado robusto, mediante SSL/TLS o Kerberos. Como sabrás, Kerberos usa criptografía que evitan los ataques destinados a los datos de autenticación que se trasladan por la red. Esta es compatible con diferentes servicios como OpenVPN o Linux Samba, entre otros muchos. Y TLS también es muy común entre protocolos (véase HTTPS, FTPS,…).
Microsoft Active Directory vs OpenLDAP
Microsoft Active Directory utiliza internamente el protocolo LDAP para realizar todas las comunicaciones desde los clientes hasta el servidor/s. Por tanto, va a tener bastante similitud en este sentido. Otros servicios que también usan LDAP para la autenticación son Apache, Directory Service de Red Hat, y el OpenLDAP, entre otros muchos.
Concretamente nos interesa OpenLDAP, que es una implementación de código abierto de este protocolo LDAP. Se puede instalar en cualquier sistema operativo. Por tanto, una de las mayores diferencias es en cuanto al código, ya que AD de Microsoft es propietario…