## 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...

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

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

- Per maggiori informazioni, consultare il sito web di OpenLDAP

- Anche se un po' datata, un'ottima fonte di informazioni riguardo LDAP è LDAP System Administration di O'Reilly.

Capitolo 6. Autenticazione di rete |  | Capitolo 7. DNS (Domain Name Service)