¿Qué es OpenLDAP?
OpenLDAP es una implementación de código abierto del protocolo LDAP (Lightweight Directory Access Protocol).
Se utiliza para almacenar y organizar información en un directorio jerárquico, comúnmente para la autenticación de usuarios y la gestión de recursos en redes, como en sistemas de inicio de sesión centralizado y servidores de correo, similar al Active Directory de Windows Server.
Objetivo:
Realizar la instalación y configuración básica de OpenLDAP en Thor, utilizando como base el nombre DNS asignado. Se deberá crear un usuario llamado prueba y configurar una máquina cliente basada en Ubuntu y Rocky para que pueda validarse en servidor ldap configurado anteriormente con el usuario prueba.
Requisitos Previos:
Para este artículo, he usado el escenario de OpenStack utilizando a Thor como servidor, y a Loki y Hela como clientes, usando el usuario “prueba”. Para que funcione hay que dejar bien configurado el FQDN de cada máquina (si fuera otro escenario) pero en OpenStack ya se configuró en otras practicas.
-
Thor y Loki son contenedores Ubuntu. Thor hará de servidor.
-
Hela es una máquina basada en Rocky Linux.
Empezamos:
Servidor Thor (Ubuntu):
El primer paso es ir a la máquina thor e instalar ldap:
sudo apt install slapd ldap-utils
Esto nos pedirá una contraseña. Hecho esto compruebo el estado y lo dejo en enabled para posibles reinicios.

Por otro lado, no olvidar que se abre el puerto 389. Para poder comprobarlo:
sudo apt install net-tools
sudo netstat -tlpn | grep slap
sudo netstat -putanl | egrep slapd

Para poder ver información de ldap hay que utilizar la orden ldapsearch indicando tambien el FQDN que tenemos en nuestra máquina, que en mi caso es andres.gonzalonazareno.org (ahora mismo de serie recien instalado el entry tree):
ldapsearch -x -b "dc=andres,dc=gonzalonazareno,dc=org"
# extended LDIF # # LDAPv3 # basewith scope subtree # filter: (objectclass=*) # requesting: ALL # # andres.gonzalonazareno.org dn: dc=andres,dc=gonzalonazareno,dc=org objectClass: top objectClass: dcObject objectClass: organization o: andres.gonzalonazareno.org dc: andres # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1 ................................................. -x: Para que no se use ninguna autenticación avanzada. (que no use SASL Simple Authentication and Security Layer) -b: Para que busque en la rama que tiene el DN (Distinguished Name) dc=andres,dc=gonzalonazareno,dc=org.

El siguiente paso es crear los archivos ldif, que son los encargados de la gestión, uno para usuarios y otro para grupos. Esto se crea como cualquier otro archivo común, con el siguiente contenido:
nano grupos_usuarios.ldif
dn: ou=Usuarios,dc=andres,dc=gonzalonazareno,dc=org objectClass: organizationalUnit ou: Usuarios dn: ou=Grupos,dc=andres,dc=gonzalonazareno,dc=org objectClass: organizationalUnit ou: Grupos
Ahora para añadirlo al ldap:
ldapadd -x -D "cn=admin,dc=andres,dc=gonzalonazareno,dc=org" -f grupos_usuarios.ldif -W
Donde grupos_usuarios.ldif es el archivo creado justo arriba.

Para comprobar que se ha añadido bien:
ldapsearch -x -b "dc=andres,dc=gonzalonazareno,dc=org"

Ahora hay que configurar el usuario prueba (usuario prueba debian) y darle una contraseña con:
Passwd slappasswd
andres@thor:~$ sudo slappasswd New password: Re-enter new password: {SSHA}JM3XQ4AJkrVVV7sKk0W+825+FpfYwNpQ andres@thor:~$
Hecho esto hay que crear 2 archivos ldif uno para el propio usuario y otro para el grupo:
nano usuario_prueba.ldif
andres@thor:~$ cat usuario_prueba.ldif dn: uid=prueba,ou=Usuarios,dc=andres,dc=gonzalonazareno,dc=org objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount cn: prueba sn: prueba uidNumber: 2000 gidNumber: 2000 userPassword: {SSHA}JM3XQ4AJkrVVV7sKk0W+825+FpfYwNpQ loginShell: /bin/bash homeDirectory: /srv/homes/prueba
nano grupo_prueba.ldif
dn: cn=prueba,ou=Grupos,dc=andres,dc=gonzalonazareno,dc=org objectClass: posixGroup gidNumber: 2000 cn: prueba

Con los archivos creados, toca aplicar la configuración (pide las contraseña que se creó al principio), con:
ldapadd -x -D "cn=admin,dc=andres,dc=gonzalonazareno,dc=org" -f usuario_prueba.ldif -W
ldapadd -x -D "cn=admin,dc=andres,dc=gonzalonazareno,dc=org" -f grupo_prueba.ldif -W

Y vuelvo a compruebar que se han añadido bien con:
ldapsearch -x -b "dc=andres,dc=gonzalonazareno,dc=org"

Con el usuario configurado y el grupo, es momento de configurar los directorios home compartidos, pero para ello lo primero es instalar nfs en thor que es el servidor:
sudo apt install nfs-kernel-server
Hecho esto, creo el directorio para los home, y añado al exports la información del directorio:
sudo nano /etc/exports
Añado al final:
/srv/homes *(rw,sync,no_subtree_check,no_root_squash)
Y reinicio el servicio nfs:
sudo systemctl restart nfs-kernel-server

Cliente Hela (Rocky Linux):
Ahora en hela hay que instalar los siguientes paquetes:
sudo dnf install openldap-clients sssd sssd-ldap oddjob-mkhomedir sssd-tools
Una vez instalado, hay que indicarle que use una autentificación SSSD con:
sudo authselect select sssd with-mkhomedir --force

Activo y compruebo oddjobd que es el encargado de controlar la gestion de directorios “automaticamente”:
sudo systemctl enable --now oddjobd

Ahora le indico cual es el servidor ldap, modificando el archivo /etc/openldap/ldap.conf, añadiendo al final:
BASE dc=andres,dc=gonzalonazareno,dc=org URI ldap://thor.andres.gonzalonazareno.org

Tambien hay que configurar el SSSD para la autentificación, creando el archivo /etc/sssd/sssd.conf con:
[domain/default] id_provider = ldap autofs_provider = ldap auth_provider = ldap chpass_provider = ldap ldap_uri = ldap://thor.andres.gonzalonazareno.org ldap_search_base = dc=andres,dc=gonzalonazareno,dc=org cache_credentials = True [sssd] services = nss, pam, autofs domains = default [nss] homedir_substring = /srv/homes
Y reinicio el servicio sssd:
sudo systemctl restart sssd


Ahora creo el punto de montaje, como se ve en la imagen no estaba montado:
sudo mount -v thor.andres.gonzalonazareno.org:/srv/homes /srv/homes

Y lo hago permanente añadiendolo al final del archivo /etc/fstab:
thor.andres.gonzalonazareno.org:/srv/homes /srv/homes nfs defaults 0 0

Cliente loki (Ubuntu):
Para poder instalar bien y que encuentre los paquetes libnss-ldapd libpam-ldapd hay que añadirle a los repositorios universe y multiverse sino, no encontrará los paquetes:
deb https://labs.eif.urjc.es/mirror/ubuntu/ jammy-updates main deb https://labs.eif.urjc.es/mirror/ubuntu/ jammy-security main deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse deb http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
Ahora instalo los paquetes necesarios:
sudo apt install ldap-utils libnss-ldapd libpam-ldapd

Durante la instalación, nos preguntará cual es el servidor ldap por lo que hay que indicarle que es thor, y en los paquetes hay que elegir que servicios tiene que configurar libnss-ldapd (para resover usuarios, contraseñas, etc) passwd, group y shadow:



Hecho esto, hay que ir al archivo /etc/ldap/ldap.conf y añadirle la busqueda y el server ldap:
# # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. #BASE dc=example,dc=com #URI ldap://ldap.example.com ldap://ldap-provider.example.com:666 #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never # TLS certificates (needed for GnuTLS) TLS_CACERT /etc/ssl/certs/ca-certificates.crt BASE dc=andres,dc=gonzalonazareno,dc=org URI ldap://thor.andres.gonzalonazareno.org

Para que no haya problemas de que nos se creen los directorios, hay que ir al archivo /etc/pam.d/common-session y añadir al final:
session required pam_mkhomedir.so skel=/etc/skel umask=077
Y reinicio los servicios nscd y nslcd:
sudo systemctl restart nscd nslcd

Instalo NFS (si no lo he instalado antes, si no se instala no se podrá montar de esta manera):
sudo apt install nfs-common
Ahora es momento del punto de montaje, para ello es como con el otro cliente, creando el directorio y montandolo así:
sudo mkdir -p /srv/homes
sudo mount -v thor.andres.gonzalonazareno.org:/srv/homes /srv/homes

Y como antes, lo añado al archivo /etc/fstab:
thor.andres.gonzalonazareno.org:/srv/homes /srv/homes nfs defaults 0 0

Y compruebo el servidor:

Comprobaciones:
En Loki, cambio al usuario prueba y compruebo cual es mi home, y que si creo un archivo aparece en el servidor thor:

Y lo mismo para el cliente hela, me conecto como el usuario pruebas, compruebo su home que esta en /srv/homes creo un archivo, salgo y voy al servidor a ver si se ha creado:
