OpenLDAP

  • Este artículo explica cómo implementar la autenticación de usuarios de un sitio Moodle a través de un servidor LDAP (Lightweight Directory Access Protocol). Anteriormente expliqué cómo montar un servidor LDAP en Linux y cómo instalar Fusion Directory, una excelente herramienta para la gestión de un directorio desde cualquier navegador Web. El motivo de contar con un directorio LDAP era el de autenticar usuarios de un sitio Moodle, entre otras cosas (el objetivo a largo plazo sería centralizar la autenticación de todos los usuarios de la organización).

  • La herramienta ldapdelete es la más adecuada para eliminar objetos de un directorio LDAP. Este artículo presenta un ejemplo de su uso.

  • En el primer artículo sobre OpenLDAP, expliqué cómo instalar y configurar LDAP con Postgres como backend. En el mismo presenté una configuración básica para slapd, la cual almacenaba la contraseña de root (superusuario de LDAP) en formato plano. Esto tiene varias implicancias negativas desde el punto de vista de la seguridad de la información, con lo cual el siguiente paso consiste en cambiar esta configuración para que el password se almacene como hash MD5 o SHA-1 en vez de plano.

  • Luego de implementar mi servidor OpenLDAP con PostgreSQL como backend, el siguiente paso consistió en configurar SSL/TLS para implementar un nivel de seguridad mínimo en las comunicaciones entre el servidor LDAP y los clientes.

    Aunque se trabaje sobre un entorno de pruebas o desarrollo, es indispensable contar con un certificado de confianza válido. Esto se debe a que OpenLDAP no permite utilizar un certificado autofirmado para utilizar en el servidor. De este modo tenemos varias alternativas: comprar un certificado firmado por una entidad de confianza; generar un certificado gratuito con certbot; o crear nuestra propia CA autofirmada.

    Crear nuestra propia CA tiene sus ventajas, ya que nos permite generar cualquier número de certificados y nos da mayor flexibilidad, aunque implica una mayor cantidad de trabajo al momento de configurar el servidor LDAP. Este artículo explica cómo configurar OpenLDAP para que haga uso de un certificado generado a través de nuestra propia CA (de forma similar a como lo hace OpenVPN).

  • Este artículo documenta la instalación de un servidor LDAP en GNU/Linux, the right way: compilando OpenLDAP desde los fuentes con LMDB como backend.

    Anteriormente expliqué cómo instalar y configurar OpenLDAP con PostgreSQL como backend. Aunque luego de un período de pruebas decidí descartar a Postgres y utilizar el backend recomendado y por defecto: LMDB.

    El problema al utilizar Postgres como backend, es que uno debe implementar manualmente (utilizando sentencias SQL) todas las funcionalidades necesarias para dar soporte a los diferentes schemas de LDAP (metadatos para traducir consultas LDAP en consultas SQL), tal como lo explica la guía de administración de LDAP. Es posible ver un ejemplo de programación de un backend SQL en el siguiente enlace: OpenLDAP-POSTGRESQL HOWTO - A live example.

    Mi intención fue utilizar Postgres en un principio debido a la conocida inestabilidad de la librería de bases de datos Berkeley DB (BDB). Sin embargo este problema hace que una instalación de OpenLDAP con Postgres sea prácticamente inmantenible. Por otro lado, las últimas versiones de OpenLDAP ya no utilizan BDB, sino que se recomienda el uso de una versión propia de LDAP: LMDB.

  • LDAP (Lightweight Directory Access Protocol) es un protocolo estándar abierto para acceder a servicios de directorio X.500. Un directorio es una base de datos específicamente diseñada para la búsqueda y navegación de información. De manera similar a una guía telefónica, más que como una carpeta en un sistema de archivos. Al igual que una guía telefónica o libreta de direcciones/contactos, el directorio almacena información acerca de un ítem, como un doctor: primero se encuentra la guía telefónica, luego se buscan doctores, a continuación se busca la especialidad deseada, y finalmente se decide qué doctor examinar (obtener sus datos como dirección, número de teléfono, horarios, etc.)

    Los servicios de directorio juegan un rol importante en el desarrollo de aplicaciones sobre Internet y redes privadas (intranets) permitiendo compartir información de recursos (usuarios, sistemas, redes, servicios y aplicaciones) a través de la red. Como ejemplo, un servicio de directorio puede proveer un conjunto organizado de registros, generalmente respetando una estructura jerárquica, tal como una libreta de direcciones de correo electrónico dentro de una red corporativa. También son utilizados muy frecuentemente para proveer servicios de autenticación y autorización centralizados (y a su vez distribuidos entre varios servidores) en redes corporativas, tal como es el caso de Active Directory, el popular servicio de directorio implementado por Microsoft.

    El protocolo LDAP opera sobre los protocolos de transporte de Internet (TCP/IP). LDAP es una alternativa liviana al protocolo DAP (Directory Access Protocol) del estándar X.500 para uso en Internet. Liviana porque se basa en la pila TCP/IP en lugar de en la compleja pila OSI. Además tiene simplificaciones como la representación de la mayoría de los valores de atributos e ítems del protocolo como texto plano, lo cual está diseñado para simplificar la implementación de clientes.

    Por defecto, OpenLDAP utiliza una base de datos Bekerley DB como backend. Sin embargo, de acuerdo a experiencias previas con otras aplicaciones, esta librería es propensa a errores, corrupción de datos y es ineficiente en comparación a otras tecnologías similares (por ejemplo SQLite). Por ende, este artículo documenta la instalación de un servidor LDAP con Postgres como backend (un motor de bases de datos muchísimo más eficiente y robusto) lo cual requiere la instalación de un driver ODBC.

  • La herramienta ldapsearch, provista por el paquete OpenLDAP, resulta muy conveniente al momento de hacer consultas sobre los datos dentro de un directorio LDAP desde línea de comandos. Este artículo presenta una serie de consultas de ejemplo que pueden resultar muy útiles para obtener información valiosa de un árbol LDAP.

  • Luego de haber instalado y configurado mi servidor OpenLDAP con PostgreSQL como backend, habían quedado una serie de tareas pendientes. Entre ellas, una de las primeras era instalar un script de inicio System V, a fin de levantar el demonio slapd automáticamente al iniciar el sistema, y gestionar el servicio a través de la herramienta service.

  • Supongamos que hemos compilado un servidor OpenLDAP con mbd (LMDB) como backend; hemos realizado un montón de pruebas para comprender su funcionamiento y configurarlo correctamente; y finalmente deseamos hacer "borrón y cuenta nueva" para comenzar con una instancia fresca del servidor (por ejemplo, pasamos el servidor OpenLDAP desde testing o desarrollo hacia producción). Este artículo explica entonces cómo reinicializar la base de datos mdb de un servidor OpenLDAP, para comenzar con una base de datos limpia.

  • Este artículo explica como reinicializar la base de datos de un servidor OpenLDAP (con PostgreSQL como backend) para comenzar nuevamente con un directorio vacío. Típicamente es lo que se hace una vez que ha finalizado la etapa de testeo con los datos de prueba y se desea comenzar a trabajar con datos reales en producción.

  • La herramienta ldapwhoami implementa la operación whoami a través de LDAP. Esta función, que tal vez parezca algo trivial, simplemente muestra el DN (Distinguished Name) efectivo del usuario con el cual se ha autenticado en un servidor LDAP. Sin embargo, más allá de esto puede ser de gran utilidad para verificar el correcto funcionamiento de un servidor LDAP y comprobar la validez de las credenciales de un determinado usuario.