OpenLDAP en GNU/Linux
Introducción
OpenLDAP es una implementación de código abierto del protocolo LDAP. Es ampliamente utilizado en entornos Linux/UNIX para proporcionar servicios de directorio centralizados.
OpenLDAP es especialmente útil para redes heterogéneas y entornos que requieren flexibilidad y personalización.
Requisitos Previos
Sistema
Xubuntu o Ubuntu Server
Mínimo 1GB RAM
10GB espacio en disco
Conexión a Internet
Configuración de Red
IP estática recomendada (ejemplo):
# En /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
enp0s3:
addresses: [10.0.2.43/24]
gateway4: 10.0.2.1
nameservers:
addresses: [127.0.0.1, 1.1.1.1]
Instalación de slapd
Instalación Inicial
Instalar slapd
Durante la instalación :
Se solicitará contraseña del administrador LDAP
Usar: admin1s0
Verificar instalación
sudo systemctl status slapd
slapd = Stand-Alone LDAP Daemon (servidor OpenLDAP)
Reconfiguración de slapd
La configuración inicial es básica. Necesitamos reconfigurarla para nuestras necesidades.
Ejecutar reconfiguración
sudo dpkg-reconfigure slapd
Omitir configuración
¿Omitir la configuración del servidor OpenLDAP? No
Nombre de dominio DNS
Introducir: valencia.iso.com Esto creará el DN base: dc=valencia,dc=iso,dc=com
Nombre de la organización
Introducir: iso
Contraseña de administrador
Confirmar o cambiar: admin1s0
Motor de base de datos
Seleccionar: HDB (o MDB en versiones recientes)
Eliminar base de datos
¿Eliminar la base de datos al purgar slapd? No (Permite recuperación ante desastres)
Mover base de datos antigua
¿Mover base de datos antigua? Sí
Verificar Configuración
# Ver configuración
sudo slapcat
# O buscar en configuración
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
Instalación de phpLDAPadmin
Herramienta web para administrar LDAP gráficamente.
Instalación
Instalar phpldapadmin
sudo apt install phpldapadmin
Instalará automáticamente:
Apache2 (servidor web)
PHP y módulos necesarios
Dependencias
Verificar instalación
Abrir navegador: http://localhost/phpldapadmin/
Configurar phpLDAPadmin
Editar archivo de configuración:
sudo mousepad /etc/phpldapadmin/config.php
Buscar y modificar:
Servidor LDAP
DN de Login
Ocultar avisos
// Línea ~300
$servers -> setValue ( 'server' , 'host' , '127.0.0.1' );
$servers -> setValue ( 'server' , 'port' , 389 );
$servers -> setValue ( 'server' , 'base' , array ( 'dc=valencia,dc=iso,dc=com' ));
Reiniciar Apache:
sudo systemctl restart apache2
Acceder a phpLDAPadmin
Abrir navegador
http://localhost/phpldapadmin/
Iniciar sesión
DN : cn=admin,dc=valencia,dc=iso,dc=com
Contraseña : admin1s0
Crear Estructura LDAP
Estructura Objetivo
dc=valencia,dc=iso,dc=com
ou=esbirros
cn=esbirrosldap (grupo POSIX)
uid=esbirroldap01 (usuario)
uid=esbirroldap02 (usuario)
Crear Unidad Organizativa (OU)
En phpLDAPadmin
Click en dc=valencia,dc=iso,dc=com
Click en “Crear una entrada hija aquí”
Seleccionar plantilla
Plantilla: Unidad Organizativa Genérica
Configurar OU
ou : esbirros
Confirmar creación
Crear Grupo POSIX
Crear entrada hija
Click en ou=esbirros
“Crear una entrada hija aquí”
Seleccionar plantilla
Plantilla: Grupo POSIX Genérico
Configurar grupo
cn : esbirrosldap
gidNumber : 10000
Confirmar
Crear Usuario
Crear entrada hija
Click en cn=esbirrosldap
“Crear una entrada hija aquí”
Seleccionar plantilla
Plantilla: Cuenta de Usuario Genérica
Configurar usuario
cn : esbirroldap01
givenName : Esbirro
sn : LDAP Uno
uid : esbirroldap01
uidNumber : 10001
gidNumber : 10000
homeDirectory : /home/esbirroldap01
loginShell : /bin/bash
userPassword : Establecer contraseña (ejemplo: esbirro123)
Confirmar
Confirmar creación
uidNumber y gidNumber son los equivalentes a los IDs numéricos de usuario y grupo en sistemas UNIX/Linux.
Herramientas de Línea de Comandos
Instalación de ldap-utils
sudo apt install ldap-utils
Proporciona herramientas como:
ldapsearch - Buscar entradas
ldapadd - Añadir entradas
ldapmodify - Modificar entradas
ldapdelete - Eliminar entradas
ldapsearch - Buscar Entradas
Buscar Todo
Buscar Usuario
Buscar con Autenticación
Filtros Avanzados
# Buscar todo en el directorio
ldapsearch -x -h localhost -p 389 -b "dc=valencia,dc=iso,dc=com"
Parámetros de ldapsearch
Parámetro Descripción -xAutenticación simple (sin SASL) -hHost del servidor LDAP -pPuerto (389 por defecto) -bBase de búsqueda (DN base) -DDN para autenticarse -WSolicitar contraseña interactivamente -wContraseña en línea de comandos (inseguro)
ldapadd - Añadir Entradas
Crear archivo LDIF:
# nuevo_usuario.ldif
dn: uid=esbirroldap02,cn=esbirrosldap,ou=esbirros,dc=valencia,dc=iso,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
cn: esbirroldap02
givenName: Esbirro
sn: LDAP Dos
uid: esbirroldap02
uidNumber: 10002
gidNumber: 10000
homeDirectory: /home/esbirroldap02
loginShell: /bin/bash
userPassword: esbirro456
Añadir al directorio:
ldapadd -x -D "cn=admin,dc=valencia,dc=iso,dc=com" \
-W -f nuevo_usuario.ldif
ldapmodify - Modificar Entradas
Crear archivo LDIF con cambios:
# modificar_usuario.ldif
dn: uid=esbirroldap01,cn=esbirrosldap,ou=esbirros,dc=valencia,dc=iso,dc=com
changetype: modify
replace: loginShell
loginShell: /bin/zsh
-
add: mail
mail: [email protected]
Aplicar cambios:
ldapmodify -x -D "cn=admin,dc=valencia,dc=iso,dc=com" \
-W -f modificar_usuario.ldif
ldapdelete - Eliminar Entradas
# Eliminar usuario
ldapdelete -x -D "cn=admin,dc=valencia,dc=iso,dc=com" -W \
"uid=esbirroldap02,cn=esbirrosldap,ou=esbirros,dc=valencia,dc=iso,dc=com"
Precaución : ldapdelete no pide confirmación. La eliminación es inmediata.
Integración con Sistema Linux
Configurar NSS y PAM
Para que el sistema Linux use LDAP para autenticación:
Instalar paquetes
sudo apt install libnss-ldap libpam-ldap ldap-utils
Configurar durante instalación
URI: ldap://localhost/
DN base: dc=valencia,dc=iso,dc=com
Versión LDAP: 3
Admin: cn=admin,dc=valencia,dc=iso,dc=com
Contraseña: admin1s0
Configurar NSS
Editar /etc/nsswitch.conf: passwd: files ldap
group: files ldap
shadow: files ldap
Configurar PAM
Activar:
☑ LDAP Authentication
☑ Create home directory on login
Reiniciar servicios
sudo systemctl restart nscd
Verificar Integración
# Ver usuarios LDAP
getent passwd | grep ldap
# Ver grupos LDAP
getent group | grep ldap
# Probar autenticación
su - esbirroldap01
Copias de Seguridad de LDAP
Exportar Base de Datos
Exportar Todo (LDIF)
Exportar Subtree
Exportar con ldapsearch
# Exportar toda la base de datos
sudo slapcat -v -l backup_ldap.ldif
Importar/Restaurar
Detener slapd
sudo systemctl stop slapd
Importar datos
sudo slapadd -v -l backup_ldap.ldif
Corregir permisos
sudo chown -R openldap:openldap /var/lib/ldap
Iniciar slapd
sudo systemctl start slapd
Seguridad
Configurar TLS/SSL
Para cifrar comunicaciones LDAP:
Generar certificados
sudo apt install gnutls-bin ssl-cert
sudo sh -c "certtool --generate-privkey > /etc/ssl/private/cakey.pem"
Configurar slapd para TLS
Editar configuración (requiere conocimientos avanzados)
La configuración completa de TLS/SSL se verá en el módulo de ASO.
ACLs (Listas de Control de Acceso)
Controlar quién puede leer/escribir qué:
# Ejemplo de ACL
olcAccess: to attrs=userPassword
by self write
by anonymous auth
by * none
Monitorización
Ver Logs
# Ver logs de slapd
sudo journalctl -u slapd -f
# O en syslog
sudo tail -f /var/log/syslog | grep slapd
Estadísticas
# Ver estadísticas del servidor
ldapsearch -x -b "cn=Monitor" -s base
Recursos Adicionales
Teoría LDAP Conceptos teóricos sobre LDAP
Tareas Prácticas Ejercicios de configuración de OpenLDAP
Importante : OpenLDAP requiere conocimientos sólidos de Linux. La configuración avanzada (replicación, alta disponibilidad) se verá en ASO.