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.

El paquete OpenLDAP no provee un script de inicio para System V, con lo cual decidí optar por modificar el script de inicio desarrollado y mantenido por el proyecto LTB. Este script es robusto y está muy bien implementado, incluso posee opciones para resguardar y restaurar la configuración del servidor LDAP. Sin embargo, está orientado a una instalación tradicional de OpenLDAP utilizando BerkeleyDB como backend. Incluso posee opciones para generar backups de la base de datos.

El script original slapd se encuentra hospedado en el siguiente repositorio en GitHub:

Partiendo de este script como base, decidí eliminar todas las variables, funciones y secciones de código relacionadas con BerkeleyDB. Además de ajustar las variables de configuración de acuerdo a mi instalación de OpenLDAP. El resultado es el siguiente script de inicio System V:

Manos a la obra

Veamos cómo instalar el script de inicio.

Para comenzar, descargar una copia del script:

# cd /usr/local/etc/openldap/
# wget https://raw.githubusercontent.com/linuxitux/scripts/master/Devuan/init/slapd-postgres
# mv slapd-postgres slapd

Luego, revisar la configuración de todas las variables (especialmente aquellas que comiencen con SLAP*):

# nano slapd

O mejor, crear el archivo /etc/default/slapd y establecer los valores definitivos allí.

A continuación, instalar el script:

# ln -s /usr/local/etc/openldap/slapd /etc/init.d/slapd
# update-rc.d slapd defaults

El siguiente paso consiste en crear un usuario específico para el demonio slapd, por ejemplo "ldap":

# useradd -s /bin/bash ldap
# mkdir /home/ldap
# chown -R ldap:ldap /home/ldap

Establecer correctamente los permisos para el directorio de configuración de OpenLDAP:

# chown -R ldap:ldap /usr/local/etc/openldap

Crear un directorio donde guardar el PID de slapd:

# cd /usr/local/var/run/
# mkdir openldap
# chown ldap:ldap openldap/

Actualizar la configuración de slapd para que se guarde el PID en un archivo dentro de dicho directorio:

# nano /usr/local/etc/openldap/slapd.conf

Se deben revisar, y si es necesario modificar, las variables pidfile y argsfile:

pidfile         /usr/local/var/run/openldap/slapd.pid
argsfile        /usr/local/var/run/openldap/slapd.args

En este punto es posible verificar el funcionamiento del servicio:

root@devuan1:~# service slapd
slapd: [INFO] Using built-in configuration - this may cause some problems
Usage: /etc/init.d/slapd {start|stop|forcestop|restart|debug|force-reload|status|configtest|backupconfig|restoreconfig}

Se observa que el script avisa que se está utilizando la configuración embebida en el script, lo cual puede traer problemas. Lo más prolijo para el caso es configurar todas las variables dentro del archivo /etc/default/slapd.

Para iniciar slapd ejecutar el comando "start":

root@devuan1:~# service slapd start
slapd: [INFO] Using built-in configuration - this may cause some problems
slapd: [INFO] Launching OpenLDAP configuration test...
slapd: [OK] OpenLDAP configuration test successful
slapd: [INFO] Launching OpenLDAP...
slapd: [OK] File descriptor limit set to 2048
slapd: [OK] OpenLDAP started

La salida del script es bastante verbosa, lo cual se agradece ya que ayuda a detectar y diagnosticar problemas.

Se puede consultar el estado del servicio con el comando "status":

root@devuan1:~# service slapd status
slapd: [INFO] Using built-in configuration - this may cause some problems
slapd: [INFO] LDAP Tool Box OpenLDAP init script version 2.2
slapd: [INFO] Process OpenLDAP is running (PID 2606)
slapd: [INFO] Listening to services ldap://*:389 ldaps://*:636
slapd: [INFO] Process usage:  1.8% CPU /  0.7% MEM

Para comprobar que el demonio efectivamente está corriendo, consultar el PID en la salida de "status" utilizando ps:

root@devuan:~# ps -uww 2606
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
ldap      2606  0.8  0.7  55140  7492 ?        Ssl  10:33   0:00 /usr/local/libexec/slapd -h ldap://*:389 ldaps://*:636 -f /usr/local/etc/openldap/slapd.conf -u ldap -g ldap -l local4

Se observa que el proceso corre a nombre del usuario "ldap" en lugar de root. Esto ayuda a mejorar la seguridad del sistema, ya que si se compromete el servidor LDAP, se logra acceso sólo como usuario no privilegiado. En general se debe implementar esta configuración para todos los servicios corriendo en un servidor.

Adicionalmente, verificar que los puertos de LDAP estén abiertos y el demonio slapd esté aceptando peticiones:

root@devuan1:~# netstat -tulpn | grep slapd
tcp        0      0 0.0.0.0:636             0.0.0.0:*               LISTEN      2606/slapd
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      2606/slapd

Si se desea reiniciar el demonio, ejecutar "restart":

root@devuan1:~# service slapd restart
slapd: [INFO] Using built-in configuration - this may cause some problems
slapd: [INFO] Launching OpenLDAP configuration test...
slapd: [OK] OpenLDAP configuration test successful
slapd: [INFO] Halting OpenLDAP...
slapd: [OK] OpenLDAP stopped after 1 seconds
slapd: [INFO] Launching OpenLDAP...
slapd: [OK] File descriptor limit set to 2048
slapd: [OK] OpenLDAP started

Finalmente, para detener el servicio ejecutar "stop":

root@devuan1:~# service slapd stop
slapd: [INFO] Using built-in configuration - this may cause some problems
slapd: [INFO] Halting OpenLDAP...
slapd: [OK] OpenLDAP stopped after 1 seconds

El servicio incluye otros comandos para testear la configuración, forzar la detención de los servicios de LDAP, y resguardar y recuperar la configuración de slapd.


Tal vez pueda interesarte


Compartí este artículo