Server OpenLDAP

LDAP è un acronimo per "Lightweight Directory Access Protocol", una versione semplificata del protocollo X.500. La directory impostata in questa sezione sarà usata per l'autenticazione. LDAP può comunque essere usato in diversi modi: autenticazione, directory condivisa (per i client mail), rubrica indirizzi. ecc...

Per descrivere LDAP velocemente, tutte le informazioni vengono archiviate in una struttura ad albero. Con OpenLDAP si ha la libertà di scegliere lo sviluppo dell'albero delle directory (il "Directory Information Tree", DIT). Per iniziare, si prende un esempio di un albero basilare con due nodi al di sotto della radice.

  • Il nodo «People» è dove i propri utenti vengono salvati

  • Il nodo «Groups» è dove i propri gruppi vengono salvati

Prima di iniziare, è necessario determinare quale sarà la radice della propria directory LDAP. In modo predefinito, l'albero sarà determinato dal proprio FQDN (Fully Qualified Domain Name), se il domino è "example.com" (usato in questo esempio), la radice sarà "dc=example,dc=com".

Installazione

Per prima cosa, installare il demone server OpenLDAP slapd e ldap-utils, un pacchetto contenente le utilità di gestione LDAP:

sudo apt-get install slapd ldap-utils

Il processo di installazione chiederà la password di amministratore della directory LDAP e la conferma.

Una volta installato slapd, la directory può essere configurata usando dpkg-reconfigure:

sudo dpkg-reconfigure slapd

Seguire le istruzioni a schermo che consentono di configurare diverse opzioni di slapd. Per la maggior parte, i valori predefiniti sono più che validi, ma se il nodo radice differisce dal FQDN del server, assicurarsi di inserire il nome giusto.

Popolare LDAP

La directory è stata creata durante l'installazione e la riconfigurazione, ora è necessario popolarla. Verrà riempita con uno schema "classico", compatibile con le applicazioni di rubrica e con gli account Unix Posix. Gli account posix consentono l'autenticazione di varie applicazioni, come quelle web, applicazioni emal MTA (Mail Transfer Agent), ecc...

[Nota]

Affinché le applicazioni esterne possano autenticarsi via LDAP, è necessario che siano configurate a tal fine. Per come fare, fare riferimento alla documentazione di ogni singola applicazione.

Le directory LDAP possono essere popolate con file LDIF (Ldap Directory Interchange Format). Copiare il seguente file LDIF di esempio e chiamarlo example.com.ldif:

dn: ou=people,dc=example,dc=com
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=example,dc=com
objectClass: organizationalUnit
ou: groups

dn: uid=john,ou=people,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: john
sn: Doe
givenName: John
cn: John Doe
displayName: John Doe
uidNumber: 1000
gidNumber: 10000
userPassword: password
gecos: John Doe
loginShell: /bin/bash
homeDirectory: /home/john
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: john.doe@example.com
postalCode: 31000
l: Toulouse
o: Example
mobile: +33 (0)6 xx xx xx xx
homePhone: +33 (0)5 xx xx xx xx
title: System Administrator
postalAddress: 
initials: JD

dn: cn=example,ou=groups,dc=example,dc=com
objectClass: posixGroup
cn: example
gidNumber: 10000

In questo esempio sono stati impostati la struttura della directory, un utente e un gruppo. In altri esempi potrebbe essere possibile notare, in ogni voce, l'elemento objectClass: top, ma dato che è il comportamento predefinito, non è necessario inserirlo esplicitamente.

Per aggiungere le voci alla directory LDAP:

  • Fermare slapd:

    sudo /etc/init.d/slapd stop
    
  • Aggiungere il contenuto:

    sudo slapadd -l example.com.ldif
    
  • Avviare il demone LDAP:

    sudo /etc/init.d/slapd start
    

È possibile verificare che il contenuto è stato aggiunto correttamente con gli strumenti presenti nel pacchetto ldap-utils . Per eseguire una ricerca nella directory LDAP:

ldapsearch -xLLL -b "dc=example,dc=com" uid=john sn givenName cn

dn: uid=john,ou=people,dc=example,dc=com
cn: John Doe
sn: Doe
givenName: John

Una semplice spiegazione:

  • -x: non usa il metodo di autenticazione, predefinito, SASL.

  • -LLL: disabilita la stampa di informazioni sullo schema LDIF.

Impostare ACL

L'autenticazione richiede accesso al campo della password, che non dovrebbe essere accessibile in modo predefinito. Un altro problema è che durante la modifica della password usando passwd, shadowLastChange deve essere accessibile dall'utente autenticato. Il seguente codice, da /etc/ldap/slapd.conf, mostra le impostazioni ACL predefinite che permettono all'utente admin e a quelli autenticati di accedere a shadowLastChange:

access to attrs=userPassword,shadowLastChange
        by dn="cn=admin,dc=example,dc=com" write
        by anonymous auth
        by self write
        by * none

Replicazione di LDAP

Il servizio LDAP diventa molto spesso un servizio critico all'interno di un sistema informativo: molteplici sistemi dipendono da LDAP per l'autenticazione, l'autorizzazione, mai, et cetera. È buona norma quindi configurare un sistema ridondante.

La replicazione è ottenuta utilizzando il motore Syncrepl. Syncrepl consente alla directory di essere sincronizzata utilizzando un sistema push o pull. In una configurazione "push" un server «primario» eseguirà il "push" degli aggiornamento a un server «secondario», mentre un approccio "pull" consente la replicazione via sincronizzazione a intervalli di tempo.

Quello che segue è un esempio di una configurazione push push. Per prima cosa è necessario impostare il provider slapd de-commentando la seguente riga in /etc/ldap/slapd.conf:

rootdn          "cn=admin,dc=example,dc=com"

Al di sotto della riga rootdn aggiungere:

moduleload  syncprov.la
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100

Riavviare slapd:

sudo /etc/init.d/slapd restart

Nel server separato OpenLDAP configurare il demone slapd de-commentando la riga rootdn in /etc/ldap/slapd.conf:

rootdn          "cn=admin,dc=example,dc=com"

Aggiungere quanto segue dopo la voce "rootdn":

syncrepl rid=123
	 provider=ldap://ldap01.example.com:389
	 type=refreshAndPersist
         searchbase="dc=example,dc=com"
         filter="(objectClass=*)"
         scope=sub
         schemachecking=off
         bindmethod=simple
         binddn="uid=john,ou=people,dc=example,dc=com"
         credentials=password
[Nota]

Questo esempio utilizza l'utente john creato per autenticare il processo di sincronizzazione. Assicurarsi di usare un account con privilegi sufficienti e di sostituire ldap://ldap01.example.com:389 con il nome host appropriato.

Ora riavviare il demone slapd:

sudo /etc/init.d/slapd restart

Se tutto funziona correttamente, dovrebbe essere possibile eseguire l'esempio ldapsearch precedente sul server con la directory replicata.

ldapsearch -xLLL -b "dc=example,dc=com" uid=john sn givenName cn

Il demone slapd invia le proprie registrazioni verso /var/log/syslog, se qualche cosa non funziona correttamente, controllare lì per gli eventuali errori o altre informazioni utili alla risoluzione dei problemi.

Risorse