Serie RHCSA: Configuración de autenticación basada en LDAP en RHEL 7 – Parte 14

Comenzaremos este artículo delineando algunos conceptos básicos de LDAP (qué es, dónde se usa y por qué) y mostraremos cómo configurar un servidor LDAP y configurar un cliente para autenticarse contra él utilizando sistemas Red Hat Enterprise Linux 7.

RHCSA Series: Setup LDAP Server and Client Authentication – Part 14

Como veremos, hay varios otros escenarios de aplicación posibles, pero en esta guía nos centraremos exclusivamente en la autenticación basada en LDAP. Además, tenga en cuenta que debido a la amplitud del tema, solo cubriremos sus conceptos básicos aquí, pero puede consultar la documentación detallada en el resumen para obtener más detalles.

Por la misma razón, notará que he decidido omitir varias referencias a las páginas de manual de las herramientas de LDAP por razones de brevedad, pero las explicaciones correspondientes están a un clic de distancia (man ldapadd, por ejemplo).

Dicho esto, ¡comencemos!

Nuestro Entorno de Pruebas

Nuestro entorno de pruebas consta de dos equipos RHEL 7:

Server: 192.168.0.18. FQDN: rhel7.mydomain.com
Client: 192.168.0.20. FQDN: ldapclient.mydomain.com

Si lo desea, puede utilizar la máquina instalada en Parte 12: Automatizar instalaciones de RHEL 7 usando Kickstart como cliente.

¿Qué es LDAP?

LDAP significa Protocolo Ligero de Acceso a Directorios y consiste en un conjunto de protocolos que permiten a un cliente acceder, a través de una red, a información almacenada de forma centralizada (como un directorio de shells de inicio de sesión, rutas absolutas a directorios de inicio y otra información típica de usuarios del sistema, por ejemplo) que debería ser accesible desde diferentes lugares o disponible para un gran número de usuarios finales (otro ejemplo sería un directorio de direcciones de hogar y números de teléfono de todos los empleados de una empresa).

Mantener esta (y más) información de forma centralizada significa que puede ser mantenida y accedida más fácilmente por todos aquellos a quienes se les ha concedido permisos para utilizarla.

El siguiente diagrama ofrece un diagrama simplificado de LDAP, y se describe a continuación con más detalle:

LDAP Diagram

Explicación detallada del diagrama anterior.

  1. Una entrada en un directorio LDAP representa una unidad única de información y se identifica de forma única por lo que se llama un Nombre Distinguido.
  2. Un atributo es una pieza de información asociada con una entrada (por ejemplo, direcciones, números de teléfono de contacto disponibles y direcciones de correo electrónico).
  3. A cada atributo se le asigna uno o más valores que consisten en una lista separada por espacios. Un valor que es único por entrada se llama Nombre Distinguido Relativo.

Dicho esto, procedamos con las instalaciones del servidor y del cliente.

Instalación y configuración de un servidor y cliente LDAP

En RHEL 7, LDAP está implementado por OpenLDAP. Para instalar el servidor y el cliente, utiliza los siguientes comandos, respectivamente:

# yum update && yum install openldap openldap-clients openldap-servers
# yum update && yum install openldap openldap-clients nss-pam-ldapd

Una vez que la instalación esté completa, hay algunas cosas que debemos tener en cuenta. Los siguientes pasos deben realizarse solo en el servidor, a menos que se indique explícitamente:

1. Asegúrate de que SELinux no interfiera habilitando los siguientes booleanos de forma persistente, tanto en el servidor como en el cliente:

# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

Donde allow_ypbind es necesario para la autenticación basada en LDAP, y authlogin_nsswitch_use_ldap puede ser necesario para algunas aplicaciones.

2. Habilita y arranca el servicio:

# systemctl enable slapd.service
# systemctl start slapd.service

Ten en cuenta que también puedes deshabilitar, reiniciar o detener el servicio con systemctl:

# systemctl disable slapd.service
# systemctl restart slapd.service
# systemctl stop slapd.service

3. Dado que el servicio slapd se ejecuta como el usuario ldap (lo cual puedes verificar con ps -e -o pid,uname,comm | grep slapd), dicho usuario debe ser propietario del directorio /var/lib/ldap para que el servidor pueda modificar entradas creadas por herramientas administrativas que solo pueden ejecutarse como root (más sobre esto en un minuto).

Antes de cambiar la propiedad de este directorio de forma recursiva, copia el archivo de configuración de base de datos de muestra para slapd en él:

# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown -R ldap:ldap /var/lib/ldap

4. Configura un usuario administrativo de OpenLDAP y asigna una contraseña:

# slappasswd

como se muestra en la siguiente imagen:

Set LDAP Admin Password

y crear un archivo LDIF (ldaprootpasswd.ldif) con el siguiente contenido:

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

donde:

  1. PASSWORD es la cadena hash obtenida anteriormente.
  2. cn=config indica opciones de configuración globales.
  3. olcDatabase indica el nombre de una instancia de base de datos específica y generalmente se puede encontrar dentro de /etc/openldap/slapd.d/cn=config.

Refiriéndose al trasfondo teórico proporcionado anteriormente, el archivo ldaprootpasswd.ldif agregará una entrada al directorio LDAP. En esa entrada, cada línea representa un par atributo: valor (donde dn, changetype, add y olcRootPW son los atributos y las cadenas a la derecha de cada dos puntos son sus valores correspondientes).

Puede que desee tener esto en cuenta a medida que avanzamos, y tenga en cuenta que estamos utilizando los mismos Nombres Comunes (cn=) a lo largo del resto de este artículo, donde cada paso depende del anterior.

5. Ahora, agregue la entrada LDAP correspondiente especificando el URI que hace referencia al servidor ldap, donde solo se permiten los campos protocolo/host/puerto.

# ldapadd -H ldapi:/// -f ldaprootpasswd.ldif 

La salida debería ser similar a:

LDAP Configuration

e importar algunas definiciones básicas de LDAP del directorio /etc/openldap/schema:

# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done
LDAP Definitions

6. Haga que LDAP use su dominio en su base de datos.

Cree otro archivo LDIF, que llamaremos ldapdomain.ldif, con el siguiente contenido, reemplazando su dominio (en el Componente de Dominio dc=) y contraseña según corresponda:

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
  read by dn.base="cn=Manager,dc=mydomain,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read

# ldapmodify -H ldapi:/// -f ldapdomain.ldif
LDAP Domain Configuration

7. Ahora es el momento de agregar algunas entradas a nuestro directorio LDAP. Los atributos y valores se separan por dos puntos (:) en el siguiente archivo, al que llamaremos baseldapdomain.ldif:

dn: dc=mydomain,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: mydomain com
dc: mydomain

dn: cn=Manager,dc=mydomain,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: Group

Agregue las entradas al directorio LDAP:

# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif
Add LDAP Domain Attributes and Values

8. Cree un usuario LDAP llamado ldapuser (adduser ldapuser), luego cree las definiciones para un grupo LDAP en ldapgroup.ldif.

# adduser ldapuser
# vi ldapgroup.ldif

Agregue el siguiente contenido.

dn: cn=Manager,ou=Group,dc=mydomain,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1004

donde gidNumber es el GID en /etc/group para ldapuser) y cárguelo:

# ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif

9. Agregue un archivo LDIF con las definiciones para el usuario ldapuser (ldapuser.ldif):

dn: uid=ldapuser,ou=People,dc=mydomain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser
uid: ldapuser
uidNumber: 1004
gidNumber: 1004
homeDirectory: /home/ldapuser
userPassword: {SSHA}fiN0YqzbDuDI0Fpqq9UudWmjZQY28S3M
loginShell: /bin/bash
gecos: ldapuser
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

y cárguelo:

# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif
LDAP User Configuration

Asimismo, puede eliminar la entrada de usuario que acaba de crear:

# ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"

10. Permita la comunicación a través del firewall:

# firewall-cmd --add-service=ldap

11. Por último, pero no menos importante, habilite al cliente para autenticarse usando LDAP.

Para ayudarnos en este paso final, utilizaremos la utilidad authconfig (una interfaz para configurar recursos de autenticación del sistema).

Usando el siguiente comando, se crea el directorio principal para el usuario solicitado si no existe después de que la autenticación contra el servidor LDAP tenga éxito:

# authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update
LDAP Client Configuration

Resumen

En este artículo hemos explicado cómo configurar la autenticación básica contra un servidor LDAP. Para configurar aún más la configuración descrita en la presente guía, por favor consulte el Capítulo 13 – Configuración LDAP en la Guía del administrador del sistema RHEL 7, prestando especial atención a la configuración de seguridad mediante TLS.

No dude en dejar cualquier pregunta que tenga utilizando el formulario de comentarios a continuación.

Source:
https://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/