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


Comenzaremos este artículo describiendo 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 con él usando sistemas Red Hat Enterprise Linux 7.

Como veremos, hay varios otros posibles escenarios de aplicación, pero en esta guía nos centraremos completamente 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 que se describe en el resumen para obtener más detalles.

Por la misma razón, observará que he decidido dejar de lado varias referencias a las páginas de manual de las herramientas LDAP en aras de la brevedad, pero las explicaciones correspondientes están al alcance de la mano (man ldapadd, por ejemplo).

Dicho esto, comencemos.

Nuestro entorno de prueba consta de dos cajas RHEL 7:

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

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

LDAP son las siglas de Lightweight Directory Access Protocol 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 del usuario del sistema, por ejemplo) que debería ser accesible desde diferentes lugares o estar disponible para un gran número de usuarios finales (otro ejemplo sería un directorio de direcciones y números de teléfono de todos los empleados de una empresa).

Mantener esta (y más) información de manera centralizada significa que todos los que tienen permisos para usarla pueden mantenerla y acceder a ella más fácilmente.

El siguiente diagrama ofrece un diagrama simplificado de LDAP y se describe a continuación con mayor detalle:

Explicación detallada del diagrama anterior.

  1. An entry in a LDAP directory represents a single unit or information and is uniquely identified by what is called a Distinguished Name.
  2. An attribute is a piece of information associated with an entry (for example, addresses, available contact phone numbers, and email addresses).
  3. Each attribute is assigned one or more values consisting in a space-separated list. A value that is unique per entry is called a Relative Distinguished Name.

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

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

En RHEL 7, OpenLDAP implementa LDAP. Para instalar el servidor y el cliente, utilice 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 se completa la instalación, hay algunas cosas que analizamos. Los siguientes pasos deben realizarse solo en el servidor, a menos que se indique explícitamente:

1.Asegúrese de que SELinux no se interponga en el camino habilitando los siguientes valores booleanos de manera persistente, tanto en el servidor como en el cliente:

# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

Donde se requiere allow_ypbind para la autenticación basada en LDAP, y algunas aplicaciones pueden necesitar authlogin_nsswitch_use_ldap.

2. Habilite e inicie el servicio:

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

Tenga en cuenta que también puede 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 (que puede verificar con ps -e -o pid, uname, comm | grep slapd), dicho usuario debe poseer el directorio/var/lib/ldap para que el servidor poder modificar entradas creadas por herramientas administrativas que solo se pueden ejecutar como root (más sobre esto en un minuto).

Antes de cambiar la propiedad de este directorio de forma recursiva, copie el archivo de configuración de la 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. Configure un usuario administrativo de OpenLDAP y asigne una contraseña:

# slappasswd

como se muestra en la siguiente imagen:

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

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

dónde:

  1. PASSWORD is the hashed string obtained earlier.
  2. cn=config indicates global config options.
  3. olcDatabase indicates a specific database instance name and can be typically found inside /etc/openldap/slapd.d/cn=config.

Refiriéndose a los antecedentes teóricos proporcionados anteriormente, el archivo ldaprootpasswd.ldif agregará una entrada al directorio LDAP. En esa entrada, cada línea representa un par de 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).

Es posible que desee tener esto en cuenta a medida que avanzamos, y tenga en cuenta que estamos usando los mismos nombres comunes (cn u003d) en el 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 de protocolo/host/puerto.

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

La salida debe ser similar a:

e importe algunas definiciones LDAP básicas 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 u003d) 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

Luego cárguelo de la siguiente manera:

# ldapmodify -H ldapi:/// -f ldapdomain.ldif

7. Ahora es el momento de agregar algunas entradas a nuestro directorio LDAP. Los atributos y valores están separados por dos puntos (:) en el siguiente archivo, 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árgalo:

# 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 que se autentique mediante LDAP.

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

Con el siguiente comando, se crea el directorio de inicio para el usuario solicitado si no existe después de que la autenticación en el servidor LDAP se realice correctamente:

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

Resumen

En este artículo, explicamos cómo configurar la autenticación básica en un servidor LDAP. Para configurar aún más la configuración descrita en la presente guía, 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 pueda tener utilizando el formulario de comentarios a continuación.