Sèrie RHCSA: Configuració de l'autenticació basada en LDAP a RHEL 7 - Part 14


Començarem aquest article esbocant alguns conceptes bàsics de LDAP (què és, on s'utilitza i per què) i mostrarem com configurar un servidor LDAP i configurar un client per autenticar-s'hi amb els sistemes Red Hat Enterprise Linux 7.

Com veurem, hi ha altres escenaris d'aplicació possibles, però en aquesta guia ens centrarem completament en l'autenticació basada en LDAP. A més, si us plau, tingueu en compte que, a causa de l'extensió del tema, només en parlarem aquí, però podeu consultar la documentació que es descriu al resum per a més detalls.

Per la mateixa raó, notareu que he decidit deixar de banda diverses referències a les pàgines man d'eines LDAP per motius de brevetat, però les explicacions corresponents estan a la distància (man ldapadd, per exemple).

Dit això, comencem.

El nostre entorn de prova consta de dues caixes RHEL 7:

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

Si voleu, podeu utilitzar la màquina instal·lada a la Part 12: Automatitzar les instal·lacions de RHEL 7 mitjançant Kickstart com a client.

LDAP significa Lightweight Directory Access Protocol i consisteix en un conjunt de protocols que permeten a un client accedir, a través d'una xarxa, a la informació emmagatzemada centralment (com ara un directori d'intèrprets d'ordres d'inici de sessió, camins absoluts als directoris d'inici i altra informació típica d'usuari del sistema, per exemple) que hauria de ser accessible des de diferents llocs o disponible per a un gran nombre d'usuaris finals (un altre exemple seria un directori d'adreces domiciliàries i números de telèfon de tots els empleats d'una empresa).

Mantenir aquesta (i més) informació de manera centralitzada significa que pot ser més fàcil mantenir-la i accedir-hi tothom a qui tingui permís per utilitzar-la.

El diagrama següent ofereix un diagrama simplificat de LDAP i es descriu a continuació amb més detall:

Explicació detallada del diagrama anterior.

  1. Una entrada en un directori LDAP representa una unitat o informació única i s'identifica de manera única amb el que s'anomena nom distingit.
  2. Un atribut és una informació associada a una entrada (per exemple, adreces, números de telèfon de contacte disponibles i adreces de correu electrònic).
  3. A cada atribut se li assignen un o més valors que consisteixen en una llista separada per espais. Un valor que és únic per entrada s'anomena nom distingit relatiu.

Dit això, continuem amb les instal·lacions del servidor i el client.

Instal·lació i configuració d'un servidor i client LDAP

A RHEL 7, LDAP està implementat per OpenLDAP. Per instal·lar el servidor i el client, utilitzeu les ordres següents, respectivament:

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

Un cop finalitzada la instal·lació, hi ha algunes coses que mirem. Els passos següents s'han de realitzar només al servidor, tret que s'indiqui explícitament:

1. Assegureu-vos que SELinux no s'interposi en el camí activant els següents booleans de manera persistent, tant al servidor com al client:

# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

Quan es requereix allow_ypbind per a l'autenticació basada en LDAP, i algunes aplicacions poden necessitar authlogin_nsswitch_use_ldap.

2. Habiliteu i inicieu el servei:

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

Tingueu en compte que també podeu desactivar, reiniciar o aturar el servei amb systemctl:

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

3. Com que el servei slapd s'executa com a usuari ldap (que podeu verificar amb ps -e -o pid,uname,comm | grep slapd), aquest usuari hauria de ser propietari del directori /var/lib/ldap per tal que el servidor poder modificar les entrades creades per eines administratives que només es poden executar com a root (més sobre això en un minut).

Abans de canviar la propietat d'aquest directori de manera recursiva, copieu-hi el fitxer de configuració de la base de dades d'exemple per a slapd:

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

4. Configureu un usuari administratiu d'OpenLDAP i assigneu una contrasenya:

# slappasswd

com es mostra a la següent imatge:

i creeu un fitxer LDIF (ldaprootpasswd.ldif) amb el contingut següent:

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

on:

  1. CONTRAsenya és la cadena hash obtinguda anteriorment.
  2. cn=config indica opcions de configuració global.
  3. olcDatabase indica un nom d'instància de base de dades específic i normalment es pot trobar a /etc/openldap/slapd.d/cn=config.

En referència als antecedents teòrics proporcionats anteriorment, el fitxer ldaprootpasswd.ldif afegirà una entrada al directori LDAP. En aquesta entrada, cada línia representa un atribut: parell de valors (on dn, changetype, add i olcRootPW són els atributs i les cadenes a la dreta de cada dos punts són els seus valors corresponents).

És possible que vulgueu tenir-ho en compte a mesura que avancem, i tingueu en compte que estem utilitzant els mateixos noms comuns (cn=) durant la resta d'aquest article, on cada pas depèn de l'anterior. .

5. Ara, afegiu l'entrada LDAP corresponent especificant l'URI que fa referència al servidor ldap, on només es permeten els camps protocol/amfitrió/port.

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

La sortida hauria de ser semblant a:

i importeu algunes definicions bàsiques de LDAP del directori /etc/openldap/schema:

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

6. Feu que LDAP utilitzi el vostre domini a la seva base de dades.

Creeu un altre fitxer LDIF, que anomenarem ldapdomain.ldif, amb el contingut següent, substituint el vostre domini (al component de domini dc=) i la contrasenya segons correspongui:

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

A continuació, carregueu-lo de la següent manera:

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

7. Ara és el moment d'afegir algunes entrades al nostre directori LDAP. Els atributs i els valors estan separats per dos punts (:) al fitxer següent, que anomenarem 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

Afegiu les entrades al directori LDAP:

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

8. Creeu un usuari LDAP anomenat ldapuser (adduser ldapuser) i després creeu les definicions per a un grup LDAP a ldapgroup.ldif.

# adduser ldapuser
# vi ldapgroup.ldif

Afegeix el contingut següent.

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

on gidNumber és el GID a /etc/group per a ldapuser) i carregueu-lo:

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

9. Afegiu un fitxer LDIF amb les definicions per a l'usuari 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

i carrega-ho:

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

De la mateixa manera, podeu eliminar l'entrada d'usuari que acabeu de crear:

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

10. Permet la comunicació a través del tallafoc:

# firewall-cmd --add-service=ldap

11. Per últim, però no menys important, permeteu que el client s'autentiqui mitjançant LDAP.

Per ajudar-nos en aquest pas final, utilitzarem la utilitat authconfig (una interfície per configurar els recursos d'autenticació del sistema).

Mitjançant l'ordre següent, es crea el directori inicial de l'usuari sol·licitat si no existeix després que l'autenticació amb el servidor LDAP tingui èxit:

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

Resum

En aquest article hem explicat com configurar l'autenticació bàsica contra un servidor LDAP. Per configurar encara més la configuració que es descriu a la present guia, consulteu el Capítol 13: Configuració LDAP a la guia de l'administrador del sistema RHEL 7, prestant especial atenció a la configuració de seguretat mitjançant TLS.

No dubteu a deixar qualsevol pregunta que tingueu utilitzant el formulari de comentaris a continuació.