Introducción

En nuestro escenario vamos a realizar la instalación y configuración de OpenLDAP en la máquina Alfa. Lo haremos utilizando como base el nombre DNS asignado a la máquina, alfa.mariajesus.gonzalonazareno.org.

Para ello, crearemos un usuario denominado prueba y configuraremos una máquina cliente Debian y otra Rocky, para que pueda validarse el servicio LDAP con el usuario prueba.

Instalación de OpenLDAP

Para realizar la instalación de OpenLDAP, primero deberemos tener en cuenta el FQDN de nuestra máquina, que en nuestro caso es alfa.mariajesus.gonzalonazareno.org. Para ello, ejecutaremos el siguiente comando:

hostname -f

Una vez que tenemos el FQDN, procederemos a instalar el paquete slapd y ldap-utils:

apt install slapd ldap-utils

Durante la instalación del paquete, este nos poedirá la contraseña que el usuario administrador usará para acceder al servicio LDAP. En nuestro caso, la contraseña que he predefinido es admin.

Tras la instalación, podemos comprobar que el servicio está activo y en ejecución:

systemctl status slapd

Y comprobaremos también que el puerto 389/TCP está abierto:

netstat -tulpn | grep 389

Como tenemos el paquete ldap-utils instalado, vamos a buscar el contenido que tiene nuestro directorio con la ayuda del comando ldapsearch:

ldapsearch -x -D "cn=admin,dc=mariajesus,dc=gonzalonazareno,dc=org" -b "dc=mariajesus,dc=gonzalonazareno,dc=org" -W

Hasta aquí estaría todo correcto e instalado, pero ¿y si queremos tener nuestros objetos organizados de una forma más clara? Para ello, vamos a crear un archivo de configuración denominado ldapescenario.ldif:

vi ldapescenario.ldif
dn: ou=Personas,dc=mariajesus,dc=gonzalonazareno,dc=org
objectClass: organizationalUnit
ou: Personas
changeType: add
dn: ou=Grupos,dc=mariajesus,dc=gonzalonazareno,dc=org
objectClass: organizationalUnit
ou: Grupos

Listo el fichero, lo incluiremos en nuestro directorio con el siguiente comando:

ldapadd -x -D "cn=admin,dc=mariajesus,dc=gonzalonazareno,dc=org" -f ldapescenario.ldif -W 

Si queremos borra el archivo, lo haremos con el siguiente comando:

#Personas
ldapdelete -x -D "cn=admin,dc=mariajesus,dc=gonzalonazareno,dc=org" -W "ou=Personas,dc=mariajesus,dc=gonzalonazareno,dc=org"
#Grupos
ldapdelete -x -D "cn=admin,dc=mariajesus,dc=gonzalonazareno,dc=org" -W "ou=Grupos,dc=mariajesus,dc=gonzalonazareno,dc=org"

Si queremos comprobar que los cambios se han producido de forma correcta, podemos hacerlo con el comando ldapsearch:

ldapsearch -x -b dc=mariajesus,dc=gonzalonazareno,dc=org

Creación del grupo prueba

Para crear el grupo prueba, vamos a crear un archivo denominado grupos.ldif con el siguiente contenido:

vi grupos.ldif
---
dn: cn=prueba,ou=Grupos,dc=mariajesus,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixGroup
gidNumber: 2001
cn: prueba

Ya creado el fichero, podemos añadirlo al directorio con el siguiente comando:

ldapadd -x -D 'cn=admin,dc=mariajesus,dc=gonzalonazareno,dc=org' -W -f grupos.ldif

Y comprobamos que se ha creado correctamente:

ldapsearch -x -b dc=mariajesus,dc=gonzalonazareno,dc=org

Si deseamos borrarlo, solo tendremos que ejecutar el siguiente comando:

ldapdelete -x -D 'cn=admin,dc=mariajesus,dc=gonzalonazareno,dc=org' -W cn=prueba,ou=Group,dc=mariajesus,dc=gonzalonazareno,dc=org

Creación de una contraseña para el usuario prueba

En nuestro caso, vamos a crear una contraseña para el usuario prueba, pero será una contraseña cifrada, que lo haremos con el comando slappasswd. Nos pedirá que ingresemos la contraseña, y nos la devolverá cifrada en la consola en formato {SSHA}.

A continuación, creamos el usuario prueba en un fichero denominado usuarios.ldif:

vi usuarios.ldif
---

dn: uid=prueba,ou=Personas,dc=mariajesus,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: person
cn: prueba
uid: prueba
uidNumber: 2001
gidNumber: 2001
homeDirectory: /home/nfs/prueba
loginShell: /bin/bash
userPassword: {SSHA}wQ5TgnH1OMpeAuuQyXX38Ye9Y8SVW3s4
sn: prueba
mail: mail@gmail.com
givenName: prueba

Ya con nuestro fichero creado, lo añadimos a nuestro directorio como lo hemos hecho anteriormente:

ldapadd -x -D 'cn=admin,dc=mariajesus,dc=gonzalonazareno,dc=org' -W -f usuarios.ldif

ldapsearch -x -b dc=mariajesus,dc=gonzalonazareno,dc=org

En la imagen anterior, podemos ver que el usuario prueba se ha creado correctamente y se ha añadido al grupo prueba.

Para borrar el usuario, solo tendremos que ejecutar en nuestra consola ldapdelete -x -D 'cn=admin,dc=mariajesus,dc=gonzalonazareno,dc=org' -W uid=prueba,ou=People,dc=mariajesus,dc=gonzalonazareno,dc=org.

Configuración de NFS en el Servidor

Debemos recordar que el usuario no tiene directorio de inicio, razón por la que no podrá acceder a su escritorio. Para ello, vamos a crear un directorio de inicio para el usuario prueba en el servidor NFS.

mkdir /home/nfs && mkdir /home/nfs/prueba
chown 2001:2001 /home/nfs/prueba

Instalamos el paquete nfs-kernel-server:

apt install nfs-kernel-server

Tras esto, deberemos modificar el fichero /etc/exports para que el usuario prueba pueda acceder a su directorio de inicio, y reiniciamos el servicio nfs-kernel-server:

vi /etc/exports
---
/home/nfs       *(rw,fsid=0, subtree_check,no_root_squash)

Las opciones que hemos añadido son:

  • rw: Permite que el usuario pueda leer y escribir en el directorio.
  • fsid=0: Es el identificador del sistema de ficheros.
  • subtree_check: Comprueba que el usuario tiene permisos para acceder a los subdirectorios.
  • no_root_squash: No comprime el usuario root.

Para que se apliquen los cambios, deberemos ejecutar exportfs -a y reiniciar el servicio nfs-kernel-server:

systemctl restart nfs-kernel-server

Instalación de NSS, PAM y NSCD en el Servidor

El título de este epígrafe tiene muchas siglas, pero no os preocupéis, que las explicaremos a continuación:

  • NSS: Name Service Switch. Es un servicio que permite a los programas acceder a información de los usuarios y grupos de un sistema.

  • PAM: Pluggable Authentication Modules. Es un servicio que permite a los programas autenticar a los usuarios.

  • NSCD: Name Service Caching Daemon. Es un servicio que permite a los programas acceder a información de los usuarios y grupos de un sistema de forma más rápida.

Para instalarlos, ejecutamos el siguiente comando:

apt-get install libnss-ldapd libpam-ldapd nscd

Durante la instalación, nos pedirá que introduzcamos la dirección IP del servidor LDAP, el puerto, el DN del administrador y la contraseña. Una vez introducidos, se instalarán los paquetes.

Para terminar, debemos modificar el fichero /etc/nsswitch.conf para que el sistema utilice el servicio LDAP para obtener información de los usuarios y grupos:

vi /etc/nsswitch.conf
---
passwd:         files ldap
group:          files ldap
shadow:         files ldap
gshadow:        files ldap

hosts:          files dns mymachines
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
netgroup:       nis

Comprobamos la UUID del usuario prueba y nos conectamos con él:

Configuración del Cliente Ubuntu

Para este punto, vamos a usar la máquina delta del escenario. En ella, vamos a instalar el paquete ldap-utils para poder conectarnos al servidor LDAP y comprobar que todo funciona correctamente.

apt-get install ldap-utils -y

Creamos el fichero /etc/ldap/ldap.conf con el siguiente contenido:

vi /etc/ldap/ldap.conf
---
BASE dc=mariajesus,dc=gonzalonazareno,dc=org
URI ldap://alfa.mariajesus.gonzalonazareno.org

Y con la ejecución del comando ldapsearch -x -b dc=mariajesus,dc=gonzalonazareno,dc=org comprobamos que podemos conectarnos al servidor LDAP:

Como nos muestra la imagen anterior, podemos ver que funciona correctamente y podemos conectarnos al servidor LDAP desde el cliente Ubuntu. Para conectarnos con el usuario prueba, ejecutamos el siguiente comando:

ldapwhoami -x -D 'uid=prueba,ou=Personas,dc=mariajesus,dc=gonzalonazareno,dc=org' -W

Instalaremos los paquetes necesarios para que el cliente pueda autenticarse con el servidor LDAP:

apt-get install libnss-ldapd libpam-ldapd ldap-utils -y

Se nos abrirá un asistente para configurar el cliente LDAP. En el primer paso, introducimos alfa.mariajesus.gonzalonazareno.org como servidor LDAP y como servidor de búsqueda introducimos dc=mariajesus,dc=gonzalonazareno,dc=org.

Lo siguiente será modificar el fichero /etc/pam.d/common-session y añadimos al final de este fichero la siguiente línea:

session required        pam_mkhomedir.so skel=/etc/skel umask=077

Y reiniciamos el servicio nscd:

systemctl restart nscd nslcd

El siguiente paso será modificar el fichero /etc/nsswitch.conf como hicimos en el servidor, pero introduciremos los datos del servidor LDAP:

vi /etc/nsswitch.conf
---
passwd:         files systemd ldap
group:          files systemd ldap
shadow:         files ldap
gshadow:        files ldap

hosts:          files dns mymachines
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
netgroup:       nis

Reiniciamos el resvicio nscd e instalamos nfs-common para poder montar el directorio de inicio del usuario prueba:

systemctl restart nscd
apt-get install nfs-common

Activamos el servicio y creamos el directorio donde vamos a montar el directorio de inicio del usuario prueba:

systemctl start nfs-client.target && systemctl enable nfs-client.target
mkdir /home/nfs && mkdir /home/nfs/prueba
chown 2001:2001 /home/nfs/prueba

Llegados a este punto, podremos acceder al directorio sin problemas, pero todos los cambios que realicemos en el cliente ubuntu no se verán reflejados en el servidor LDAP.

#Cargar el módulo nfs al arrancar el sistema
echo NFS | tee -a /etc/modules
#Montar el directorio de inicio del usuario prueba
vim /etc/systemd/system/home-nfs.mount
[Unit]
Description= Home de NFS
Requires=network-online.target
After=network-online.target
[Mount]
What=192.168.0.1:/home/nfs
Where=/home/nfs
Options=_netdev,auto
Type=nfs
[Install]
WantedBy=multi-user.target
#Reiniciamos los demonios
systemctl daemon-reload
#Activamos el servicio
systemctl enable home-nfs.mount
#Comenzamos el servicio
systemctl start home-nfs.mount

Para la prueba de fuego, vamos a conectarnos con el usuario prueba en delta y vamos a crear un fichero en el directorio de inicio del usuario prueba:

Configuración del Cliente Rocky Linux

Para este punto, vamos a usar la máquina bravo del escenario. En ella, vamos a instalar el paquete openldap-clients para poder conectarnos al servidor LDAP y comprobar que todo funciona correctamente.

dnf install openldap-clients sssd sssd-ldap oddjob-mkhomedir sssd-tools -y

Editaremos el fichero de configración de PAM , que en ROcy linux se encuentra en /etc/pam.d/system-auth y añadiremos la siguiente línea:

vi /etc/pam.d/system-auth
---
auth sufficient pam_ldap.so

Creamos el fichero /etc/openldap/ldap.conf con el siguiente contenido para que el cliente pueda conectarse al servidor LDAP:

vi /etc/openldap/ldap.conf
---
BASE dc=mariajesus,dc=gonzalonazareno,dc=org
URI ldap://alfa.mariajesus.gonzalonazareno.org

Para que el usuario prueba pueda conectarse al servidor LDAP, tenemos que editar /etc/pam.d/common-session y añadir la siguiente línea:

vi /etc/pam.d/system-auth
---
session required pam_mkhomedir.so skel=/etc/skel umask=0022
ldapsearch -x -b dc=mariajesus,dc=gonzalonazareno,dc=org

En esta imagen podemos ver que el cliente Rocky Linux se ha conectado correctamente al servidor LDAP y podemos ver los usuarios que hay en el directorio.

ldapwhoami -x -D 'uid=prueba,ou=Personas,dc=mariajesus,dc=gonzalonazareno,dc=org' -W

Aquí podemos comprobar que funciona plenamente desde el cliente Rocky Linux.

Para realizar el login al servidor LDAP, instalamos sssd y sssd-ldap y añadimos la siguiente línea al fichero /etc/ssd/sssd.conf:

dnf install sssd sssd-ldap
vi /etc/sssd/sssd.conf
---
[domain/default]
id_provider = ldap
autofs_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://alfa.mariajesus.gonzalonazareno.org
ldap_search_base = dc=mariajesus,dc=gonzalonazareno,dc=org
ldap_id_use_start_tls = True
ldap_tls_cacertdir = /etc/openldap/cacerts
cache_credentials = True
ldap_tls_reqcert = allow

[sssd]
services = nss, pam, autofs
domains = default

[nss]
homedir_substring = /home/nfs

Le cambiamos los permisos al fichero /etc/sssd/sssd.conf, habilitamos el servicio y lo reiniciamos:

chmod 0600 /etc/sssd/sssd.conf
systemctl restart sssd
systemctl enable sssd

Creamos el directorio /home/nfs y lo hacemos propietario del usuario prueba:

mkdir /home/nfs && mkdir /home/nfs/prueba
chown 2001:2001 /home/nfs/prueba

Lo montamos con la ayuda de systemd:

vi /etc/systemd/system/home-nfs.mount
[Unit]
Description=script de montaje NFS
Requires=NetworkManager.service
After=NetworkManager.service
[Mount]
What=172.16.0.1:/home/nfs
Where=/home/nfs
Options=_netdev,auto
Type=nfs
[Install]
WantedBy=multi-user.target

Reiniciamos los demonios y activamos el servicio:

systemctl daemon-reload
systemctl start home-nfs.mount
systemctl enable home-nfs.mount

Como podemos ver en las imágenes anteriores, el directorio /home/nfs se ha montado correctamente en el cliente Rocky Linux y podemos realizar modificaciones desde bravo que veremos en alfa y en delta

Conclusiones

Tras configurar LDAP en Ubuntu y Rocky Linux hemos podido comprobar que funciona correctamente y que podemos conectarnos desde el cliente a nuestro servidor LDAP.

La utilidad de esta herramiente es que podemos tener un único punto de acceso para todos los usuarios de nuestra red, y que todos ellos puedan acceder a los recursos de la misma manera. Además, podemos tener un único punto de control para los usuarios, y podemos gestionarlos de una manera más sencilla.

Referencias

https://www.openldap.org/

https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-openldap-and-phpldapadmin-on-ubuntu-18-04-es