Ricerca nel sito web

Serie RHCSA: configurazione dell'autenticazione basata su LDAP in RHEL 7 - Parte 14


Inizieremo questo articolo delineando alcune nozioni di base su LDAP (cos'è, dove viene utilizzato e perché) e mostreremo come impostare un server LDAP e configurare un client per l'autenticazione utilizzando Sistemi Red Hat Enterprise Linux 7.

Come vedremo, ci sono molti altri possibili scenari applicativi, ma in questa guida ci concentreremo interamente sull'autenticazione basata su LDAP. Inoltre, tieni presente che, a causa della vastità dell'argomento, qui tratteremo solo le nozioni di base, ma puoi fare riferimento alla documentazione delineata nel riepilogo per dettagli più approfonditi.

Per lo stesso motivo, noterai che ho deciso di omettere diversi riferimenti alle pagine man degli strumenti LDAP per ragioni di brevità, ma le spiegazioni corrispondenti sono a portata di mano (man ldapadd, per esempio).

Detto questo, cominciamo.

Il nostro ambiente di test

Il nostro ambiente di test è composto da due box RHEL 7:


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

Se lo desideri, puoi utilizzare la macchina installata nella Parte 12: automatizzare le installazioni di RHEL 7 utilizzando Kickstart come client.

Cos'è LDAP?

LDAP sta per Lightweight Directory Access Protocol e consiste in un insieme di protocolli che consentono a un client di accedere, su una rete, alle informazioni archiviate centralmente (come una directory di shell di accesso , percorsi assoluti alle directory home e altre informazioni tipiche sugli utenti del sistema, ad esempio) che dovrebbero essere accessibili da luoghi diversi o disponibili a un gran numero di utenti finali (un altro esempio potrebbe essere una directory di indirizzi di casa e numeri di telefono di tutti i dipendenti in un'azienda).

Mantenere tali (e altre) informazioni a livello centrale significa che possono essere mantenute e accessibili più facilmente da chiunque abbia ottenuto l'autorizzazione per utilizzarle.

Il diagramma seguente offre un diagramma semplificato di LDAP ed è descritto di seguito in maggior dettaglio:

Spiegazione dettagliata del diagramma precedente.

  1. Una voce in una directory LDAP rappresenta una singola unità o informazione ed è identificata in modo univoco da quello che viene chiamato nome distinto.
  2. Un attributo è un'informazione associata a una voce (ad esempio indirizzi, numeri di telefono di contatto disponibili e indirizzi email).
  3. Ad ogni attributo vengono assegnati uno o più valori costituiti da un elenco separato da spazi. Un valore univoco per voce è chiamato nome distinto relativo.

Detto questo procediamo con le installazioni server e client.

Installazione e configurazione di un server e client LDAP

In RHEL 7, LDAP è implementato da OpenLDAP. Per installare il server e il client, utilizzare rispettivamente i seguenti comandi:


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

Una volta completata l'installazione, ci sono alcune cose che esamineremo. I seguenti passaggi devono essere eseguiti solo sul server, se non diversamente specificato:

1. Assicurati che SELinux non sia d'intralcio abilitando i seguenti booleani in modo persistente, sia sul server che sul client:


setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

Dove allow_ypbind è richiesto per l'autenticazione basata su LDAP e authlogin_nsswitch_use_ldap potrebbe essere necessario per alcune applicazioni.

2. Abilita e avvia il servizio:


systemctl enable slapd.service
systemctl start slapd.service

Tieni presente che puoi anche disabilitare, riavviare o interrompere il servizio anche con systemctl:


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

3. Poiché il servizio slapd viene eseguito come utente ldap (che puoi verificare con ps -e -o pid,uname,comm | grep slapd ), tale utente dovrebbe possedere la directory /var/lib/ldap affinché il server sia in grado di modificare le voci create dagli strumenti di amministrazione che possono essere eseguiti solo come root (maggiori informazioni su questo argomento in un minuto).

Prima di modificare ricorsivamente la proprietà di questa directory, copia al suo interno il file di configurazione del database di esempio per slapd:


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

4. Configura un utente amministrativo OpenLDAP e assegna una password:


slappasswd

come mostrato nell'immagine successiva:

e creare un file LDIF (ldaprootpasswd.ldif) con il seguente contenuto:


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

Dove :

  1. PASSWORD è la stringa con hash ottenuta in precedenza.
  2. cn=config indica le opzioni di configurazione globali.
  3. olcDatabase indica un nome di istanza di database specifico e in genere può essere trovato all'interno di /etc/openldap/slapd.d/cn=config.

Facendo riferimento al background teorico fornito in precedenza, il file ldaprootpasswd.ldif aggiungerà una voce alla directory LDAP. In quella voce, ogni riga rappresenta una coppia attributo: valore (dove dn, changetype, add e olcRootPW sono gli attributi e le stringhe a destra di ciascun due punti sono i valori corrispondenti).

Potresti tenerlo a mente mentre procediamo oltre e tieni presente che utilizzeremo gli stessi nomi comuni (cn=) in tutto il resto di questo articolo, dove ogni passaggio dipende da quello precedente .

5. Ora aggiungi la voce LDAP corrispondente specificando l'URI che fa riferimento al server ldap, dove sono consentiti solo i campi protocollo/host/porta.


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

L'output dovrebbe essere simile a:

e importa alcune definizioni LDAP di base dalla directory /etc/openldap/schema:


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

6. Fai in modo che LDAP utilizzi il tuo dominio nel suo database.

Crea un altro file LDIF, che chiameremo ldapdomain.ldif, con i seguenti contenuti, sostituendo il tuo dominio (nel componente dominio dc=) e la password come appropriato:


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

Quindi caricarlo come segue:


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

7. Ora è il momento di aggiungere alcune voci alla nostra directory LDAP. Attributi e valori sono separati da due punti (:) nel seguente file, che chiameremo 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

Aggiungi le voci alla directory LDAP:


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

8. Crea un utente LDAP chiamato ldapuser (adduser ldapuser), quindi crea le definizioni per un gruppo LDAP in ldapgroup.ldif< /codice>.


adduser ldapuser
vi ldapgroup.ldif

Aggiungi il seguente contenuto.


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

dove gidNumber è il GID in /etc/group per ldapuser) e caricarlo:


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

9. Aggiungi un file LDIF con le definizioni per l'utente 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

e caricalo:


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

Allo stesso modo, puoi eliminare la voce utente appena creata:


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

10. Consenti la comunicazione attraverso il firewall:


firewall-cmd --add-service=ldap

11. Ultimo, ma non meno importante, consenti al client di autenticarsi utilizzando LDAP.

Per aiutarci in questo passaggio finale, utilizzeremo l'utilità authconfig (un'interfaccia per configurare le risorse di autenticazione del sistema).

Utilizzando il comando seguente, viene creata la directory home per l'utente richiesto se non esiste dopo che l'autenticazione contro il server LDAP ha avuto esito positivo:


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

Riepilogo

In questo articolo abbiamo spiegato come impostare l'autenticazione di base contro un server LDAP. Per configurare ulteriormente la configurazione descritta nella presente guida, fare riferimento al Capitolo 13 – Configurazione LDAP nella Guida dell'amministratore del sistema RHEL 7, prestando particolare attenzione alle impostazioni di sicurezza utilizzando TLS.

Sentiti libero di lasciare qualsiasi domanda tu possa avere utilizzando il modulo di commento qui sotto.