Premier Training & Business Partner Red Hat

LDAP: Installazione e Configurazione tramite OpenLDAP su RHEL / CentOS 6

Michele Milaneschi
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

In questo articolo parleremo di LDAP.

L’acronimo LDAP sta per Lightweight Directory Access Protocol;

Si tratta di una sorta di database che viene utilizzato nel momento in cui abbiamo bisogno di centralizzare delle utenze, avendo cosi la gestione degli utenti e degli accessi ai vari servizi localizzata in un unico posto nella nostra rete LAN.

Il concetto di database su LDAP esce un po’ dalla logica dei database comuni come mysql perchè non si tratta di un database relazionale, ma non per questo deve essere scartato, visto che per la gestione delle utenze in maniera centralizzata è il database maggiormente usato, anche perchè ci sono molti servizi che si possono appoggiare a LDAP per poterne usufruire.

Se vogliamo fare qualche esempio possiamo citare la creazione di una rubrica centrale dove i vari client di posta elettronica possono accedere piuttosto che l’autenticazione a delle risorse condivise messe a disposizione tramite Samba, piuttosto che l’autenticazione su Apache.

I modi per usarlo come vediamo sono molti e i servizi che ci si può appoggiare sono svariati.

  • La struttura su come vengono organizzate le informazioni nel database è una struttura gerarchica ad albero, per fare un esempio possiamo citare la struttura che rispecchia il DNS.
  • Ogni informazione al suo interno viene ricercata tramite un DN ( Distingued Name ) che possiamo definire come il percorso per poter arrivare all’informazione.
  • La struttura di uno schema LDAP è fatta a nodi dove si parte da un nodo radice o root a cui si connettono altri nodi.
  • Ogni nodo connesso ha un nodo genitore eccetto il nodo radice.
  • Ogni nodo rappresenta un oggetto con determinati attributi e per accedere alle informazioni contenute nel nodo si deve specificare il suo percorso.

Facciamo un esempio grafico di uno schema LDAP:

ldap3

In uno schema LDAP vengono adottate delle sigle, vediamo di capire di cosa si trattano:

  • dn: Distingued Name
  • uid: User id
  • cn: Common Name
  • sn: Surname
  • l: Location
  • ou: Organizational Unit
  • o: Organization
  • dc: Domain Component
  • st: State
  • c: Country

Per accedere all’informazione contenuta in un nodo specifico bisogna specificare il suo percorso:

ldap4

  • Le informazioni all’interno dello schema vengono chiamate entry
  • Ogni entry è univocamente individuata da un DN (Distingued Name) e il suo significato è stabilito mediante degli attributi particolari detti objectclass
  • Ogni entry può essere inserita tramite più modalità, tra cui possiamo usare un interfacciamento grafico piuttosto che dei file con estensione .ldif opportunamente strutturati che successivamente vedremo meglio.

Per concludere questa panoramica possiamo inoltre dire che:

  • LDAP è un database che può essere replicato
  • Gli accessi in lettura sono superiori a quelli in scrittura
  • Esso fornisce un sistema di protezione e autenticazione alle informazioni contenute in esso.

 

LDAP tramite OpenLDAP e phpLDAPadmin

Adesso iniziamo a vedere come procedere con l’implementazione di LDAP tramite OpenLDAP e come avere un primo interfacciamento tramite il pannello gestionale phpLDAPadmin.

Procediamo all’installazione di OpenLDAP e impostiamo l’ autoavvio al boot:

yum install openldap-servers

chkconfig slapd on

Procediamo alla sua configurazione:

Su una distribuzione Ubuntu possiamo eseguire la configurazione tramite il seguente comando:

dpkg-reconfigure slapd

Dove tramite una serie di interfacce che ci vengono proposte portiamo a termine la configurazione in maniera abbastanza rapida.

Invece su una distribuzione RHEL / CentOS eseguiamo la configurazione tramite i seguenti comandi:

  • Copiamo da /usr/share/openldap-servers/ il file di configurazione slapd.conf in /etc/openldap
  • Copiamo da /usr/share/openldap-servers/ il file DB_CONFIG in /var/lib/ldap
  • Configuriamo il file /etc/slapd.conf
  • Impostiamo ldap come proprietario e gruppo delle directory e del suo contenuto in: /var/lib/ldap e /etc/openldap/slapd.d
  • Configuriamo il file /etc/ldap.conf

 

Copiamo i 2 file:

cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf

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

Creiamo la password per amministrare la configurazione di OpenLDAP e ce la copiamo:

slappasswd

ldap5

Adesso andiamo alla configurazione del file /etc/slapd.conf:

  • Come nodo radice avremo: ufficio.dati
  • Il nodo che avrà accesso alla struttura sarà: cn=admin

 

La Login che vedremo successivamente sarà strutturata nel seguente modo:

  • cn=admin,dc=ufficio,dc=dati
  • Come password avremo la password che abbiamo impostato precedentemente tramite slappasswd

Procediamo alla configurazione di /etc/slapd.conf andando a inserire i parametri corretti:

ldap6

Eliminamo i file che sono presenti in /etc/openldap/slapd.d/ e andiamo a cambiare proprietario e gruppo di /var/lib/ldap e /etc/openldap/slapd.d:

rm -Rf /etc/openldap/slapd.d/*

chown ldap:ldap -R /var/lib/ldap

chown ldap:ldap -R /etc/openldap/slapd.d/

A questo punto non resta che creare il nodo radice tramite un file con estensione .ldif che chiameremo radice.ldif:

Il file sarà cosi strutturato:

dn: dc=ufficio,dc=dati
dc: ufficio
objectClass: dcObject

ldap7

Andiamo ad inserirlo nel Database:

slapadd -n 2 -l /radice.ldif

ldap8

Adesso diamo il comando slaptest e reimpostiamo i permessi di ldap su tutti e 2 i percorsi:

slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

chown ldap:ldap -R /var/lib/ldap

chown ldap:ldap -R /etc/openldap/slapd.d/

ldap9

Infine editiamo il file /etc/openldap/ldap.conf andando a inserire la BASE ( Nodo Radice ) e l’URI di connessione:

ldap99

Riavviamo il servizio slapd per vedere se è andato tutto ok:

service slapd restart

ldap10

Per vedere se il Nodo Radice è stato creato andiamo a dare il seguente comando:

slapcat -n 2

ldap11

Per vedere meglio come stanno le cose potremmo installare il phpLDAPadmin che ci consente di operare tramite interfaccia grafica.

Vediamo come installarlo:

yum install -y httpd

cd /root

wget http://downloads.sourceforge.net/project/phpldapadmin/phpldapadmin-php5/1.2.3/phpldapadmin-1.2.3.zip

ldap12

unzip phpldapadmin-1.2.3.zip

mv phpldapadmin-1.2.3 phpldapadmin

cp -Rf phpldapadmin /var/www/

mv /var/www/phpldapadmin/config/config.php.example /var/www/phpldapadmin/config/config.php

service httpd restart

ldap13

Andiamo su browser e digitiamo l’ip del server che in questo caso è 192.1668.0.34 seguito dalla directory phpldapadmin:

http://192.168.0.34/phpldapadmin

ldap14

Clicchiamo su Autentica e inseriremo la login di cui abbiamo parlato precedentemente:

ldap15

A sinistra avremo il nodo radice e a destra potremmo creare nuove entry:

ldap16

 

Autenticazione su Apache tramite OpenLDAP

Come abbiamo detto precedentemente, ci sono molti servizi che si possono appoggiare a un server LDAP:

Iniziamo a vedere un esempio di implementazione di uno schema per l’autenticazione di Apache su una Directory:

ldap17

Quello che vogliamo fare è:

  • Creare un VirtualHost chiamato: miodominio.it
  • Creare una Directory di nome restricted in /var/www
  • Garantire l’accesso alla Directory restricted solamente agli utenti dell’alberatura: cn=webserver,dc=ufficio,dc=dati che nel nostro caso sono michele e nicola

 

Ci creiamo il VirtualHost con la dichiarazione della Directory e all’interno della Directory inseriamo i seguenti parametri:

AuthName “Area Riservata, Insrire i dati di Autenticazione”
AuthType basic
AuthBasicProvider ldap
AuthLDAPURL: ldap://ip/percorso_alberatura
Require valid-user

Vediamo di capire cosa indicano questi paramentri:

  • AuthName: Indica il messaggio che ci viene mostrato
  • AuthType: Indica il tipo di autenticazione
  • AuthBasicProvider: Indica il provider dal quale vogliamo ottenere l’autenticazione
  • AuthLDAPURL: Indica la stringa di connessione con il percorso dell’alberatura
  • Require valid-user: Indica che è obbligatorio un utente valido per garantire l’accesso

 

Avremo quindi il nostro VirtualHost strutturato nel seguente modo:

ldap18

Non resta che riavviare apache:

service httpd restart

E come vedremo all’inserimento dell’URL ci verrà posta la finestra di Login:

ldap19


Utilizzo di una Rubrica di indirizzi tramite OpenLDAP

Oltre a questo potremmo condividere una rubrica di indirizzi email importabile in svariati client di posta, vediamo come fare.

Creiamo il percorso ou=email,dc=ufficio,dc=dati e ci inseriamo 2 utenti con relativi indirizzi email:

ldap20

Fatto ciò da un client di posta come Outlook Express inseriamo come Serivizio di elenchi in linea l’indirizzo ip del server LDAP ( 192.168.0.34 ) e infine il percorso dell’alberatura.

ldap21

Avviamo la ricerca dei contatti nel percorso specificato dicendogli ad esempio che gli indirizzi terminano con gmail.com e vediamo che vengono mostrati i 2 indirizzi dei 2 utenti che possiamo aggiungere alla nostra rubrica dei contatti.

ldap22

OpenLDAP: Creazione di file .ldif

Per concludere vediamo come poter creare dei file con estensione .ldif per poter costruire una nostra alberatura.

Innanzitutto dobbiamo installare il pacchetto openldap-clients tramite il comando:

yum install -y openldap-clients

Successivamente per vedere come è fatto un file .ldif andiamo a vedere la struttura dei file che abbiamo creato precedentemente tramite interfaccia grafica dando il seguente comando:

slapcat

Ciò che vediamo non è altro che la struttura di come viene strutturato un file .ldif e ogni file viene separato da una riga vuota per maggior chiarezza.

Vogliamo creare una Unità Organizzativa chiamata webserver dove al suo interno andremo ad inserirci i rispettivi utenti michele e nicola.

La struttura del file .ldif sarà nel seguente modo:

# Creazione unità organizzativa:

dn: ou=webserver,dc=ufficio,dc=dati
ou: webserver
objectClass: organizationalUnit

# Creazione utenti michele e nicola con password all’interno dell unità webserver:

dn: uid=michele,cn=webserver,dc=ufficio,dc=dati
uid: michele
cn: webserver
objectClass: account
objectClass: posixAccount
userPassword: {SSHA}uoN2ysgyTku8/tXrPWZWga68ScselMoA
uidNumber: 500
gidNumber: 500
homeDirectory: /home/michele

dn: uid=nicola,cn=webserver,dc=ufficio,dc=dati
uid: nicola
cn: webserver
objectClass: account
objectClass: posixAccount
userPassword: {SSHA}uoN2ysgyTku8/tXrPWZWga68ScselMoA
uidNumber: 501
gidNumber: 501
homeDirectory: /home/nicola

ldap23

La password viene generata e copiata nel file dando il segeuente comando:

slappasswd

Per implementare la struttura dichiarata nel file usiamo il comando ldapadd nella seguente struttura:

ldapadd -x -D “login_amministrazione_ldap” -W -f nomefile.ldif

Nel nostro caso il file ldif si chiama schema.ldif e la login è “cn=admin,dc=ufficio,dc=dati” quindi il comando che daremo sarà il seguente:

ldapadd -x -D “cn=admin,dc=ufficio,dc=dati” -W -f schema.ldif

ldap24

Un file ldif per la creazione di un PosixGroup può essere strutturato nel seguente modo:

dn: cn=email,dc=ufficio,dc=dati
cn: email
gidNumber: 502
objectClass: posixGroup

ldap25

Un file ldif per la creazione di una rubrica di indirizzi email all’interno del PosixGroup creato sopra per un client di posta può essere strutturato nel seguente modo:

dn: cn=michele,cn=email,dc=ufficio,dc=dati
sn: mila
cn: michele
mail: michi@gmail.com
objectClass: inetOrgPerson

dn: cn=pippo,cn=email,dc=ufficio,dc=dati
sn: pip
cn: pippo
mail: pippo23@gmail.com
objectClass: inetOrgPerson

ldap26

 

Per aggiungerlo diamo sempre il comando visto precedentemente:

ldapadd -x -D “cn=admin,dc=ufficio,dc=dati” -W -f schema3.ldif

ldap27

Per avere cosi a livello di interfaccia la seguente struttura:

ldap28

Per eliminare una entry usiamo il comando ldapdelete strutturato nel seguente modo:

ldapdelete -x “percorso_da_eliminare” -D “ login_amministrazione_ldap” -W

Nel nostro caso vogliamo eliminare cn=michele dal percorso “cn=email,dc=ufficio,dc=dati”, daremo quindi il seguente comando:

ldapdelete -x “cn=michele,cn=email,dc=ufficio,dc=dati” -D “cn=admin,dc=ufficio,dc=dati” -W

ldap29

E infatti rimane solamente cn=pippo:

ldap30

Ogni file ldif può essere creato nel modo che più si vuole, in base alle proprie esigenze e l’interfacciamento grafico ci aiuta a capire come poterlo strutturare per velocizzare

Info about author

Michele Milaneschi

RHCE Consultant