Creazione di un server LDAP

Lun, 05/12/2005 - 23:54

Creazione di un server LDAP

Inviato da pietro 5 commenti

Guida pratica per l'installazione e la configurazione di un server LDAP.

Creazione di un server LDAP

In questa guida cercheremo di fornire le informazioni minime necessarie per installare e configurare un server LDAP.

Introduzione

LDAP e' la sigla di Lightweight Directory Access Protocol, un protocollo leggero per accedere a servizi di directory; OpenLDAP e' un'implementazione Open Source al protocollo LDAP.

In sostanza si tratta di un database server in cui i dati sono organizzati in maniera gerarchica.
Uno degli utilizzi e' quello di memorizzare gli utenti di una azienda: la gerarchia e' data dai dipartimenti, ed associati agli utenti ci sono le informazioni di autenticazione, gli indirizzi, i numeri di telefono, email, ecc. I sistemi UNIX e Windows hanno anche dei moduli per l'autenticazione degli utenti tramite LDAP: memorizzando le informazioni di login su un server LDAP, si ottiene una gestione omogenea e consistente degli utenti in un ambiente con piattaforme etereogenee; gli utenti accedono con la stessa userid e password su tutti i sistemi.

Il sito http://sourceforge.net/ gestisce oltre un milione di utenze tramite LDAP.

Installazione

Il software si installa con:

$ apt-get install slapd ldap-utils

I file di configurazione si trovano nella directory /etc/ldap, ma la procedura di installazione provvede a configurare il server durante la fase di configurazione del pacchetto.

Inserire il DNS domain name, il nome dell'organizzazione (inventarsene eventualmente una), e la password di amministratore.

Esempio

DNS Domain Name: domain.it
Name of your organization: Pippo S.p.A.
Admin password: ***** (max 8 caratteri)

A questo punto il server dovrebbe essere configurato ed in esecuzione.

Con il comando

$ ps aux |grep slapd |grep -v grep

dovreste vedere il processo in esecuzione.

I file di configurazione sono nella directory /etc/ldap, mentre il database e' situato in /var/lib/ldap.

Creazione del database

Eseguendo il comando (da root)

$ slapcat

vengono mostrati i record attualmente presenti sul database.

Il formato con cui vengono mostrati e' LDIF, LDAP Data Interchange Format, un formato testuale in cui i record sono separati da una riga vuota ed i campi identificati dal nome del campo seguito da ":".

I campi principali sono:

dn: Distinguished Name, chiave identificativa del record
cn: Canonical Name, nome descrittivo del record
sn: Surname, cognome della persona
o: Organization, organizzazione di appartenenza
dc: Domain Component, parte del dominio

Eseguire "man ldif" per una spiegazione del formato.

Il record dell'amministratore, nel nostro esempio, ha il seguente DN:

dn: cn=admin,dc=domain,dc=it

La gerarchia e' data dalle componenti, separate da virgola, del DN; la radice e' l'elemento piu' a destra. Nell'esempio la gerarchia e' la seguente:

dn=it
|
dn=domain
|
cn=admin

Per creare il database si possono seguire diverse strade:

1. utilizzo dei comandi client ldapadd, ldapmodify e ldapdelete
2. utilizzo dei comandi server slapadd e slapcat
3. utilizzo di un frontend grafico

In questa guida ci concentreremo sulla seconda strada.

Per preparare il file LDIF procedere nel seguente modo:

1. eseguire il comando slapcat reindirizzando l'output su un file (es. addr.ldif)
2. aggiungere i record al file
3. importare il file

Il primo passo serve per registrare nel file LDIF il contenuto attuale del file: dopo l'installazione e la configurazione l'output del comando slapcat mostrera' solo la root e l'utente amministratore con la password criptata.

Esempio:

dn: dc=domain,dc=it
objectClass: top
objectClass: dcObject
objectClass: organization
o: Pippo S.p.A.
dc: domain
structuralObjectClass: organization
entryUUID: e9e5dd28-fa1f-1029-80bb-c4a21a7bb745
creatorsName: cn=anonymous
modifiersName: cn=anonymous
createTimestamp: 20051205211449Z
modifyTimestamp: 20051205211449Z
entryCSN: 20051205211449Z#000001#00#000000

dn: cn=admin,dc=domain,dc=it
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e2NyeXB0fVRYV1RxZG5pSURhQ3M=
structuralObjectClass: organizationalRole
entryUUID: e9eb9fe2-fa1f-1029-80bc-c4a21a7bb745
creatorsName: cn=anonymous
modifiersName: cn=anonymous
createTimestamp: 20051205211449Z
modifyTimestamp: 20051205211449Z
entryCSN: 20051205211449Z#000002#00#000000

dn: c=IT,dc=domain,dc=it
objectclass: country
c: IT
description: Italia

dn: o=ACME,c=IT,dc=domain,dc=it
objectclass: organization
o: ACME
telephonenumber: 555-012345

dn: cn=Mario Rossi,c=IT,dc=domain,dc=it
objectclass: inetOrgPerson
cn: Mario Rossi
sn: Rossi
o: ACME
homePhone: 555-323456
mobile: 555-23456
mail: mario.rossi@domain.it
mail: mrossi@anotherdomain.com

Fate particolare attenzione ad inserire lo stesso dominio che avete inserito nella configurazione: nel nostro esempio "domain.it".

Molto importante e' l'attributo DN, Distinguished Name, che e' la "chiave" del record che lo identifica univocamente e deve essere la prima entry di ogni record. Come potete vedere la gerarchia e' data dal DN, con il livello piu' basso scritto per primo.

Ricordarsi di separare i record con una riga vuota e di non inserire ulteriori righe vuote nel file, che deve essere in formato UNIX con i caratteri di NL a fine riga.

Creare prima gli elementi della gerarchia che sono piu' vicini alla radice.

Alcuni campi possono essere specificati piu' volte, come nel caso dell'email dell'esempio precedente.

A questo punto abbiamo il file LDIF (es. addr.ldif) riempito con i nostri record; tale file sara' la copia "master" del database, sul quale andremo ad effettuare tutte le modifiche successive.

Il passo successivo consiste nell'importare il file eseguendo i seguenti passi:

1. fermare il server LDAP
2. cancellare il vecchio database
3. importare il file LDIF
4. far ripartire il server LDAP

$ /etc/init.d/slapd stop
$ \rm -f /var/lib/ldap/*
$ slapadd -v -l addr.ldif
$ /etc/init.d/slapd start

Se tutto e' andato bene dovreste vedere i record inseriti. Con il comando slapcat viene mostrato il database completo.

Fatto! Il server e' pronto per essere utilizzato. Spostatevi su un terminale di un altro utente ed eseguite il seguente comando:

$ ldapsearch -LLL -x -hlocalhost -b"dc=domain,dc=it" "(cn=*rossi*)"

dovreste vedere il record relativo a Mario Rossi appena inserito.

Per una descrizione dettagliata della sintassi del comando ldapsearch, consultate la relativa pagina del manuale.

Per comodita' allego uno script che esegue l'importazione del database:

#!/bin/sh

# Directory DB di LDAP
ldapdir=/var/lib/ldap/

# Directory temporanea dove memorizzare i file vecchi
tmpdir=/tmp/updateLDAP.$$

# Arresto di LDAP
/etc/init.d/slapd stop

# Copia della vecchia rubrica
mkdir $tmpdir
mv $ldapdir/* $tmpdir

# Iimportazione della nuova rubrica
slapadd -v -l addr.ldif

# Se ci sono problemi si ripristina la vecchia rubrica
if [ ! $? -eq 0 ]; then
rm $ldapdir/*
mv $tmpdir/* $ldapdir
fi

# Cancellazione della directory temporanea
rm -rf $tmpdir/

# Avvio di LDAP
/etc/init.d/slapd start

Per effettuare la ricerca si puo' utilizzare il seguente script:

#!/bin/sh

ldapsearch -LLL -x -hlocalhost -b"dc=domain,dc=it" "(|(cn=*${1}*)(o=*${1}*)(homePhone=*${1}*)(telephoneNumber=*${1}*)(mobile=*${1}*)(ou=*${1}*)(businessCategory=*${1}*))"

che effettua la ricerca della stringa passata come parametro in vari campi, compresi i numeri di telefono.

Se non si vuole rendere visibile il server LDAP all'esterno, ricordarsi di impostare una regola nel firewall
Strumenti

La configurazione dei software di gestione LDAP o dei programmi di posta avviene generalmente fornendo le seguenti informazioni: hostname, porta (default 389), base DN (nel nostro esempio "dc=domain,dc=it"), bind DN (username da utilizzare se si vuole proteggere il server anche per la lettura).

Conclusioni

Un server LDAP e' sicuramente uno strumento complesso, ma con pochi accorgimenti e' possibile utilizzarlo come server personale per gli indirizzi email. In questa maniera i contatti sono memorizzati esternamente ai programmi di posta, permettendo l'accesso alla rubrica da diversi programmi di posta contemporaneamente.

Il file LDIF, inoltre, e' utilizzato da molti sistemi, ed il formato testuale lo rende particolarmente adatto ad essere modificato senza l'ausilio di un software ad hoc.

Riferimenti

http://www.openldap.org/
http://www.openldap.org/doc/admin23/
http://www.rfc-editor.org/rfc/rfc2849.txt





Commenti

Ritratto di paolo
#1

Inviato da paolo il Ven, 09/12/2005 - 23:59.

Bella guida.

Grazie per il contributo, veramente ottimo e ben formattato.

Voto: 9

Paolo Mainardi
CTO Twinbit http://www.twinbit.it
Vice Presidente -- ILDN - Italian Linux DIstro Network



Ritratto di smokedhack
#2

Inviato da smokedhack il Lun, 12/12/2005 - 23:46.

Re: Bella guida.

nella guida si fa menzione di un front-end grafico... quale suggerisci/consigli?
... e poi, con questo front-end si puo amministrare il tutto alla maniera (bestemmia) di Active Directory di win? Big Grin



Ritratto di pietro
#3

Inviato da pietro il Mar, 13/12/2005 - 15:04.

Re: Bella guida.

Purtroppo (o per fortuna Wink) non conosco i tool di amministrazione di M$ AD.

In Linux ho utilizzato gq e vari tool Java, tra cui JXplorer e lbe.

In windows ne utilizzavo uno che non mi ricordo come si chiama, ma grosso modo si equivalgono tutti. Prova JXplorer, permette di copiare o spostare interi alberi e supporta il drag'n drop.

Se fai una ricerca sui repository Debian ne trovi di sicuro altri.

Ciao

Debian. Be unique.



Ritratto di franco ming
#4

Inviato da franco ming il Gio, 31/10/2013 - 15:42.

Re: Creazione di un server LDAP

Salve, la guida è ben fatta : ma la password preinstallata qual'è?
sto provando con phpldapadmin e mi restituisce l'errore Nome utente o password non validi-
con : cn=admin



Ritratto di franco ming
#5

Inviato da franco ming il Gio, 31/10/2013 - 16:05.

Re: Creazione di un server LDAP

Continua il post precedente
provo ma da :Errore: Invalid credentials (49) for user
la password è quella chiesta in fase di installazione, nella cartella /etc/ldap/ldap.conf
c'è :Admin password:Franco64
ma continua a darmi errore.
Puoi aiutarmi
Grazie per la collaborazione