Centralized authentication using OpenLDAP/es

Esta guía presenta las cuestiones básicas de LDAP y le muestra cómo configurar OpenLDAP para realizar tareas de autenticación entre un grupo de computadoras.

¿Qué es LDAP?
LDAP significa Lightweight Directory Access Protocol (Protocolo Ligero de Acceso a Directorio). Está basado en X.500 el cual define la mayoría de sus funciones y carece de algunas funciones esotéricas que tiene X.500. Ahora bien, ¿Qué es X.500 y porqué existe LDAP?

X.500 es un modelo de Servicio de Directorio basado en el concepto OSI (Interconexión de sistemas Abiertos). Contiene definiciones de espacios de nombres y protocolos para consultar y actualizar el directorio. Sin embargo, se ha encontrado en muchos casos que X.500 es demasiado estricto. Mejor entrar en LDAP. Al igual que X.500, proporciona un modelo de datos y espacio de nombres para el directorio y el protocolo. No obstante, LDAP está diseñado para correr directamente sobre la pila TCP/IP. Podemos considerar a LDAP como una versión ligera de X.500.

No lo pillo. ¿Qué es un directorio?
Un directorio es una base de datos especializada diseñada para consultas frecuentes y actualizaciones no tan frecuentes. Al contrario que las bases de datos generalistas, no ofrecen soporte para transacciones o funcionalidad de vuelta atrás (roll-back). Los directorios se replican fácilmente para incrementar disponibilidad y fiabilidad. Cuando se replican los directorios, se permiten inconsistencias temporales siempre que acaben sincronizándose.

¿Cómo se estructura la información?
Toda la información dentro de un directorio está estructurada jerárquicamente. Aún más, si intenta introducir datos en un directorio, éste debe conocer la forma de almacenar estos datos en un árbol. Eche un vistazo a una compañía ficticia y a su organigrama:

Puesto que no puede alimentar la base de datos con este tipo de arte ascii, se debe definir cada nodo de este árbol. Para nombrar estos nodos, LDAP usa un sistema de definición de nombres. La mayor parte de distribuciones de LDAP (incluyendo OpenLDAP) ya contienen un buen número de esquemas predefinidos (y normalmente aprobados), como el inetOrgPerson o un esquema llamado posixAccount utilizado frecuentemente para definir usuarios que los equipos Unix o Linux pueden utilizar. Observe que existen herramientas basadas en GUI para que facilitar la gestión de LDAP. Eche un vistazo a Trabajar con OpenLDAP para una lista exhaustiva.

Se recomienda a los usuarios interesado leer la Guía de Administración de OpenLDAP.

Y bien.. ¿Para qué se utiliza?
Se puede usar LDAP para diferentes propósitos. En este documento se trata la administración centralizada de usuarios, manteniendo todas las cuentas de usuario en una única ubicación LDAP (lo que no significa que esté albergada en un único servidor, puesto que LDAP ofrece soporte a alta disponibilidad y redundancia). Sin embargo, se puede utilizar LDAP para otros fines.


 * Infraestructura de Clave Pública (PKI)


 * Calendario compartido


 * Libreta de direcciones compartida


 * Almacenamiento para DHCP, DNS, ...


 * Directivas de configuración de clases del sistema (manteniendo el seguimiento de varias configuraciones del servidor)


 * Autenticación centralizada (PosixAccount)



Notas comunes
En esta guía utilizamos como ejemplo el dominio genfic.org. Por supuesto, deberá cambiarlo. Sin embargo, asegúrese de que el nodo superior es un dominio oficial de primer nivel (net, com, cc, be, ...).

En primer lugar haga emerge de OpenLDAP. Asegúrese que se usan los ajustes USE berkdb, crypt, gnutls, ipv6, sasl, ssl, syslog, -minimal' y tcpd.

OpenLDAP supports two authentication mechanisms:
 * 1) standard user-password (in LDAP terms user means binddn) named SIMPLE
 * 2) proxying authentication requests to SASL (Simple Authentication and Security Layer)

Although the OpenLDAP default is to use SASL, the initial version of this article used only password-based authentication. With the OLC add-on the article starts to describe the use of the simplest SASL mechanism called EXTERNAL, which relies on the system authentication.

OpenLDAP tiene un usuario principal llamado "rootdn" (Root Distinguished Name o Nombre Distinguido de Root) el cual está definido dentro de la aplicación. Al contrario que el usuario root clásico de Unix, al usuario rootdn se le deben asignar los permisos adecuados. El usuario rootdn solo se puede utilizar en el contexto de la configuración y también en la definición del directorio. En este caso un usuario puede autenticarse a si mismo como rootdn con la contraseña usada en la configuración y la contraseña (basada en el directorio) del árbol.

La contraseñas de usuario (independientemente si son para usuarios rootdn u otros) para propósitos de verificación se pueden almacenar como testo en claro o aplicando un hash. Se dispone de varios algoritmos hash, sin embargo no se recomienda el uso de algoritmos débiles (hasta MD5). Actualmente en criptografía se considera que SHA es suficientemente seguro.

En la orden de abajo, se crea un valor hash para una contraseña dada, el resultado de esta orden se puede utilizar en el fichero de configuración o bien en la definición del directorio interno de un usuario:

Configuración heredada (configuración básica slapd.conf)
Ahora edite la configuración LDAP del servidor en. El fichero que se muestra es de los fuentes originales de OpenLDAP. Abajo se muestra un fichero ejemplo de configuración que se puede utilizar para reemplazarlo de modo que las cosas comiencen a funcionar.

Para un análisis más detallado del fichero de configuración, le sugerimos que acceda a la guía del administrador de OpenLDAP, aunque la información mostrada con puede ser suficiente.

Si no arranca, lo primero que se debe hacer es comprobar el fichero de configuración. Puede hacer esto utilizando la siguiente orden:

Cambie el nivel de depuración (El "-d 1" de arriba) para obtener más información. Si todo va bien se mostrará config file testing succeeded. Si hay un error,  mostrará el número de línea en la cual está el problema (dentro del fichero ).

Por defecto escribe los eventos de registro a la instalación local4 de syslog.

Migration from slapd.conf to OLC
If you want to be able to change OpenLDAP server's configuration, you must define at least  (or normally  ) access to.

El ejemplo de abajo muestra como conceder acceso de gestión a OLC (base de datos cn=config) al administrador del sistema (usuario root) añadiendo las líneas adecuadas al final del fichero :

Then, we invoke the utility with the   and   options to convert the  file into a configuration directory.

Al lanzar esta orden se transferirá y traducirá la configuración. Después de esto, deberá actualizar la configuración utilizando ficheros ldif especialmente preparados. Si no está familiarizado con el formato de estos ficheros puede editar en primero y después traducir  a. No olvide comprobar los permisos sobre los directorios.

Para más indicaciones lea los comentarios en línea dentro de los ficheros generados.

La línea de abajo habilitará el método de configuración.

Para terminar, cree la estructura :

Initial setup with OLC
An initial configuration is shipped as a standard LDAP database dump, available as or.

It can be loaded (and only loaded, unlike ordinary LDAP databases) by the  utility:

If you need the right to change the configuration database, you must provide the proper permissions. The next example shows how these privileges are granted to the system user:

Leer para obtener más detalles.

When using OLC, never manually edit the configuration files. The directory files can be used to check the consistency of the configuration through:

Mantener el directorio
Start  now that the configuration steps have been completed:

Most users will also want the OpenLDAP daemon to start automatically:

It is now possible to use the directory server to authenticate users in apache/proftpd/qmail/samba.

The directory server can be managed with tools such as, and  from the Gentoo ebuild repository, or  from the poly-c overlay available through layman.

Server management with OLC
Se muestran abajo algunos ejemplos de actualizaciones a la configuración con el estilo OLC.

Por ejemplo, para cambiar la localización del directorio de configuración de OLC (necesario tras cambiar desde un fichero de configuración a un directorio de configuración):

Para cambiar el nivel del registro usado por la instancia OpenLDAP:

Para añadir el overlay syncprov:

Para aplicar los cambios, lance la siguiente orden:

OpenLDAP logging
OpenLDAP produces numerous log events, which might not be obvious to interpret, but are necessary for debugging purposes.

As OpenLDAP by default writes the log events into the system log, it is advisable to reconfigure the system logger to direct OpenLDAP log events into a dedicated log file.

It is advisable to use the  log level in OpenLDAP, which results in session-related information such as the following:

Access management (ACLs)
The authorizations and access control mechanism used in OpenLDAP is described in the manual page. Its base syntax is as follows:

The following table shows the access levels available in OpenLDAP:

For details about the exact privilege settings, see the manual pages and official OpenLDAP documentation.

Config file
ACLs are parsed in the order they are set in the configuration, and are applied based on the specificity (meaning that, when an ACL rule is considered, the remainder of ACL rules is no longer checked). As such, more specific definitions should go first, before more generic ones are listed. For more information, see Access Control Evaluation.

Por ejemplo:

Config directory
ACLs are parsed in the order they are set in the configuration, and are applied based on the specificity (meaning that, when an ACL rule is considered, the remainder of ACL rules is no longer checked). As such, more specific definitions should go first, before more generic ones are listed. This order, when using OLC, is handled through the  directives.

For example:

To insert a new ACL, the following example will add one on top, making the existing  entries to shift by one:

Para eliminar una ACL:

High availability
A common high availability setup with OpenLDAP is to use replication of changes across multiple LDAP systems.

Replication within OpenLDAP is, in this guide, set up using a specific replication account which has read rights on the primary LDAP server and which pulls in changes from the primary LDAP server to the secondary.

Esta configuración entonces se replica permitiendo al servidor LDAP secundario actuar igual que el primario. Gracias a la estructura interna de OpenLDAP, los cambios no se aplican de nuevo si ya están en la estructura LDAP.

Setting up replication
Para configurar la replicación, en primer lugar realice la configuración de un segundo servidor OpenLDAP, del mismo modo que se ha descrito arriba. Sin embargo, tenga cuidado de que, en el fichero de configuración:


 * El proveedor de la sincronización de la replicación apunta al otro sistema


 * El serverID de cada sistema OpenLDAP es diferente

A continuación, cree la cuenta de sincronización. Crearemos un fichero LDIF (el formato utilizado como entrada de datos para los servidores LDAP) y lo añadiremos a cada servidor LDAP:

Configurar las herramientas cliente de OpenLDAP
Edite el fichero de configuración del cliente LDAP. Este fichero lo lee ldapsearch y otras herramientas de línea de órdenes ldap.

Puede comprobar si el servidor está corriendo con la siguiente orden:

Si obtiene un error, intente añadir  para incrementar el nivel de información mostrada y solucionar el problema que tenga.

Configuración del cliente para autenticación centralizada
Existen varios métodos y herramientas que se pueden utilizar para realizar una autenticación remota. Algunas distribuciones incluso disponen de su propia herramienta de configuración de fácil uso. Abajo se muestran algunas (el orden no es importante). Es posible combinar a la vez usuarios locales y cuentas autorizadas centralmente. Estos es importante ya que, por ejemplo, si el servidor LDAP no es accesible, todavía se podrá acceder como root.


 * SSSD (Single Sign-on Services Daemon o Demonio para Servicios de Acceso Sencillo). Su principal función es ofrecer acceso a recursos remotos de identidad y autenticación a través de un marco de trabajo común que puede ofrecer caché y soporte fuera de línea al sistema. Ofrece módulos PAM y NSS. Además, en el futuro, ofrecerá soporte para interfaces D-Bus para información extendida de usuario. También ofrece una base de datos mejorada para almacenar usuarios locales así como datos de usuario extendidos.


 * Utilizar  para acceder al servidor LDAP y autenticarse. Las contraseñas no se envían por la red en texto claro.


 * NSLCD (Name Service Look up Daemon o Demonio de Consulta al Servicio de Nombres). Similar a SSSD pero más antiguo.


 * NSS (Name Service Switch o Conmutador de Nombres de Servicio) usando el módulo tradicional  para obtener los hash de las contraseñas a través de la red. Para permitir que los usuarios actualicen sus contraseñas, este servicio se debe combinar con el método.

Los dos primeros métodos se muestran abajo con las opciones de configuración mínimas para que funcionen.

El método de configuración del cliente PAM con SSSD
Este es el método más directo. Los tres ficheros que se necesitan editar se muestran abajo.

Añada sss al final tal y como se muestra abajo para permitir que la búsqueda la gestione el servicio de sistema sssd. Una vez haya terminado de editar, arranque el demonio sssd.

El último fichero es el más crítico. Abra otro terminal de root como respaldo antes de editarlo. Se han añadido las líneas que acaban en code># para permitir la autenticación remota. Observe el uso de para poder crear los directorios de inicio de los usuarios.

Ahora intente acceder desde otro equipo.

El método de configuración del cliente PAM con el módulo pam_ldap
En primer lugar configuraremos PAM para permitir la autorización LDAP. Instale de modo que PAM ofrezca soporte para la autorización LDAP y  de modo que su sistema pueda trabajar con servidores LDAP para información adicional (usado por ).

El último fichero es el más crítico. Abra algunos terminales de root como respaldo antes de editarlo. Se han añadido las líneas que terminan en  para permitir la autenticación remota.

Ahora cambie para que contenga:

A continuación, copie el fichero (OpenLDAP) desde el servidor al cliente de modo que lo clientes conozcan el entorno LDAP:

Por último configure sus cliente de modo que puedan comprobar el LDAP para las cuentas del sistema:

Si ha observado que alguna de las líneas que pegó en su se ha comentado (la línea  ), no se preocupe, no la necesita a no ser que quiera cambiar la contraseña de un usuario como superusuario. En este caso necesita volcar la contraseña de root a en texto claro. Esto es PELIGROSO y se debe usar chmod para cambiar el acceso a 600. Lo que debería hacer es dejar ese fichero vacía y cuando necesite cambiar la contraseña de algún usuario que está en el LDAP y en, escriba la clave allí y déjela unos diez segundos mientras cambia la contraseña del usuario y elimínela una vez haya terminado.

Convert file userbase to LDAP
Configurar OpenLDAP para su administración centralizada y la gestión de elementos Linux/Unix comunes, no es fácil. Gracias a algunas herramientas y guiones disponibles en Internet, la migración desde un punto de vista de un sistema de administración simple a un sistema centralizado y gestionado basado en OpenLDAP no es muy complicado.

Vaya a http://www.padl.com/OSS/MigrationTools.html y obtenga los guiones. Necesitará las herramientas de migración y el guión.

Ahora extraiga y copie el guión dentro de la la localización extraída:

El siguiente paso es migrar la información de su sistema a OpenLDAP. Esto se realiza con el guión una vez le haya proporcionado la información referente a la relacionada con su estructura y entorno LDAP.

En el momento de escribir este documento, las herramientas necesarias requieren las siguientes entradas:

La herramienta también le preguntará qué cuentas y ajustes desea migrar.

Agradecimientos
We would like to thank Matt Heler for lending us his box for the purpose of this guide. Thanks also go to the cool guys in on Freenode.net