Servicio de directorio con OpenLDAP
Introducción
LDAP (Lightweight Directory Access Protocol) es un protocolo estándar para acceder y mantener servicios de directorio distribuidos. OpenLDAP es la implementación libre más extendida en Linux. Un directorio LDAP almacena información sobre usuarios, grupos y recursos de forma jerárquica, y es la base de muchos sistemas de autenticación centralizada en entornos empresariales.
Conceptos clave
- DN (Distinguished Name) → identificador único de una entrada:
cn=juan,ou=users,dc=ejemplo,dc=com - dc → componente de dominio (domain component)
- ou → unidad organizativa (organizational unit)
- cn → nombre común (common name)
- objectClass → define qué atributos puede o debe tener una entrada
- LDIF → formato de texto para importar y exportar entradas del directorio
Instalación
# apt install slapd ldap-utils # Debian/Ubuntu
# dnf install openldap-servers openldap-clients # RHEL/Rocky
En Debian/Ubuntu el instalador pide la contraseña del administrador LDAP. Para reconfigurar:
# dpkg-reconfigure slapd
$ systemctl status slapd
$ ss -tlnp | grep 389 # puerto LDAP estándar
Estructura del directorio
dc=ejemplo,dc=com
├── ou=users
│ ├── cn=juan
│ └── cn=maria
└── ou=groups
└── cn=admins
Operaciones con LDIF
Añadir una unidad organizativa:
# ou_users.ldif
dn: ou=users,dc=ejemplo,dc=com
objectClass: organizationalUnit
ou: users
Añadir un usuario:
# usuario_juan.ldif
dn: cn=juan,ou=users,dc=ejemplo,dc=com
objectClass: inetOrgPerson
cn: juan
sn: García
mail: juan@ejemplo.com
userPassword: {SSHA}contraseñahash
Importar con ldapadd:
$ ldapadd -x -D "cn=admin,dc=ejemplo,dc=com" -W -f ou_users.ldif
$ ldapadd -x -D "cn=admin,dc=ejemplo,dc=com" -W -f usuario_juan.ldif
-x→ autenticación simple-D→ DN del administrador-W→ solicitar contraseña de forma interactiva-f→ fichero LDIF a importar
Búsquedas con ldapsearch
$ ldapsearch -x -b "dc=ejemplo,dc=com" # toda la base
$ ldapsearch -x -b "ou=users,dc=ejemplo,dc=com" "(cn=juan)" # usuario concreto
$ ldapsearch -x -b "dc=ejemplo,dc=com" "(objectClass=inetOrgPerson)"
Modificar y eliminar entradas
# cambio.ldif
dn: cn=juan,ou=users,dc=ejemplo,dc=com
changetype: modify
replace: mail
mail: juan.garcia@ejemplo.com
$ ldapmodify -x -D "cn=admin,dc=ejemplo,dc=com" -W -f cambio.ldif
$ ldapdelete -x -D "cn=admin,dc=ejemplo,dc=com" -W "cn=juan,ou=users,dc=ejemplo,dc=com"
Generar hash de contraseña
$ slappasswd # genera un hash SSHA interactivamente
$ slappasswd -s micontraseña # genera el hash directamente