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.

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:

Spiegazione dettagliata del diagramma precedente.
- 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.
- Un attributo è un pezzo di informazione associato a un record (ad esempio, indirizzi, numeri di telefono di contatto disponibili e indirizzi email).
- 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:

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:
- PASSWORD è la stringa hash ottenuta in precedenza.
- cn=config indica le opzioni di configurazione globali.
- 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:

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

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

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

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

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

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/