Hoy una entrada rápida sobre como configurar el acceso a la rama cn=config para poder realizar configuraciones dinámicas de versiones modernas de OpenLDAP.
Desde OpenLDAP versión 2.3 se puede establecer la configuración de nuestro servicio slapd de forma dinámica, a diferencia de versiones anteriores donde era neceasario que editaramos el fichero slapd.conf y reiniciaramos el servidor. Este cambio es muy importante, ya que nos permitirá modificar la configuración de nuestro servidor OpenLDAP sin afectar a nuestros servicios.
¿En que consiste la configuración dinámica de OpenLDAP? pues básicamente y de forma predeterminada, el demonio slapd dispone de un árbol que contiene la configuración del servicio, siendo la raíz de este árbol cn=config, con lo que podremos cambiar la configuración dinámicamente con solo acceder a dicho árbol.
Por defecto, la forma de acceder al árbol de configuración está restringida a la consola del servidor, con el usuario root y usando las herramientas estándar de openldap, como ldapsearch y ldapmodify, es decir, no podemos conectarnos con herramientas como ldapbrowser o Apache Directory Studio. ¿Como podemos comprobar si es así? Nada más instalar nuestro servidor Openldap, solo tenemos que ejecutar un comando como el siguiente y buscar la sección donde se define la base de datos de configuración:
Mostramos la rama cn=config. |
Sección de configuración de acceso a la rama cn=config. |
Como se ve en la imagen anterior, solo el usuario con uidnumber y gidnumber igual a cero, en principio solamente el usuario root, será capaz de acceder a dicho árbol.
Para simplificarnos un poco la vida, lo que tenemos que hacer es añadir un usuario a dicha rama, identificado como olcRootDN con su password correspondiente. Basta con que hagamos un fichero ldif tan sencillo como el siguiente y lo carguemos con el comando ldapadd:
Fichero ldif para añadir un usuario administrador a la rama cn=config. |
El atributo olcRootPW contiene la password encriptada de nuestro usuario, la cual habremos generado con el comando slappassd:
Generando una password enciptada con slappasswd. |
Ahora solo nos falta cargar el ldif anterior con el comando ldapadd:
Aplicamos el fichero ldif a la rama cn=config. |
Tras esto ya podemos conectarnos con nuestra herramienta preferida y configurar el servidor de forma dinámica:
Conexión a la rama cn=config del servidor OpenLDAP. |
Por ejemplo, podemos cambiar la configuración del nivel de logging de OpenLDAP de froma dinámica con solo modificar el raíz de la rama de configuración, ya que en ese caso estamos modificando la configuración del propio servidor OpenLDAP. Si queremos aumentar el nivel de log solo tenemos que añadir el atributo olcLogLevel y especificar el nivel de log que queremos:
Modificación del nivel de log del servidor. |
Es importante recordar que en versiones anteriores y con la configuración estática, era necesario modificar el fichero de configuración slapd.conf del servidor OpenLDAP y reiniciar el servicio. Con esta configuración dinámica, al aplicar el cambio no será necesario reiniciar el servidor. Por cierto, OpenLDAP siempre usa la facility LOCAL4 de syslog, con lo que probablemente será necesario cambiar la configuración de syslog/rsyslog/syslog-ng para que se registren los mensajes de dicha fuente.
Una vez hecho esto, podemos pasar a configurar nuestro nuevo árbol de directorio o utilizar el que se crea por defecto con la instalación de OpenLDAP. En concreto, la configuración de nuevas bases de datos se realiza directamente desde la rama de configuración añadiendo objetos de la clase olcDatabaseConfig como podemos ver en la base de datos por defecto:
Base de datos incluida con OpenLDAP. |
Como vemos en la configuración, para nuestro árbol de directorio es necesario que defininamos un objeto con las siguientes clases de objeto:
- olcDatabaseConfig, que especifica que estamos definiendo la configuración de una base de datos.
- olcHDBConfig, para especificar que el backend de base de datos a utilizar será el tipo HDB.
Por tanto, podemos crear una nueva entrada de base de datos de una manera similar a la siguiente:
Definición de nueva base de datos. |
Con los valores anteriores crearíamos una nueva base de datos para un nuevo árbol de directorio cuya raíz sería dc=lab,dc=int, donde fijamos determinados índices sobre ciertos atributos que vamos a utilizar y además establecemos ciertos parámetros de configuración adicionales. Lo importante es que comprobemos que podemos realizar la configuración de una nueva base de datos completa de forma totalmente dinámica.
Por tanto, ya tenemos una nueva base datos, pero está vacía y necesitamos, al menos, crear el objeto raíz de dicha base de datos. Para esto, basta de nuevo con que hagamos un fichero ldif similar al siguiente:
Fichero ldif definiendo la raíz del árbol de directorio. |
Ahora solo necesitamos cargar esta nueva netrada usando el comando ldapadd y ya podremos comenzar a trabajar en la estructura del nuevo árbol de directorio. Porejmplo, ya podremos crear las estructuras organizativas que necesitemos, como por ejemplo algo como lo siguiente:
Una estructura básica para un servicio de directorio. |
Por último, vamos a asegurar la base de datos que contiene el árbol de directorio por defecto incluido con la instalación de OpenLDAP. Para esto solo es necesario que borremos el atributo olcRootDN del objeto definido en la rama config para asegurar que no se podrá acceder a dicho árbol de directorio de ninguna manera.