Serie RHCSA: Configurazione dell’autenticazione basata su LDAP in RHEL 7 – Parte 14

Inizieremo questo articolo delineando alcuni concetti di base su LDAP (cos’è, dove viene utilizzato e perché) e mostreremo come configurare un server LDAP e configurare un client per autenticarsi ad esso utilizzando i sistemi Red Hat Enterprise Linux 7.

RHCSA Series: Setup LDAP Server and Client Authentication – Part 14

Come vedremo, ci sono diversi altri possibili scenari di applicazione, ma in questa guida ci concentreremo esclusivamente sull’autenticazione basata su LDAP. Inoltre, si prega di tenere presente che a causa dell’ampiezza dell’argomento, ci limiteremo solo ai concetti di base qui, ma è possibile fare riferimento alla documentazione indicata nel sommario per dettagli più approfonditi.

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

Detto ciò, iniziamo.

Il nostro ambiente di test

Il nostro ambiente di test è costituito da due macchine RHEL 7:

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

Se desideri, puoi utilizzare la macchina installata in 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 permette a un client di accedere, su una rete, a informazioni memorizzate centralmente (come ad esempio un elenco di shell di accesso, percorsi assoluti delle directory home e altre informazioni tipiche degli utenti di sistema). Queste informazioni dovrebbero essere accessibili da luoghi diversi o disponibili a un gran numero di utenti finali (un altro esempio potrebbe essere un elenco di indirizzi di casa e numeri di telefono di tutti i dipendenti di un’azienda).

Mantenere tali informazioni (e altre) centralmente significa che possono essere più facilmente gestite e accessibili da tutti coloro a cui è stato concesso il permesso di utilizzarle.

Il seguente diagramma offre un’illustrazione semplificata di LDAP, e viene descritto in dettaglio di seguito:

LDAP Diagram

Spiegazione dettagliata del diagramma precedente.

  1. Un record in una directory LDAP rappresenta una singola unità di informazione ed è identificato in modo univoco da quello che viene chiamato un Nome Distinto.
  2. Un attributo è un pezzo di informazione associato a un record (ad esempio, indirizzi, numeri di telefono di contatto disponibili e indirizzi email).
  3. Ogni attributo è associato a uno o più valori costituiti da un elenco separato da spazi. Un valore univoco per record è chiamato Nome Distinto Relativo.

Detto ciò, procediamo con le installazioni del server e del client.

Installazione e configurazione di un server e di un client LDAP

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

# 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 da controllare. I seguenti passaggi dovrebbero essere eseguiti solo sul server, a meno che non sia specificato diversamente:

1. Assicurarsi che SELinux non interferisca attivando persistentemente i seguenti booleans, sia sul server che sul client:

# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

Dove allow_ypbind è necessario 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

Tenete presente che puoi disattivare, riavviare o arrestare anche il servizio 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 deve essere proprietario del directory /var/lib/ldap in modo che il server possa modificare le voci create dagli strumenti amministrativi che possono essere eseguiti solo come root (più avanti viene detto un po’ riguardo a questo).

Prima di cambiare la proprietà di questa directory ricorsivamente, copiare il file di configurazione della database di esempio per slapd in esso:

# 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 di OpenLDAP e assegna una password:

# slappasswd

come mostrato nell’immagine seguente:

Set LDAP Admin Password

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 hash ottenuta in precedenza.
  2. cn=config indica le opzioni di configurazione globali.
  3. olcDatabase indica il nome dell’istanza di database specifico e può essere generalmente trovato dentro /etc/openldap/slapd.d/cn=config.

Riferirsi al background teorico fornito in precedenza, il file ldaprootpasswd.ldif aggiungerà una voce al directory LDAP. In ogni voce, ogni riga rappresenta un attributo: valore (dove dn, changetype, add e olcRootPW sono gli attributi e le stringhe a destra di ciascuna virgola sono i loro valori corrispondenti).

Potreste voler tenere questo in mente mentre proseguiamo, e si noti che stiamo usando gli stessi nomi comuni (cn=) nel resto di questo articolo, dove ogni passo dipende dall’altro.

5. Ora, aggiungere l’entità LDAP corrispondente specificando l’URI che si riferisce all’服务器, dove solo i campi protocollo/host/porto sono ammessi.

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

L’output dovrebbe essere simile a:

LDAP Configuration

e importare 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
LDAP Definitions

6. far utilizzare a LDAP il tuo dominio nel database.

Creare un altro file LDIF, che chiamerai ldapdomain.ldif, con il seguente contenuto, sostituendo il tuo dominio (nel Componente Dominio dc=) e la password opportunamente:

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 caricalo come segue:

# ldapmodify -H ldapi:/// -f ldapdomain.ldif
LDAP Domain Configuration

7. Ora è il momento di aggiungere alcune voci al nostro directory LDAP. Gli attributi e i valori sono separati da due punti (:) nel file seguente, 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
Add LDAP Domain Attributes and Values

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

# 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 caricalo:

# 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
LDAP User Configuration

Allo stesso modo, puoi eliminare la voce dell’utente che hai appena creato:

# 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. Infine, ma non meno importante, abilita il client a autenticarsi utilizzando LDAP.

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

Utilizzando il seguente comando, viene creato il percorso home per l’utente richiesto se non esiste dopo che l’autenticazione sul server LDAP ha avuto successo:

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

Riepilogo

In questo articolo abbiamo spiegato come configurare l’autenticazione di base contro un server LDAP. Per ulteriori configurazioni del setup descritto nella presente guida, fare riferimento a Capitolo 13 – Configurazione LDAP nella guida dell’amministratore di sistema RHEL 7, prestando particolare attenzione alle impostazioni di sicurezza che utilizzano TLS.

Sentiti libero di lasciare eventuali domande utilizzando il modulo di commento qui sotto.

Source:
https://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/