[successivo] [precedente] [inizio] [fine] [indice generale]
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.
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.
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.
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.
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.
# /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> |
# 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 |
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.
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 ':<'.
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.
Per cancellare una entry presente nel database si può utilizzare un il file account-del.ldif
in formato LDIF come in listato 19.10.
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.
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