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:
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:
- 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
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:
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
Andiamo ad inserirlo nel Database:
slapadd -n 2 -l /radice.ldif
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/
Infine editiamo il file /etc/openldap/ldap.conf andando a inserire la BASE ( Nodo Radice ) e l’URI di connessione:
Riavviamo il servizio slapd per vedere se è andato tutto ok:
service slapd restart
Per vedere se il Nodo Radice è stato creato andiamo a dare il seguente comando:
slapcat -n 2
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
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
Andiamo su browser e digitiamo l’ip del server che in questo caso è 192.1668.0.34 seguito dalla directory phpldapadmin:
Clicchiamo su Autentica e inseriremo la login di cui abbiamo parlato precedentemente:
A sinistra avremo il nodo radice e a destra potremmo creare nuove entry:
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:
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:
Non resta che riavviare apache:
service httpd restart
E come vedremo all’inserimento dell’URL ci verrà posta la finestra di Login:
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:
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.
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.
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/micheledn: 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
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
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
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: inetOrgPersondn: cn=pippo,cn=email,dc=ufficio,dc=dati
sn: pip
cn: pippo
mail: pippo23@gmail.com
objectClass: inetOrgPerson
Per aggiungerlo diamo sempre il comando visto precedentemente:
ldapadd -x -D “cn=admin,dc=ufficio,dc=dati” -W -f schema3.ldif
Per avere cosi a livello di interfaccia la seguente struttura:
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
E infatti rimane solamente cn=pippo:
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