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
.