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.

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:

Explicación detallada del diagrama anterior.
- 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.
- 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).
- 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:

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:
- PASSWORD es la cadena hash obtenida anteriormente.
- cn=config indica opciones de configuración globales.
- 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:

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

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

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

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

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

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/