Búsqueda de sitios web

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 usando Sistemas Red Hat Enterprise Linux 7.

Como veremos, existen otros escenarios de aplicación posibles, 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, aquí solo cubriremos sus conceptos básicos, pero puede consultar la documentación descrita en el resumen para obtener detalles más detallados.

Por la misma razón, observarás que he decidido omitir varias referencias a páginas de manual de 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 pruebas

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 utilizar la máquina instalada en la Parte 12: Automatizar las instalaciones de RHEL 7 utilizando Kickstart como cliente.

¿Qué es LDAP?

LDAP significa Protocolo ligero de acceso a directorios y consiste en un conjunto de protocolos que permite a un cliente acceder, a través de una red, a información almacenada centralmente (como un directorio de shells de inicio de sesión). , rutas absolutas a directorios personales y otra información típica del usuario del sistema, por ejemplo) que deben ser accesibles desde diferentes lugares o estar disponibles para una gran cantidad de usuarios finales (otro ejemplo sería un directorio de direcciones particulares y números de teléfono de todos los empleados en una compañía).

Mantener dicha (y más) información de manera centralizada significa que todos aquellos a quienes se les han otorgado 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. Una entrada en un directorio LDAP representa una única unidad o información y se identifica de forma única mediante lo que se denomina 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 constan en una lista separada por espacios. Un valor que es único por entrada se denomina 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 se implementa mediante OpenLDAP. 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 únicamente en el servidor, a menos que se indique explícitamente:

1. Asegúrese de que SELinux no se interponga en su camino 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 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 desactivar, 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 pueda modificar las entradas creadas por herramientas administrativas que sólo pueden ejecutarse 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. CONTRASEÑA es la cadena hash obtenida anteriormente.
  2. cn=config indica opciones de configuración global.
  3. olcDatabase indica un nombre de instancia de base de datos específica y normalmente se puede encontrar dentro de /etc/openldap/slapd.d/cn=config.

Haciendo referencia 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 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 utilizaremos los mismos nombres comunes (cn=) 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 protocolo/host/puerto.


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

La salida debería ser similar a:

e importe algunas definiciones LDAP básicas desde el 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 utilice su dominio en su base de datos.

Cree otro archivo LDIF, al que llamaremos ldapdomain.ldif, con el siguiente contenido, reemplazando su dominio (en el Componente 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

Luego cárgalo 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, 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 cargarlo:


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

Asimismo, puedes eliminar la entrada de usuario que acabas de crear:


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

10. Permitir 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 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 sea exitosa:


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