[successivo] [precedente] [inizio] [fine] [indice generale]


Capitolo 19.   OpenLDAP

LDAP (Lightweight directory access protocolo) è un protocollo per accedere a servizi basati su directory generalmente in standard X.500. Il servizio di trasferimento delle directory è basato su protocollo Tcp/Ip ed il modello è di tipo client/server. I dati delle directory possono essere distribuiti su più server LDAP i quali formano una DIT (Directory Information Tree). Il server interrogato restituisce al client un puntatore alla risorsa, che così può essere facilmente recuperata.

19.1   X.500

19.2   Introduzione

Il modello di informazioni di LDAP è basato su indentità dette entry. Ogni entry rappresenta una collezione di attributi che è riferita ad uno ed uno solo DN (Distinguished Name). Un attributo ha come riferimento principale un tipo cui sono associati uno o più valori. La sintassi dei valori è strettamente legata alla natura stessa del tipo: un nome di persona, un indirizzo di posta ecc.

Queste informazioni sono organizzate in una struttura gerarchica ad albero dove, alla radice risiedono i vertici dell'organizzazione fino a scendere alle unità organizzative esempio: stato, uffici, persone e così via. L'albero è generalmente organizzato come un dominio Internet; questo facilita la ricerca delle directory LDAP utilizzando il servizio Dns.

Ogni entry possiede un attributo speciale denominato «classe oggetto» o objectClass che controlla quali sono gli attributi richiesti ed ammessi. Il valore associato allo objectClass definisce lo schema della entry, quindi le sue regole.

La entry viene referenziata attraverso il suo DN, il quale è costruito con il nome proprio della entry detto RDN (Relative Distinguished Name) concatenato con tutte le entry precedenti nella struttura gerarchica.

uid=umbertoz,ou=lab,dc=inf,dc=besta

Far riferimento al DN di una entry assegnata all'utente umberto. Gli RDN sono: uid, ou e dc. LDAP sostanzialmente serve per ricercare informazioni all'interno dell'albero delle directory; tuttavia è possibile aggiungere, modificare o cancellare le entry. La possibilità di costruire filtri consente di semplificare o affinare i criteri di ricerca.

19.3   Servizi

L'attività delle directory in LDAP è distribuita su due servizi: slapd e slurpd. Il primo è il server delle directory, il secondo consente di replicare le informazioni di un server principale o master ai server secondari.

19.3.1   Slapd

Slapd è il demone per il server delle directory: risponde alle richieste dei client e distribuisce le informazioni ricercate. Sfrutta il servizio Tcp/Ip in ascolta sulla porta predefinita 389.

# /etc/init.d/slapd start

Avvia il demone slapd in una distribuzione Debian GNU/Linux.

I file di configurazione principali sono /etc/ldap/ldap.conf e /etc/ldap/slapd.conf. Il primo fornisce le informazioni predefinite ai client relative al servizio LDAP; ogni utente può rifiutarle e sostituirle con il file .ldaprc nella propria home directory. Il secondo contiene le informazioni globali per il servizio slapd e slurpd.

19.3.2   Slurpd

Slurpd è il demone che distribuisce le informazioni da un server LDAP ad un altro. La replica è garantita da un registro di replicazione prodotto da Slapd che Slurpd si incarica di propagare agli altri server.

# /etc/init.d/slurpd start

Avvia il demone slurpd in una distribuzione Debian GNU/Linux.

Se il demone slapd non produce il registro di replicazione slurpd non viene avviato.

19.3.3   # /etc/ldap/slapd.conf

In listato 19.5 è presentato un semplice file di configurazione per uno schema di directory che fa riferimento all'organizzazione inf.besta.

Il file è organizzato in una serie di configurazioni globali seguite da configurazioni relative al tipo di motore di database e al database utilizzato per memorizzare l'albero delle directory. Quest'ultimo può essere presente in quantità, dipende da quanti database si utilizzzano e possono sovrascrivere le opzioni definite nella sezione globale. I commenti iniziano con il carattere '#' e gli argomenti sono separati con lo spazio bianco.

<configurazioni globali>

backend tipo
database tipo
<configurazioni del database>

database tipo
<configurazioni del database>

...
backend tipo
database tipo
<configurazioni del database>

database tipo
<configurazioni del database>

Listato 19.5. File di configurazione di Slapd

# Schema e definizione delle objectClass
include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/inetorgperson.schema

# Impone la corrispondenza tra le entry e le
# classi oggetto di definzione
schemacheck     on

# File pid del demone
pidfile         /var/run/slapd.pid

# Lista delle opzioni da passare al demone slapd
argsfile        /var/run/slapd.args

# Il file di registro per la replicazione delle directory
replogfile\011/var/lib/ldap/replog

# Aumenta le informazioni sul file di registro
loglevel        0

backend ldbm

# Il tipo di database utilizzato, ldbm e' il predefinito
database        ldbm
suffix\011\011"dc=inf,dc=besta"
rootdn\011\011"cn=Manager,dc=inf,dc=besta"
rootpw\011\011{SSHA}toMOC43opY83aCk9JJhcT4sF7s6bzPCr

# Directory dove risiede il database
directory       "/var/lib/ldap"

# Opzioni per l'indicizzazione
index objectClass eq

# Registra la data di modifica della entry
lastmod on

# Liste per il controllo di accesso (ACL)
access to attribute=userPassword
       by dn="cn=Manager,dc=inf,dc=besta" write
       by anonymous auth
       by self write
       by * none

access to *
       by dn="cn=Manager,dc=inf,dc=besta" write
       by * read

19.3.4   Slappasswd

slappasswd [options]

Alcune opzioni

Opzione Descrizione
-v Visualizza informazioni dettagliati
-u Genera una password conforme allo standard RFC2307 per l'attributo userPassword. Viene impiegato per ragioni di compatibilità con le versioni precedenti di LDAP.
-s [password] Genera il codice hash della password password.
-h scheme Sono ammessi i seguenti schemi di codifica: CRYPT, MD5, SMD5, SSHA e SHA che è lo schema predefinito.
-c crypt-salt-format Specifica il formato del vettore salt quando viene utilizzato lo schema CRYPT. La stringa deve essere in formato sprintf e viene generata casualmente. Valori ammissibile possono essere %.2s con due caratteri o $1$%.8s che fornisce otto caratteri per le versioni di crypt che utilizzano la codifica MD5. Il valore predefinito è %s che garantisce un vettore di salt con 31 caratteri.

Slappasswd viene utilizzato per generare una password da poter utilizzare come password per l'attributo userPasswrod o per l'attributo roopwd nel file /etc/ldap/slapd.conf.

# slappasswd -s abcd1234[Invio]

{SSHA}ctb39cvwzB20syKGlwSQHOvjR6ONWvQv

Genera il codice di hash della password abcd1234.

19.3.5   Aggiungere una entry

Le entry vengono aggiunte al servizio di directory LDAP attraverso un file di dati in formato LDIF (LDAP Data Interchange Format). I programmi ldapadd e ldapsearch consentono di manipolare le entry.

dn: <distinguished name>
<attrdesc>: <attrvalue>
<attrdesc>: <attrvalue>
<attrdesc>:: <base64-encoded-value>
<attrdesc>:< <URI>

Per facilitare la scrittura degli attributi una linea può essere continuata inserendo un singolo carattere di tabulazione o uno spazio vuoto in quella successiva. I commenti iniziano con il carattere '#'. Multiple definizioni dello stesso attributo sono permesse.

I valori codificati nella notazione base64 iniziano con '::'; le URI con il carattere ':<'.

Listato 19.8. Un esempio di file LDIF

dn: uid=umbertoz,dc=inf,dc=besta
objectClass: top
objectClass: account
objectClass: posixAccount
cn: umbertoz
uid: umbertoz
uidNumber: 1001
gidNumber: 100
homeDirectory: /home/umbertoz
loginShell: /bin/bash
userPassword: {SSHA}UeIpGls27cg0uak7Va2mDHT3SRoZiuV0

In listato 19.8 è rappresentato il file account.ldif in formato LDIF.

# # ldapadd -x -D "cn=Manager,dc=inf,dc=besta" -W -f account.ldif[Invio]

Aggiunge le entry organizzate nel file account.ldif. Alla richiesta di password digitare quella relativa all'amministratore LDAP realtivo al dominio inf.besta.

# # ldapsearch -x -b "uid=umbertoz,dc=inf,dc=besta"[Invio]

version: 2
 
#
# filter: (objectclass=*)
# requesting: ALL
#
 
# umbertoz, inf, besta
dn: uid=umbertoz,dc=inf,dc=besta
objectClass: posixAccount
cn: umbertoz
uid: umbertoz
uidNumber: 1001
gidNumber: 100
homeDirectory: /home/umbertoz
loginShell: /bin/bash
 
# search result
search: 2
result: 0 Success
 
# numResponses: 2
# numEntries: 1

Ricerca nell'albero delle directory relativo al dominio inf.besta il DN relativo alla uid=umberto.

19.3.6   Cancellare una entry

Per cancellare una entry presente nel database si può utilizzare un il file account-del.ldif in formato LDIF come in listato 19.10.

Listato 19.10. Un esempio di file LDIF.

dn: uid=umbertoz,dc=inf,dc=besta
changetype: delete

# # ldapadd -x -D "cn=Manager,dc=inf,dc=besta" -W -f account-del.ldif[Invio]

Elimina la entry relativa all'utente umbertoz.

19.3.7   Modificare la password

La password relativa all'oggetto userPassword può essere modificata attraverso il comando ldappasswd.

# # ldappasswd -x -S -D "cn=Manager,dc=inf,dc=besta" "uid=umbertoz,dc=inf,dc=besta" -W[Invio]

New password:
Re-enter new password:
Result: Success (0)

Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome openldap.html

[successivo] [precedente] [inizio] [fine] [indice generale]