Cuando trabajamos en una organización donde debemos gestionar las identidades (autenticiación) y los permisos que éstos deben tener (autorización) hemos de implementar mecanismos que nos permitan centralizar esta información de manera segura, robusta y accesible.
El primer pensamiento cuando tenemos que implementar este tipo de soluciones es Active Directory de Microsoft pero existen otro tipos de soluciones que nos permiten implementar autenticación centralizada Open Source. Hoy vamos a hablar de OpenLDAP y cómo montar un directorio para que nuestras usuarias y usuario puedan hacer login desde sus estaciones de trabajo Linux.
Prerequisitos
Para hacer el despliegue de esta arquitectura necesitaremos :
- Servidor Ubuntu 24.04 LTS
- Estación de trabajo Ubuntu Desktop 25.10
Instalación del servidor
Instalación del software
Haremos una instalación del servidor. una vez acabada, procederemos a actualizar los paquetes para que todo el software y el kernel estén en la última versión disponible.
sudo apt update
sudo apt upgrade -y
Después del reinicio de rigor, procedemos a instalar el servidor OpenLDAP y el paquete de utilidades :
sudo apt install slapd ldap-utils -y
Durante el proceso de instalación se nos pedirá una contraseña admin LDAP. Indicaremos la contraseña que queremos usar.
En algunas versiones puede que nos pida más parámetros pero en la que yo uso, Ubuntu 24.04 LTS tendremos que reconfigurar el servicio con :
sudo dpkg-reconfigure slapd
Lo primero que nos preguntará es si queremos omitir la configuración. Le diremos que no.

Lo siguiente será el dominio. Indicaremos el nombre del hostname. De acuerdo a la información que indica se usará para crear el DN.

Definiremos el nombre de la organización. Este nombre determinará la raíz del directorio.

Definiremos de nuevo la contraseña del administrador

Cuando nos pregunte si hay que borrar la base de datos LDAP cada vez que se purga slapd dindicaremos que no.

Comprobación del directorio
Para comprobar que el directorio está funcionando con nuestro DN ejecutaremos :
ldapsearch -x -LLL -H ldap://localhost -b dc=ubunturista,dc=local
El output de este comando debería ser algo similar a lo que se muestra :

Creación de las ramas y objetos del directorio
Necesitaremos crear una serie de archivos que contendrán los diferentes objetos y ramas del directorio que vamos a usar.
El comando que usaremos para cargar cada archivos será :
ldapadd -x -D cn=admin,dc=ubunturista,dc=local -W -f [ARCHIVO¯
donde -D es el DN del usuario administrador que se ha creado al instalar el servicio y [ARCHIVO] será cada uno de los archivos que vamos a ir creando.
Ramas principales : usuarios, grupos y roles
El archivo que contendrá la estructura básica de nuestro directorio lo llamaremos base.ldif y tendrá el siguiente contenido :
dn: ou=users,dc=ubunturista,dc=local
objectClass: organizationalUnit
ou: users
dn: ou=groups,dc=ubunturista,dc=local
objectClass: organizationalUnit
ou: groups
dn: ou=roles,dc=ubunturista,dc=local
objectClass: organizationalUnit
ou: roles
Lo cargaremos en el directorio ejecutando :
ldapadd -x -D cn=admin,dc=ubunturista,dc=local -W -f base.ldif
Creación de los roles
En linux no existen los roles como en otros sistemas sino que se basan en grupos. Vamos a crear los roles como objetos posixGroup. En esta instalación vamos a definir tres roles :
- role-admin
- role-user
- role-auditor
Definimos el fichero roles.ldif y añadiremos :
dn: cn=role-admin,ou=roles,dc=ubunturista,dc=local
objectClass: posixGroup
cn: role-admin
gidNumber: 5000
dn: cn=role-user,ou=roles,dc=ubunturista,dc=local
objectClass: posixGroup
cn: role-user
gidNumber: 5001
dn: cn=role-auditor,ou=roles,dc=ubunturista,dc=local
objectClass: posixGroup
cn: role-auditor
gidNumber: 5002
Cargaremos el archivo en el directorio con :
ldapadd -x -D cn=admin,dc=ubunturista,dc=local -W -f roles.ldif
Crear usuarios en el directorio
Antes de crear los usuarios necesitamos entender cómo funciona la gestión de las contraseñas en este punto de la configuración.
La contraseña se carga como un hash en el directorio. Vamos a usar SHA para generar el hash de la contraseña de nuestros usuarios. Y este hash luego se adjuntará en el archivo ldif que cargaremos en el directorio.
El comando que nos permite convertir en un hash listo para usar en un archivo ldif es :
slappasswd
Generaremos una contraseña para cada uno de los usuarios que vamos a definir y en el atributi userPassword pegaremos lo que nos ha dado directamente slappasswd.
dn: uid=luna,ou=users,dc=ubunturista,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: Luna Lovegood
sn: Lovegood
uid: juan
uidNumber: 10000
gidNumber: 5001
homeDirectory: /home/luna
loginShell: /bin/bash
userPassword: {SSHA}HASH_GENERADO
dn: uid=hermione,ou=users,dc=ubunturista,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: Hermione Granger
sn: Granger
uid: ana
uidNumber: 10001
gidNumber: 5002
homeDirectory: /home/hermione
loginShell: /bin/bash
userPassword: {SSHA}HASH_GENERADO
dn: uid=minerva,ou=users,dc=ubunturista,dc=local
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: Minerva McGonagall
sn: McGonagall
uid: ana
uidNumber: 10001
gidNumber: 5002
homeDirectory: /home/hermione
loginShell: /bin/bash
userPassword: {SSHA}HASH_GENERADO
Añadiremos los usuarios al directorio ejecutando :
ldapadd -x -D cn=admin,dc=ubunturista,dc=local -W -f users.ldif
Asignar usuarios a roles
Crearemos el archivo roles_usuarios.ldif en el que mapearemos qué usuarios están asociados a qué roles con el contenido :
dn: cn=role-user,ou=roles,dc=ubunturista,dc=local
changetype: modify
add: memberUid
memberUid: harry
dn: cn=role-auditor,ou=roles,dc=ubunturista,dc=local
changetype: modify
add: memberUid
memberUid: hermione
dn: cn=role-admin,ou=roles,dc=ubunturista,dc=local
changetype: modify
add: memberUid
memberUid: minerva
Cargaremos el archivo en el directorio con :
ldapadd -x -D cn=admin,dc=ubunturista,dc=local -W -f role_usuarios.ldif
Instalación de phpLDAPAdmin
Para instalar phpLDAPAdmin ejecutaremos :
sudo apt install phpldapadmin apache2 php -y
Una vez instalador editaremos el archivo /etc/phpldapadmin/config.php y buscaremos las directivas $servers y las dejaremos configuradas como se indica :
$servers->setValue('server','host','127.0.0.1');
$servers->setValue('server','base',array('dc=ubunturista,dc=local'));
Guardamos, salimos de la edición del archivo y ya nos podemos conectar por web a la URL http://IP_SERVIDOR/phpldapadmin
El usuario que tendremos que indicar para conectarnos es cn=admin,dc=ubunturista,dc=local.
Instalación y configuración del lado cliente
Instalación de paquetes
Instalaremos los paquetes necesarios en la estación de trabajo para que podamos configurar la autenticación por LDAP :
sudo apt install libnss-ldap libpam-ldap ldap-utils nscd -y
A medida que nos vaya preguntando indicaremos :
- URI:
ldap://192.168.56.10 - Base:
dc=ubunturista,dc=local - LDAP versión: 3
- Make local root Database admin: YES
Configurar NSS
Editaremos el archivo /etc/nsswitch.conf e indicaremos dónde se deben intenatr hacer las valdiaciones. En nuestro caso quedarán como :
passwd: files ldap
group: files ldap
shadow: files ldap
De esta manera, cuando vayamos a hacer login primero comprobará en los archivos locales y a continuación en LDAP. Así garantizamos que si no tenemos acceso al ser vidor LDAP almenos podremos hacer login con un usuario local.
Creación del home automáticamente
Cuando un usuario haga login por primera vez se creará su carpeta personal. Editaremos el archivo /etc/pam.d/common-session y añadiremos al final :
session optional pam_mkhomedir.so skel=/etc/skel umask=077
sudo y LDAP
Crearemos el archivo /etc/ldap/ldap_sudo y añadiremos :
%role-admin ALL=(ALL) ALL
Comprobaciones
Desde una consola podremos preguntarle que nos devuelva información de un usuario con los comandos :
getent passwd hermione
getent group role-user
Si queremos convertirnos en un usuario ejecutaremos :
su - luna

Podremos ver logs relacionados con el servicio de validación respecto al ldap ejecutando :
journalctl -xe | grep ldap
Este documento va a ir evolucionando para incluir mejoras en cuanto a la seguridad, la eficiencia y la robustez. Si quieres recibir un correo cuando se actualice ¡regístrate en la lista de Ubunturista!