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
          

OpenLDAP es la base de muchos sistemas de autenticación centralizada en entornos Linux, frecuentemente combinado con PAM y NSS para que los usuarios del directorio puedan iniciar sesión en los equipos.

Compartición de archivos con Samba

Índice de la sección

Índice del curso