¿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.

img

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

img

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
# base  with 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.

img

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.

img

Para comprobar que se ha añadido bien:

ldapsearch -x -b "dc=andres,dc=gonzalonazareno,dc=org"

img

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

img

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

img

Y vuelvo a compruebar que se han añadido bien con:

ldapsearch -x -b "dc=andres,dc=gonzalonazareno,dc=org"

img

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

img

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

img

Activo y compruebo oddjobd que es el encargado de controlar la gestion de directorios “automaticamente”:

sudo systemctl enable --now oddjobd

img

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

img

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

img

img

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

img

Y lo hago permanente añadiendolo al final del archivo /etc/fstab:

thor.andres.gonzalonazareno.org:/srv/homes   /srv/homes   nfs  defaults   0  0

img

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

img

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:

img

img

img

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

img

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

img

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

img

Y como antes, lo añado al archivo /etc/fstab:

thor.andres.gonzalonazareno.org:/srv/homes   /srv/homes   nfs  defaults   0  0

img

Y compruebo el servidor:

img

Comprobaciones:

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

img

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:

img