<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" 
"http://docbook.org/xml/4.2/docbookx.dtd" []>
<book id="index" lang="it"><bookinfo>
<title>LDAP Linux HOWTO</title>
<pubdate>v1.09, 5 marzo 2004</pubdate>
<author><firstname>Luiz</firstname>
<othername>Ernesto Pinheiro</othername>
<surname>Mal&egrave;re</surname>
<affiliation><address><email>malere@yahoo.com</email></address></affiliation></author>
<abstract><para>In questo documento sono presenti informazioni su come 
installare, configurare ed utilizzare un Server LDAP (Lightweight Directory 
Access Protocol) su una macchina Linux. Il documento inoltre presenta dettagli 
su come creare database LDAP, aggiungere, aggiornare e cancellare informazioni 
nella directory. Questo HOWTO &egrave; in gran parte basato su informazioni 
riprese dalla documentazione LDAP dell'universit&agrave; del Michigan e dalla 
Guida dell'Amministatore OpenLDAP.
Traduzione e aggiornamenti a cura di Giulio Daprel&agrave; 
<emphasis>giulio@pluto.it</emphasis>. Revisione a cura di Hugh Hartmann 
<emphasis>hhartmann@libero.it</emphasis> 
</para></abstract>


<revhistory>
<revision><revnumber>1.09</revnumber>
<date>2004/03/05</date>
<revremark>OpenLDAP 2.2 and general corrections.</revremark></revision>

<revision><revnumber>1.08</revnumber>
<date>2003/04/02</date>
<revremark>SASL with DIGEST-MD5 authentication.</revremark></revision>

<revision><revnumber>1.07</revnumber>
<date>2002/09/16</date>
<revremark>Typo correction.</revremark></revision>

<revision><revnumber>1.06</revnumber>
<date>2002/07/17</date>
<revremark>Migration to DocBook XML standard, revision of the role document.
Introducing OpenLDAP 2.1.</revremark></revision>

<revision><revnumber>1.05</revnumber>
<date>2001/06/22</date>
<authorinitials>lepm</authorinitials>
<revremark>Correction of long lines that were causing
inconsistences on the PDF version of the document.</revremark></revision>

<revision><revnumber>1.04</revnumber>
<date>2001/02/28</date>
<authorinitials>lepm</authorinitials>
<revremark>Correction of more typos and update on the
following sections: Roaming Access, Authentication using LDAP.</revremark>
</revision>

<revision><revnumber>1.03</revnumber>
<date>2000/09/28</date>
<authorinitials>lepm</authorinitials>
<revremark>Presenting OpenLDAP 2.0, which comprises LDAPv3, as defined 
on <ulink url="ftp://ftp.isi.edu/in-notes/rfc2251.txt">RFC2251</ulink></revremark></revision>

<revision><revnumber>1.02</revnumber>
<date>2000/09/13</date>
<authorinitials>lepm</authorinitials>
<revremark>Correction of typos and addition of the section History of 
Releases.</revremark></revision>

<revision><revnumber>1.01</revnumber>
<date>2000/02/15</date>
<authorinitials>lepm</authorinitials>
<revremark>Added the following sections: LDAP Migration Tools, Authentication 
using LDAP, Graphical LDAP tools, RFCs.</revremark></revision>

<revision><revnumber>1.00</revnumber>
<date>1999/06/20</date>
<authorinitials>lepm</authorinitials>
<revremark>Initial version.</revremark></revision>

</revhistory></bookinfo>

<chapter id="Introduction"><title>Introduzione</title>

<para>Lo scopo principale di questo documento &egrave; installare ed utilizzare
un server di directory LDAP sulla propria macchina Linux. Si imparer&agrave; 
come installare, configurare, far funzionare e manutenere un server LDAP. 
Dopo di che si potr&agrave; anche imparare come poter immagazzinare, 
richiamare e aggiornare le informazioni sul proprio server usando i client 
e i programmi di utilit&agrave; di LDAP. Il demone per il directory server 
LDAP &egrave; denominato <emphasis>slapd</emphasis> e funziona su molte 
piattaforme UNIX differenti. </para>


<para>C'&egrave; un altro demone che si occupa della replica fra i server 
LDAP. Esso &egrave; denominato slurpd e per il momento non ci si deve 
preoccupare del suo funzionamento. In questo documento si fa funzionare uno 
slapd che fornisce il servizio directory soltanto per il proprio dominio 
locale, senza replica, quindi senza slurpd. Le informazioni complete sulla 
replica sono disponibili nella: 
<ulink url="http://www.openldap.org/doc/admin21/replication.html">Guida dell'Amministatore OpenLDAP</ulink></para>

<para>La messa a punto del dominio locale rappresenta una scelta semplice 
per la configurazione del proprio server, utile per cominciare, ma con cui 
&egrave; facile passare ad un'altra configurazione, se lo si desidera. 
Le informazioni presentate in questo documento rappresentano un buon inizio 
per l'uso del server LDAP. Probabilmente, dopo aver letto questo documento 
ci si sentir&agrave; incoraggiati ad espandere le capacit&agrave; del proprio 
server e perfino scrivere proprie applicazioni client, usando i kit di sviluppo 
gi&agrave; disponibili per C, C++ e Java.</para>

<section id="WhatisLdap">
<title>Che cosa &egrave; LDAP?</title>

<para>LDAP sta per Lightweight Directory Access Protocol. Come il nome 
suggerisce, &egrave; un protocollo leggero client-server per l'accesso
ai  servizi di directory, in particolare ai servizi di directory basati
sullo  standard X-500. LDAP funziona sopra il protocollo TCP/IP o su
altri protocolli di rete orientati alla connessione. LDAP &egrave; 
definito nel documento  <ulink url="ftp://ftp.isi.edu/in-notes/rfc2251.txt">RFC2251</ulink>  "The
Lightweight Directory Access Protocol (v3).</para>

<para>Un servizio di directory &egrave; simile a un database, ma tende a 
contenere le informazioni sugli attributi in maniera pi&ugrave;
descrittiva.  L'informazione in una directory &egrave; letta
generalmente molto pi&ugrave;  spesso di quanto sia scritta. I servizi
di directory sono ottimizzati per dare  una rapida risposta ad accessi
in grande quantit&agrave; o per operazioni di  ricerca. Possono avere la
capacit&agrave; di replicare ampiamente le  informazioni, al fine di
aumentare la disponibilit&agrave; e  l'affidabilit&agrave;, mentre
riducono il tempo di risposta. Quando l'informazione della directory
&egrave; replicata, le inconsistenze momentanee fra le repliche possono
essere tollerate, finch&egrave; non vengono finalmente 
sincronizzate.</para>

<para>Ci sono molti modi differenti di gestire un servizio di directory.
Diverse metodologie permettono a generi differenti di informazioni di
essere immagazzinate nelle directory, pongono differenti requisiti su
come queste informazioni possano essere consultate, interrogate ed
aggiornate, su come sono protette da accessi non autorizzati, ecc.
Alcuni servizi di directory sono locali, forniscono cio&egrave; il
servizio ad un contesto limitato (per esempio, il servizio finger su una
singola macchina). Altri servizi di directory sono globali, e forniscono
il servizio ad un contesto molto pi&ugrave; ampio.</para></section>


<section id="HowitWorks">
<title>Come lavora LDAP?</title>
<para>Il servizio di directory LDAP &egrave; basato su un modello 
client-server. Uno o pi&ugrave; server LDAP contengono i dati che 
costituiscono l&rsquo;albero di directory di LDAP o il database LDAP 
sottostante. Un client LDAP si collega ad un server LDAP e fa una domanda. 
Il server o risponde, o indica al client dove poter ottenere maggiori 
informazioni (tipicamente, un altro server LDAP). Non importa a quale 
server LDAP un client si connette poich&eacute; esso avr&agrave; sempre 
la stessa vista dell&rsquo;albero di directory; lo stesso nome su server 
LDAP diversi identifica un unico oggetto. Ci&ograve; &egrave; una 
caratteristica molto importante di un servizio di directory globale, 
come appunto LDAP.</para></section>

<section id="LdapBackends">
<title>LDAP backend, oggetti e attributi</title>

<para>Il demone del server LDAP &egrave; chiamato
<emphasis>Slapd</emphasis>. <emphasis>Slapd</emphasis> supporta una
variet&agrave; di differenti <command>database backends</command>
utilizzabili.</para>

<para>Essi includono come scelta primaria <command>BDB</command>, un
database backend transazionale ad alte prestazioni; LDBM, un backend
leggero basato su DBM; SHELL, un&rsquo;interfaccia di backend per script
di shell arbitrari e PASSWD, una semplice interfaccia di backend per il
file passwd(5).</para>

<para>BDB utilizza <ulink
url="http://www.sleepycat.com/">Sleepycat</ulink> Berkeley DB 4. LDBM
utilizza <ulink url="http://www.sleepycat.com/">Berkeley DB</ulink> o
<ulink url="http://www.gnu.org/software/gdbm/">GDBM</ulink>.</para>

<para>Il backend transazionale BDB &egrave; adatto per l&rsquo;accesso a
database di lettura/scrittura in modalit&agrave; multiutente, con
qualunque mix di operazioni lettura/scrittura. BDB &egrave; usato nelle
applicazioni che richiedono:

<itemizedlist>
<listitem><para>Transazioni, compresi cambiamenti multipli di database 
effettuati in modo atomico e il rollback di eventuali modifiche non 
completate, quando necessario.</para></listitem>

<listitem><para>Capacit&agrave; di ripristino da crash del sistema e da 
guasti hardware senza perdere nessuna transazione completata.</para></listitem>
</itemizedlist> </para>

<para>In questo documento si suppone che venga scelto il database BDB.</para>

<para>Per importare ed esportare le informazioni tra directory server
basati su LDAP, o per descrivere un insieme di cambiamenti da apportare
alla directory, si usa tipicamente il formato file LDIF (LDAP Data
Interchange Format). Un file LDIF memorizza informazioni in strutture
gerarchiche orientate agli oggetti. Il pacchetto di programmi di LDAP
che si avr&agrave; &egrave; fornito di un programma di utilit&agrave; per
convertire i files LDIF in formato BDB.</para>


<para>Un file LDIF comune &egrave; simile a questo:</para>

<screen>
dn: o=TUDelft, c=NL
o: TUDelft
objectclass: organization
dn: cn=Luiz Malere, o=TUDelft, c=NL
cn: Luiz Malere
sn: Malere
mail: malere@yahoo.com
objectclass: person
</screen>

<para>Come si pu&ograve; vedere ogni voce &egrave; identificata
unicamente in base a un nome distinto, o DN. Il DN &egrave; composto dal
nome della voce pi&ugrave; un percorso di nomi che risalgono dalla voce
all&rsquo;indietro fino in cima alla struttura gerarchica della
directory (come in un albero).</para>

<para>In LDAP, una <command>classe oggetto</command> definisce la
collezione degli <command>attributi</command> che possono essere usati
per definire una voce. Lo standard di LDAP fornisce questi tipi base di
classi oggetto:</para>


<itemizedlist>
<listitem><para>Gruppi nella directory, che includono liste non ordinante 
di singoli oggetti o gruppi di oggetti.</para></listitem>

<listitem><para>Locazioni, come il nome di un paese e una descrizione.</para></listitem>

<listitem><para>Organizzazioni nella directory.</para></listitem>

<listitem><para>Persone nella directory.</para></listitem>
</itemizedlist>

<para>Una voce pu&ograve; appartenere a pi&ugrave; di una classe
oggetto. Per esempio, la voce per una persona &egrave; definita dalla
classe oggetto <emphasis>person</emphasis>, ma pu&ograve; anche essere
definita dagli attributi delle classi inetOrgPerson, groupOfNames e
organization. La struttura di classi oggetto del server (il suo schema)
determina la lista totale degli attributi obbligatori e permessi per
ogni singola voce.</para>

<para>I dati della directory sono rappresentati come coppie di
attributi-valori. Qualsiasi informazione specifica &egrave; associata a
un attributo descrittivo.</para>

<para>Per esempio, l&rsquo;attributo commonName, o cn, &egrave; usato
per immagazzinare il nome della persona. Una persona chiamata Jonas Salk
pu&ograve; essere rappresentata nella directory come</para>

<screen>cn: Jonas Salk</screen>

<para>Ogni persona che &egrave; inserita nella directory &egrave;
definita da una serie di attributi nella classe
<emphasis>person</emphasis>. Altri attributi usati per definire questa
voce potrebbero essere:</para>

<screen>
givenname: Jonas
surname: Salk
mail: jonass@airius.com
</screen>

<para>Gli attributi obbligatori includono gli attributi che devono
essere presenti nella voce in quanto appartenenti ad una specifica
classe. Tutte le voci richiedono l&rsquo;attributo objcetClass, che
elenca le classi cui l&rsquo;oggetto appartiene.</para>

<para>Gli attributi consentiti includono gli attributi che possono
essere presenti nelle voci che usano una classe oggetto. Per esempio,
nella classe oggetto person, gli attributi cn e sn sono obbligatori.
Gli attributi descrizione, telephoneNumber, seeAlso e userpassword sono
consentiti ma non sono obbligatori.</para>

<para>Ogni attributo ha una corrispondente definizione di sintassi. La
definizione di sintassi descrive il tipo di informazione fornita
dall&rsquo;attributo, per esempio:</para>

<itemizedlist>
<listitem><para>bin: tipo binario.</para></listitem>
<listitem><para>ces: case exact string (durante il confronto le maiuscole/minuscole devono corrispondere).</para></listitem>
<listitem><para>cis: case ignore string (durante il confronto maiuscole/minuscole sono ignorate).</para></listitem>
<listitem><para>tel: telephone number string (come cis ma gli spazi in bianco ed il ` - &rsquo; sono ignorati durante i confronti).</para></listitem>
<listitem><para>dn: distinguished name.</para></listitem>
</itemizedlist>

<para><command>Nota: </command>di solito le definizioni delle classi
oggetto e degli attributi risiedono nei file di schema, nella
sottodirectory <emphasis>schema</emphasis> sotto la directory di
installazione di OpenLDAP.</para></section>


<section id="NewVersions">
<title>Nuove versioni di questo documento</title>

<para>Questo documento pu&ograve; subire delle correzioni e
aggiornamenti basati su feedback ricevuti dai lettori. Si pu&ograve;
visitare l&rsquo;url:</para>

<para><ulink url="http://www.tldp.org/HOWTO/LDAP-HOWTO.html">http://www.tldp.org/HOWTO/LDAP-HOWTO.html</ulink></para>

<para>per avere nuove versioni di questo HOWTO.</para></section>


<section id="opinions">
<title>Opinioni e Suggerimenti</title>

<para>Se si ha qualunque genere di dubbio circa le informazioni presenti
in questo documento, ci si metta in contatto con me al seguente
indirizzo di email: <ulink
url="malere@yahoo.com">malere@yahoo.com</ulink></para>

<para>Se avete commenti e/o suggerimenti, fatemi sapere!</para></section>


<section id="Acknowledgements">
<title>Ringraziamenti</title>

<para>Questo Howto &egrave; il risultato di una internship fatta da me
all&rsquo;interno dell&rsquo;universit&agrave; di TUDelft - Paesi Bassi.
desidero ringraziare le persone che mi hanno incoraggiato a redigere
questo documento: <emphasis>Rene van Leuken</emphasis> e <emphasis>Wim
Tiwon</emphasis>. 

Grazie molto. Inoltre sono fan di Linux, proprio come me.</para>

<para>Desidero ringraziare anche Thomas Bendler, autore del Ldap-Howto
tedesco, per il suo contributo al mio documento, e anche Joshua Go,
grande volontario sul progetto LDP.</para>

<para>Karl Lattimer merita un premio, per il suo grande contributo sulle
questioni relative a SASL.</para>

<para>E grazie a Dio!</para></section>


<section id="copyright">
<title>Copyright e Disclaimer</title>

<para>Copyright (c)  1999 Luiz Ernesto Pinheiro Mal&egrave;re.
	Permission is granted to copy, distribute and/or modify this document
	under the terms of the GNU Free Documentation License, Version 1.1
	or any later version published by the Free Software Foundation;
	with no Invariant Sections, with no Front-Cover Texts and with no Back-Cover 
	Texts. A copy of the license is included in the section entitled "GNU
        Free Documentation License".</para>

<para>Se avete domande, visitate il seguente url: <ulink url="http://www.gnu.org/licenses/fdl.txt">http://www.gnu.org/licenses/fdl.txt</ulink> e mettetevi in contatto con il coordinatore di Linux HOWTO, a: <ulink url="guylhem@metalab.unc.edu">guylhem@metalab.unc.edu</ulink></para></section>
</chapter>

<chapter id="Installing"><title>Installazione del server LDAP</title>
<para>Sono necessarie cinque fasi per installare il server LDAP: 
<itemizedlist>
<listitem><para>Installare i pacchetti pre-requisiti (se non gi&agrave; installati).</para></listitem>
<listitem><para>Scaricare l&rsquo;applicazione server.</para></listitem>
<listitem><para>Spacchettare il software.</para></listitem>
<listitem><para>Configurare i Makefile.</para></listitem>
<listitem><para>Compilare il server.</para></listitem>
</itemizedlist></para>


<section id="PreReq">
<title>Pre-Requisiti</title>

<para>Per essere pienamente conformi alle specifiche di LDAPv3, i client 
e i server OpenLDAP richiedono l&rsquo;installazione di qualche pacchetto 
addizionale. Per scrivere questo documento, ho usato una distribuzione 
Mandrake 9.0 con un Kernel 2.4.20, installando manualmente il pacchetto 
Berkeley BDB e le librerie SASL.</para>


<para><command>Librerie SASL OpenSSL TLS</command></para>

<para>Le librerie OpenSSL TLS sono normalmente parte del sistema base o 
costituiscono un componente software opzionale. l&rsquo;url ufficiale 
OpenSSL TLS &egrave;: 
<ulink url="http://www.openssl.org">http://www.openssl.org</ulink></para>

<para><command>Servizi di Autenticazione Kerberos</command></para>

<para>I client e i server OpenLDAP supportano i servizi di autenticazione 
basati su Kerberos. In particolare OpenLDAP supporta il meccanismo di 
autenticazione SASL/GSSAPI usando i pacchetti Heimdal o MIT Kerberos V. 
Se si desidera usare l&rsquo;autenticazione SASL/GSSAPI basata su kerberos, 
bisogna installare o heimdal o MIT kerberos V. Heimdal kerberos &egrave; 
disponibile all&rsquo;indirizzo <ulink url="http://www.pdc.kth.se/heimdal">http://www.pdc.kth.se/heimdal</ulink> 
MIT Kerberos &egrave; disponibile all&rsquo;indirizzo <ulink url="http://web.mit.edu/kerberos/www">http://web.mit.edu/kerberos/www</ulink></para>

<para>L&rsquo;uso di servizi di autenticazione forti, simili a quelli forniti 
da Kerberos, &egrave; fortemente raccomandato.</para>

<para><command>Cyrus's Simple Authentication e Security Layer Libraries</command></para>

<para>Le librerie SASL del progetto Cyrus fanno parte normalmente del sistema 
di base o costituiscono un componente software opzionale. Cyrus SASL &egrave; 
disponibile all&rsquo;indirizzo <ulink url="http://asg.web.cmu.edu/sasl/sasl-library.html">http://asg.web.cmu.edu/sasl/sasl-library.html</ulink>. 
Cyrus SASL user&agrave; le librerie Kerberos/GSSAPI e OpenSSL se preinstallate. 
Al momento in cui sto scrivendo, ho usato Cyrus SASL 2.1.12.</para>

<para><command>Database Software</command></para>

<para>Il principale database backend di slapd, BDB, richiede la versione 4 
dello <ulink url="http://www.sleepycat.com">Sleepycat Software Berkeley DB</ulink>. 
Se non sar&agrave; disponibile al momento della configurazione, non potrete 
compilare lo slapd con il database backend principale.</para>

<para>Il vostro sistema operativo pu&ograve; contenere il DB di Berkeley, 
versione 4, nel sistema di base o come componente software opzionale. 
Altrimenti ci sono parecchie versioni disponibili su 
<ulink url="http://www.sleepycat.com/download.html">Sleepycat</ulink>. 
Al momento in cui sto scrivendo, &egrave; consigliato l&rsquo;utilizzo 
dell&rsquo;ultima versione 4.1.25. Il backend LDBM del server slapd di 
OpenLDAP supporta una variet&agrave; di database manager, come Berkeley DB 
(versione 3) e GDBM. GDBM &egrave; disponibile dal sito di download della 
FSF <ulink url="ftp://ftp.gnu.org/pub/gnu/gdbm/.">ftp://ftp.gnu.org/pub/gnu/gdbm/</ulink>.</para>

<para><command>Thread</command></para>

<para>Il supporto thread &egrave; quasi certamente parte integrante del 
proprio sistema linux di base. OpenLDAP &egrave; progettato per trarre 
vantaggi dai thread. OpenLDAP supporta i POSIX pthread, i Mach Cthread, 
e un certo numero di altre variet&agrave;. Lo script <emphasis>configure</emphasis> 
protester&agrave; se non trover&agrave; un sottosistema thread adatto. 
Se questo dovesse accadere, siete pregati di consultare la sezione software 
- Installation - Platform Hints dell&rsquo;OpenLDAP FAQ: <ulink url="http://www.openldap.org/faq/">http://www.openldap.org/faq/</ulink>.</para>

<para><command>TCP Wrapper</command></para>

<para><emphasis>Slapd</emphasis> supporta TCP wrapper (filtri di controllo 
di accesso a livello IP) se preinstallati. L'uso dei TCP wrapper o di altri 
filtri di accesso a livello IP (come quelli forniti da una firewall a livello 
IP) &egrave; raccomandato per i server che contengono informazioni non 
pubbliche.</para></section>


<section id="Download">
<title>Scaricare il pacchetto</title>

<para>Ci sono due distribuzioni libere di server LDAP: LDAP server 
dell'Universit&agrave; del Michigan e OpenLDAP server. C'&egrave; anche 
il Netscape directory server, che &egrave; libero solo sotto qualche 
condizione (gli istituti scolastici possono averlo liberamente per esempio). 
OpenLDAP server &egrave; basato sull&rsquo;ultima versione del Server 
dell'Universit&agrave; del Michigan e ci sono mailing list e documentazione 
supplementare disponibile per esso. Questo documento assume che si stia usando 
il server OpenLDAP.</para>

<para>L'ultima versione tar.gzip &egrave; disponibile al seguente indirizzo: 
</para><para><ulink url="http://www.openldap.org">http://www.openldap.org</ulink></para>

<para>Se si vuole l'ultima versione del server dell'Universit&agrave; del 
Michigan, si vada al seguente indirizzo: </para>
<para><ulink url="ftp://terminator.rs.itd.umich.edu/ldap">ftp://terminator.rs.itd.umich.edu/ldap</ulink></para>
<para></para>

<para>Per scrivere questo documento, ho usato la versione 2.1.16 del pacchetto 
OpenLDAP. Il mio sistema operativo &egrave; un Mandrake Linux 9.0 con kernel 
2.4.20. </para>

<para>Sul sito di OpenLDAP potete sempre trovare le ultime versioni di 
sviluppo e stabili del server Open LDAP. Quando questo documento &egrave; 
stato aggiornato, l&rsquo;ultima versione stabile era openldap-stable-20030317.tgz 
(versione 2.1.16). l&rsquo;ultima versione sviluppata era invece 
openldap-2.1.16.tgz. </para></section>


<section id="Unpacking">
<title>Spacchettare il Software</title>

<para>Ora che si ha il pacchetto tar.gzip sulla propria macchina locale, 
si pu&ograve; spacchettarlo. </para>

<para>Prima copiare il pacchetto in una directory di proprio gradimento, 
per esempio /usr/local. Poi usare il comando seguente:</para>
<screen>tar xvzf openldap-2.1.16.tgz </screen>

<para>Si pu&ograve; usare anche questo comando, equivalente: </para>
<screen>gunzip openldap-2.1.16.tgz | tar xvf -</screen></section>


<section id="Configuring">
<title>Configurare il Software</title>
<para>I sorgenti del server OpenLDAP sono distribuiti con uno script 
di configurazione per impostare opzioni quali le directory di installazione, 
i flag del compilatore e del linker. Eseguire il seguente comando nella 
directory in cui si &egrave; spacchettato il software: </para>

<screen>./configure --help</screen>

<para>Tutte le opzioni che si potranno personalezzare si otterranno con 
lo script di configurazione prima di copiare il software. Alcune opzioni 
utili sono: -- prefix=pref, -- exec-prefix=eprefix e -- bindir=dir, per 
impostare le directory di installazione. Normalmente se si lancia lo 
script di configurazione senza opzioni, esso rilever&agrave; le impostazioni 
appropriate  e preparer&agrave; l'installazione nei percorsi di default. 
Quindi digitare semplicemente: </para>

<screen>./configure</screen>

<para>E guardare l'output per controllare se va tutto bene </para>


<para><command>Suggerimento:</command> a volte bisogna passare delle opzioni 
specifiche al proprio script di configurazione, come per esempio -- with-tls 
(per permettere allo slapd di utilizzare un canale sicuro: LDAPS://). 
In questo caso, potrebbe darsi che le proprie librerie SSL/TLS risiedano 
in una directory non standard del proprio sistema. Si pu&ograve; 
informare lo script di configurazione dell&rsquo;ubicazione delle librerie 
cambiando le proprie variabili d&rsquo;ambiente, utilizzando il comando 
<emphasis>env</emphasis>.

Esempio: si supponga di aver installato il pacchetto openssl sotto 
/usr/local/openssl. Il seguente comando compiler&agrave; slapd con il 
supporto SSL/TLS:</para>

<screen>env CPPFLAGS=-I/usr/local/openssl/include \
      LDFLAGS=-L/usr/local/openssl/lib \
      configure --with-tls ...</screen>


<para>si possono specificare le seguenti variabili d'ambiente con il comando 
<emphasis>env</emphasis> prima dello script di configurazione:

<itemizedlist>
<listitem><para>CC: specifica un compilatore C alternativo.</para></listitem>
<listitem><para>CFLAGS: specifica i flag addizionali per il compilatore.</para></listitem>
<listitem><para>CPPFLAGS:  specifica i flag per il Preprocessore C.</para></listitem>
<listitem><para>LDFLAGS: specifica i flag per il linker.</para></listitem>
<listitem><para>LIBS: specifica delle librerie addizionali.</para></listitem>
</itemizedlist></para></section>


<section id="Building">
<title>Compilazione del Server</title>
<para>Dopo aver configurato il software si pu&ograve; iniziare a compilarlo. 
Prima compilare le dipendenze, usando il comando: </para>

<screen>make depend</screen>

<para>Dopo compilare il server, usando il comando: </para>

<screen>make</screen>

<para>Se tutto va bene, il server sar&agrave; compilato come da configurazione.
Altrimenti, ritornare al punto precedente per rivedere le impostazioni di 
configurazione. Bisognerebbe leggere i file di README e di INSTALL situati 
nella directory in cui si &egrave; spacchettato il software. Inoltre 
controllare i suggerimenti specifici dello script di configurazione, situati 
nel percorso doc/install/configure sotto la directory dove si &egrave; 
spacchettato il software. </para>

<para>Per assicurare una corretta compilazione bisognerebbe lanciare la 
procedura di test (impiegher&agrave; alcuni minuti):</para>

<screen>make test</screen>

<para>I test che si applicano alla propria configurazione verranno eseguiti 
e dovrebbero essere superati. Alcune prove, quale la prova della replica, 
possono essere saltate. </para>

<para>Ora installare i file binari e le man page. Si pu&ograve; avere bisogno 
di essere super-user per fare questo (a seconda di dove si stanno installando 
le cose): </para>

<screen>su root -c 'make install'</screen>

<para>Questo &egrave; tutto; ora si ha il file binario del server e i 
file binari di parecchi altri programmi di utilit&agrave;. Andare al 
<xref linkend="Config"/> per vedere come configurare il funzionamento del 
proprio server LDAP. </para></section>

</chapter>

<chapter id="Config"><title>Configurazione del server LDAP</title>

<para>Una volta che il software &egrave; stato installato e compilato, 
si &egrave; pronti a configurarlo per l&rsquo;uso che se ne deve fare. 
Tutta la configurazione runtime dello slapd &egrave; compiuta attraverso 
il file <emphasis>slapd.conf</emphasis>, installato nella directory prefix 
che si &egrave; specificato nello script di configurazione o di default 
in /usr/local/etc/openldap.</para>

<para>Questa sezione specifica in dettaglio le istruzioni di configurazione 
comunemente usate per <emphasis>slapd.conf.</emphasis> Per una lista completa, 
vedere la pagina di manuale di slapd.conf(5). Le istruzioni del file di 
configurazione sono divise in tre tipologie: <command>global</command>, 
<command>backend specific</command> e <command>database specific</command>. 
Qui si troveranno le descrizioni delle istruzioni, insieme ai loro valori di 
default (se ci sono) ed agli esempi di uso. </para>


<section id="ConfigFormat">
<title>Formato del file di configurazione</title>
<para>Il file slapd.conf consta di tre tipi di informazioni di configurazione: 
global, backend specific, e database specific. Le informazioni globali sono 
specificate per prime, seguite dalle informazioni associate con un particolare 
tipo di backend, a loro volta seguite dalle informazioni associate ad una 
particolare istanza di database. </para>

<para>Le istruzioni globali possono essere sovrascritte da istruzioni di 
backend e/o di database, e le istruzioni di backend possono essere 
sovrascritte dalle istruzioni di database.</para>

<para>Le linee in bianco e le linee di commento che cominciano con il 
carattere '#' sono ignorate. Se una linea comincia con uno spazio viene 
considerata continuazione della riga precedente. Il formato generale di 
slapd.conf &egrave; il seguente:</para>


<screen>

# direttive globali di configurazione
&lt;global config directives&gt;

# definizione backend
backend &lt;typeA&gt;
&lt;backend-specific directives&gt;

# definizione primo database &amp; direttive di configurazione
database &lt;typeA&gt;
&lt;database-specific directives&gt;

# definizione secondo database &amp; direttive di configurazione
database &lt;typeB&gt;
&lt;database-specific directives&gt;

# definizione secondo database &quot;typeA&quot; &amp; direttive di configurazione
database &lt;typeA&gt;
&lt;database-specific directives&gt;

# backend successivo &amp; definizioni database &amp; direttive di configurazione
... </screen>

<para>Un'istruzione di configurazione pu&ograve; avere argomenti. In questo 
caso sono separati da spazio bianco. Se un argomento contiene uno spazio 
bianco, deve essere racchiuso tra doppi apici "come questo". Se una discussione
contiene un doppio apice o il carattere di backslash `\', il carattere dovrebbe 
essere preceduto da un altro backslash `\'.</para>

<para>La distribuzione contiene un file di configurazione di esempio che 
sar&agrave; installato nella directory /usr/local/etc/openldap. Un certo 
numero di file che contengono le definizioni dello schema (tipi di attributo 
e classe oggetto) sono forniti nella directory /usr/local/etc/openldap/schema.</para></section>


<section id="GlobalDirect">
<title>Istruzioni globali</title>

<para>Le istruzioni descritte in questa sezione si applicano a tutti i 
backends e database a meno che non siano specificamente sovrascritte in una 
definizione di backend o di database. Gli argomenti che dovrebbero essere 
sostituiti dal testo effettivo sono indicati tra parentesi 
angolari &lt; &gt;.</para>

<screen>access to &lt;what&gt; [ by &lt;who&gt; &lt;accesslevel&gt; &lt;control&gt; ]+</screen>
<para>Questa istruzione garantisce l'accesso (specificato da &lt;accesslevel&gt;) 
ad un insieme di voci e/o attributi (specificati da &lt;what&gt;) per uno o 
pi&ugrave; richiedenti (specificati da &lt;who&gt;). Vedere gli esempi 
della <xref linkend="AccessControl"/> per maggiori dettagli.</para>

<para><command>Importante:</command> se non &egrave; specificata alcuna 
direttiva di accesso, la politica di controllo accesso di default, 
accesso * in * lettura,  consente accesso in lettura sia agli utenti 
autenticati che a quelli anonimi.</para>

<screen>attributetype &lt;RFC2252 Attribute Type Description&gt;</screen>

<para>Questa direttiva definisce un tipo di attributo. Controllare il seguente 
URL per maggiori dettagli: <ulink url="http://www.openldap.org/doc/admin/schema.html">Schema Specification</ulink></para>

<screen>idletimeout &lt;integer&gt;</screen>

<para>Specifica il numero di secondi di attesa prima di chiudere forzatamente 
una connessione client non utilizzata. Un idletimeout pari a 0, il default, 
disabilita questa caratteristica.</para>

<screen>include &lt;filename&gt;</screen>

<para>Questa istruzione implica che lo slapd legga le informazioni
supplementari  di configurazione dal file in questione prima di
continuare con la linea  successiva del file corrente. Il file incluso
dovrebbe seguire le normali  disposizioni del file config dello slapd.
Il file &egrave; usato comunemente  per includere file che contengono le
specifiche dello schema.</para>

<para><command>Nota:</command> si dovrebbe fare attenzione quando si usa 
questa istruzione - non c'&egrave; un limite basso al numero di direttive 
include annidate e non viene fatto nessun controllo di loop. </para>

<screen>loglevel &lt;integer&gt;</screen>

<para>Questa direttiva specifica il livello al quale dovrebbero essere 
inviate al file syslog le informazioni statistiche e i messaggi di debug 
(attualmente i messaggi vengono inviati al syslogd(8) con il servizio LOCAL4). 
Bisogna aver configurato OpenLDAP con l';opzione --enable-debug (di default) 
affinch&eacute; questo funzioni (tranne per i due livelli di statistica, 
che sono sempre permessi). I livelli di log sono cumulativi. Per visualizzare 
quali numeri corrispondono a quale tipo di debug, richiamare lo slapd 
con -? o consultare la tabella sottostante. I valori possibili 
per &lt;integer&gt; sono:</para>


<para><table tocentry="1">
<title>Livelli di debugging</title>

<tgroup cols="2"><colspec colname="Level" colwidth="0"/><colspec colname="Description" colwidth="0"/>

<thead><row><entry>Livello</entry>
<entry>Descrizione</entry></row></thead>


<tbody><row><entry>-1</entry>
<entry>attiva tutti i livelli di debug</entry></row>
<row><entry>0</entry>
<entry>nessun debug</entry></row>
<row><entry>1</entry>
<entry>traccia le chiamate a funzione</entry></row>
<row><entry>2</entry>
<entry>debug del trattamento del pacchetto</entry></row>
<row><entry>4</entry>
<entry>tracciamento pesante</entry></row>
<row><entry>8</entry>
<entry>gestione della connessione </entry></row>
<row><entry>16</entry>
<entry>scrittura dei pacchetti spediti e ricevuti </entry></row>
<row><entry>32</entry>
<entry>eleborazione dei filtri di ricerca </entry></row>
<row><entry>64</entry>
<entry>elaborazione del file di configurazione</entry></row>
<row><entry>128</entry>
<entry>elaborazione dela lista di controllo d&rsquo;accesso</entry></row>
<row><entry>256</entry>
<entry>statistiche delle connessioni-operazioni-risultati</entry></row>
<row><entry>512</entry>
<entry>statistiche degli oggetti inviati </entry></row>
<row><entry>1024</entry>
<entry>scrittura della comunicazione con la shell di backend </entry></row>
<row><entry>2048</entry>
<entry>scrittura di debug del parsing degli oggetti </entry></row></tbody></tgroup></table></para>

<para>Esempio: </para>

<para>loglevel 255 or loglevel -1</para>

<para>Questo far&agrave; s&igrave; che vengano loggate moltissime informazioni 
di debug.</para>

<para>Default:</para>

<para>loglevel 256</para>
<screen>objectclass &lt;RFC2252 Object Class Description&gt;</screen>

<para>Questa informazione definisce una classe oggetto. Controllare il 
seguente URL per maggiori informazioni: 
<ulink url="http://www.openldap.org/doc/admin/schema.html">Schema Specification</ulink></para>

<screen>referral &lt;URI&gt;</screen>

<para>Questa istruzione specifica il riferimento da restituire quando lo 
slapd non pu&ograve; trovare un database locale per trattare una richiesta.</para>

<para>Esempio:</para>

<para>referral ldap://root.openldap.org</para>

<para>Questa istruzione rinvier&agrave; interrogazioni non-locali alla root 
globale del server LDAP del progetto OpenLDAP. Client LDAP intelligenti 
possono riformulare la richiesta a quel server, ma notare che la maggior 
parte di questi client stanno solo cominciando a capire come gestire semplici 
URL LDAP che contengono una parte con il nome dell'host e facoltativamente 
una parte con il Distiguished Name.</para>

<screen>sizelimit &lt;integer&gt;</screen>

<para>Questa istruzione specifica il numero massimo di oggetti che si 
otterranno dall&rsquo;operazione di ricerca.</para>

<para>Default:</para>
<para>sizelimit 500</para>
<screen>timelimit &lt;integer&gt;</screen>

<para>Questa istruzione specifica il numero massimo di secondi (in tempo reale) 
che slapd impiegher&agrave; per rispondere alla richiesta di ricerca. Se una 
richiesta non &egrave; conclusa in questo lasso di tempo, il risultato 
sar&agrave; una segnalazione di superamento del tempo limite.</para>

<para>Default:</para>
<para>timelimit 3600</para></section>

<section id="GeneralBEDirect">
<title>Direttive generali di backend</title>

<para>Le direttive contenute in questa sezione si applicano soltanto al 
backend nel quale sono definite. Sono sostenute da ogni tipo di backend. 
le istruzioni di backend si applicano a tutte le istanze di database dello 
stesso tipo e, secondo l'istruzione, possono essere sovrascritte dalle 
istruzioni del database.</para>

<screen>backend &lt;type&gt;</screen>

<para>Questa istruzione contrassegna l'inizio di una definizione backend. 
&lt;type&gt; dovrebbe essere o bdb o uno degli altri tipi di backend 
supportati ed elencati di seguito:

<table tocentry="1">
<title>Database Backend</title>

<tgroup cols="2"><colspec colname="Type" colwidth="0"/><colspec colname="Description" colwidth="0"/>

<thead><row><entry>Tipo</entry>
<entry>Descrizione</entry></row></thead>


<tbody><row><entry>bdb</entry>
<entry>Berkeley DB transactional backend</entry></row>
<row><entry>dnssrv</entry>
<entry>DNS SRV backend</entry></row>
<row><entry>ldbm</entry>
<entry>Lightweight DBM backend</entry></row>
<row><entry>ldap</entry>
<entry>Lightweight Directory Access Protocol (Proxy) backend</entry></row>
<row><entry>meta</entry>
<entry>Meta Directory backend</entry></row>
<row><entry>monitor</entry>
<entry>Monitor backend</entry></row>
<row><entry>passwd</entry>
<entry>Fornisce l&rsquo;accesso in sola lettura a passwd(5)</entry></row>
<row><entry>perl</entry>
<entry>Perl Programmable backend</entry></row>
<row><entry>shell</entry>
<entry>Shell (extern program) backend</entry></row>
<row><entry>sql</entry>
<entry>SQL Programmable backend</entry></row>
<row><entry>tcp</entry>
<entry>TCP Programmable backend</entry></row></tbody></tgroup></table></para>

<para>Esempio:</para>
<para>backend bdb</para>
<para>Ci&ograve; contrassegna l'inizio di nuova definizione backend BDB</para></section>


<section id="GeneralDBDirect">
<title>Direttive generali del database</title>

<para>Le direttive contenute in questa sezione si applicano soltanto ai 
database in cui esse sono definite. Sono supportate da ogni tipo di 
database.</para>

<screen>database &lt;type&gt;</screen>

<para>Questa istruzione contrassegna l'inizio di nuova definizione di 
istanza di database. &lt;type&gt; dovrebbe essere uno dei tipi backend 
elencati al punto precedente.</para>

<para>Esempio:</para>

<para>database ldbm</para>

<para>Ci&ograve; contrassegna l'inizio di un detabase backend LDBM.</para>

<screen>readonly { on | off }</screen>

<para>Questa istruzione pone il database in modalit&agrave; "read-only". 
Ogni tentativo di modificare il database restituir&agrave; l'errore 
"unwilling to perform".</para>

<para>Default:</para>

<para>readonly off</para>

<screen>
replica host=&lt;hostname&gt;[:&lt;port&gt;]
        [bindmethod={ simple | kerberos | sasl }]
        ["binddn=&lt;DN&gt;"]
        [mech=&lt;mech&gt;]
        [authcid=&lt;identity&gt;]
        [authzid=&lt;identity&gt;]
        [credentials=&lt;password&gt;]
        [srvtab=&lt;filename&gt;]</screen>

<para>Questa direttiva specifica un luogo di replica per questo database. 
Il parametro uri= specifica uno schema, un host e facoltativamente una 
porta a cui l'istanza slave slapd pu&ograve; essere trovata. Un nome completo 
di dominio o un indirizzo IP pu&ograve; essere usato per l'&lt;hostname&gt;. 
Se &lt;port&gt; non &egrave; dato, viene usato il numero di porta standard di 
LDAP (389 o 636).</para>

<para>Il parametro bindnn= fornisce il DN con cui collegarsi allo slapd 
secondario per gli aggiornamenti. Dovrebbe essere un DN che ha accesso in 
lettura /scrittura al database dello slapd secondario, impostato tipicamente 
come un root dn nel file di configurazione dello slapd secondario. Deve anche 
accordarsi con la direttiva update dn nel file di configurazione dello slapd 
secondario. Generalmente questo DN <emphasis>non deve</emphasis> essere lo 
stesso del rootdn del master database. Poich&eacute; i DN contengono 
facilmente spazi, l'intera stringa "binddn=&lt;DN&gt;" deve essere racchiusa 
tra doppi apici.</para>

<para>L'istruzione bindmethod accetta come argometo i valori simple o
Kerberos o sasl, a seconda che nella connessione allo slapd secondario
si usi per l'autenticazione il metodo semplice basato su password o
Kerberos o SASL.</para>

<para>L'autenticazione simple non dovrebbe essere usata a meno che non
siano in funzione adeguate protezioni di segretezza e di
integrit&agrave; (per esempio TLS o IPSEC). L'autenticazione simple
richiede la descrizione dettagliata di binddn e dei parametri delle
credenziali.</para>

<para>L'autenticazione Kerberos &egrave; deprecata a favore dei
meccanismi di autenticazione SASL, in particolare i meccanismi di GSSAPI
e di KERBEROS_V4. L'autenticazione Kerberos richiede i parametri srvtab
e binddn.
</para>

<para>L'autenticazione SASL &egrave; generalmente raccomandata.
L'autenticazione SASL richiede la specifica di un meccanismo usando il
parametro saslmech. A seconda del meccanismo, un'identit&agrave; e/o
delle credenziali di autenticazione possono essere specificate usando
authcid e le rispettive credenziali. Il parametro authzid pu&ograve;
essere usato per specificare un'identit&agrave; di autorizzazione.
</para>


<para>Controllare questo URL per dettagli aggiuntivi: <ulink
url="http://www.openldap.org/doc/admin/replication.html">Replication
with Slurpd</ulink>.</para>

<screen>replogfile &lt;filename&gt;</screen>


<para>Questa direttiva specifica il nome del file di log della replica
in cui lo slapd registrer&agrave; i cambiamenti. Il log della replica
&egrave; tipicamente scritto da slapd e letto da slurpd. Normalmente,
questa direttiva &egrave; usata soltanto se slurpd &egrave; stato usato
per replicare il database. Tuttavia, si pu&ograve; anche usare per
generare un log di transazione, se lo slurpd non sta funzionando. In
questo caso, dovrete troncare periodicamente il file, altrimenti
crescerebbe indefinitamente.</para>

<para>Controllare questo URL per vedere dettagli addizionali: <ulink url="http://www.openldap.org/doc/admin/replication.html">Replication with Slurpd</ulink>.</para>

<screen>rootdn &lt;dn&gt;</screen>


<para>Questa direttiva specifica il DN che non &egrave; soggetto a
restrizioni di controllo di accesso o di limiti amministrativi per le
operazioni su questo database. Il DN non ha bisogno riferirsi ad un
oggetto nella directory. Il DN pu&ograve; riferirsi ad
un'identit&agrave; di SASL.</para>

<para>Entry-based Esempio:</para>
<para>rootdn "cn=Manager, dc=example, dc=com"</para>
<para>SASL-based Esempio:</para>
<para>rootdn "uid=root@EXAMPLE.COM"</para>


<screen>rootpw &lt;password&gt;</screen>

<para>Questa direttiva pu&ograve; essere usata per specificare una password 
per il rootdn (quando il rootdn č impostato a DN all'interno del database).
</para>

<para>Esempio:</para>
<para>rootpw secret</para>

<para>&Egrave; anche permesso fornire l'hash della password in forma RFC 2307. 
slappasswd pu&ograve; essere usato per generare l'hash della password.</para>

<para>Esempio:</para>
<para>rootpw {SSHA}ZKKuqbEKJfKSXhUbHG3fG8MDn9j1v4QN</para>

<para>L'hash &egrave; stato generato usando il comando slappasswd -s
secret.</para>

<screen>suffix &lt;dn suffix&gt;</screen>

<para>Questa direttiva specifica il suffisso DN delle interrogazioni che
saranno passate a questo database backend. Possono essere date
pi&ugrave; linee di suffisso e per ogni definizione di database &egrave;
necessaria ce ne sia almeno una.</para> 

<para>Esempio:</para>
<para>suffix "dc=example, dc=com"</para>

<para>Le interrogazioni con un DN che termina in "dc=example, dc=com"
saranno passate a questo backend.</para>

<para><command>Nota:</command> quando viene selezionato il backend a cui
passare una interrogazione, lo slapd guarda alla/e linee di suffisso in
ogni definizione del database nell'ordine che compaiono nel file.
Quindi, se un suffisso di database &egrave; un prefisso di un altro,
deve comparire dopo esso nel file di configurazione. 
</para>

<screen>syncrepl</screen>

<para>Questa direttiva pu&ograve; essere usata per tenere sincronizzato 
un database replicato con il database master, in modo che il contenuto 
del database replicato sia aggiornato con il contenuto del master.
</para>

<para>Questo documento non copre in dettaglio questa direttiva,
poich&eacute; si configura un server LDAP singolo. Per maggiori
informazioni su questa direttiva, visitare: <ulink
url="http://www.openldap.org/doc/admin22/syncrepl.html">LDAP Sync Replication</ulink>.
</para>

<screen>updatedn &lt;dn&gt;</screen>

<para>Questa direttiva &egrave; applicabile soltanto a uno slapd
secondario. Essa specifica il DN a cui &egrave; permesso di apportare
modifiche alla replica. Questo pu&ograve; essere il DN con cui si
connette slurpd quando apporta modifiche alla replica o il DN associato
con un'identit&agrave; SASL.</para>

<para>Entry-based Esempio:</para>
<para>updatedn "cn=Update Daemon, dc=example, dc=com"</para>
<para>SASL-based Esempio:</para>
<para>updatedn "uid=slurpd@EXAMPLE.COM"</para>

<para>Controllare questo URL per maggiori dettagli: <ulink url="http://www.openldap.org/doc/admin/replication.html">Replication with Slurpd</ulink>.</para>

<screen>updateref &lt;URL&gt;</screen>

<para>Questa istruzione &egrave; applicabile soltanto in uno slapd
secondario. Essa Specifica l'URL da restituire ai client che inoltrano
richieste di aggiornamento alla replica. Se specificato pi&ugrave;
volte, viene fornito ogni URL.</para>

<para>Esempio:</para>
<para>update  ldap://master.example.net</para></section>


<section id="BDBDirect">
<title>Direttive del database BDB</title>

<para>Le direttive in questa categoria riguardano soltanto un database
BDB. Cio&egrave;, esse devono seguire una linea del "database bdb" e
venire prima di ogni successiva linea di "backend" o "database".</para>

<screen>directory &lt;directory&gt;</screen>

<para>Questa istruzione specifica la directory dove risiedono i file BDB
contenenti il database e gli indici associati.</para>

<para>Default:</para>

<para>directory /usr/local/var/openldap-data</para>

<screen>sessionlog &lt;sid&gt; &lt;limit&gt;</screen>

<para>Questa direttiva specifica un archivio del log di sessione nel
server del provider di replica syncrepl,  che contiene informazioni
sulle voci che sono state portate fuori dal contenuto di replica
identificato da &lt;sid&gt;. La prima richiesta di ricerca syncrepl
avente lo stesso valore &lt;sid&gt; nel cookie stabilisce l'archivio
del log di sessione nel server del provider. Il numero di voci
nell'archivio del log di sessione &egrave; limitato da &lt;limit&gt;. Le
voci in eccesso sono rimosse dall'archivio in ordine FIFO. Sia
&lt;sid&gt; che &lt;limit&gt; sono interi non negativi. &lt;sid&gt;  ha
non pi&ugrave; di tre cifre decimali.</para>

<para>L'operazione di sincronizzazione del contenuto di LDAP che cade in
una sessione preesistente pu&ograve; usare l'archivio del log di sessione allo
scopo di ridurre l'ammontare di traffico di sincronizzazione. Se la
replica non &egrave; troppo datata e pu&ograve; essere aggiornata dalle
informazioni nell'archivio sessione, lo slapd provider invier&agrave;
allo slapd consumer le identit&agrave; delle voci eliminate assieme alle
voci aggiunte o modificate nel contenuto di replicazione. Se lo stato
della replica &egrave; troppo superato e oltre la copertura dell'archivio
storico, allora lo slapd provider invier&agrave; le identit&agrave; delle voci
in ingresso non mutate assieme a quella delle voci cambiate. Lo slapd
consumer quindi rimuover&agrave; quelle voci nella replica che non sono
identificate come presenti nel contenuto del provider.</para>

<para>Per maggiori informazioni su syncrepl, visitare:
<ulink url="http://www.openldap.org/doc/admin22/syncrepl.html">LDAP Sync Replication</ulink>.</para></section>

<section id="LDBMDirect">
<title>Direttive del database LDBM</title>

<para>Le direttive contenute in questa categoria si applicano soltanto
al database di backend LDBM. Cio&egrave;, esse devono seguire una linea
"database ldbm" e venire prima di ogni altra linea di "database" o
"backend".</para>

<screen>cachesize &lt;integer&gt;</screen>
<para>Questa direttiva specifica la quantit&agrave; di oggetti per la
memoria cache gestita dall'istanza di database backend LDBM.</para>

<para>Default:</para>
<para>cachesize 1000</para>

<screen>dbcachesize &lt;integer&gt;</screen>

<para>Questa istruzione specifica la dimensione in byte della memoria
cache connessa associata ad ogni file indice aperto. Se non &egrave;
supportata dal metodo del database sottostante, questa direttiva
&egrave; ignorata senza commenti. Aumentando questo numero viene usata
pi&ugrave; memoria, ma questo pu&ograve; causare un notevole aumento di
prestazioni, particolarmente durante modifiche o quando vengono
costruiti gli indici.</para>

<para>Default:</para>
<para>dbcachesize 100000</para>

<screen>dbnolocking</screen>
<para>Questa opzione, se presente, disabilita il blocco del database.
Abilitare questa opzione pu&ograve; migliorare le prestazioni a scapito
della protezione dei dati.</para>

<screen>dbnosync</screen>
<para>Questa opzione fa si che i contenuti del database su disco non
siano immediatamente sincronizzati con le continue modifiche in memoria.
Abilitare questa opzione pu&ograve; migliorare le prestazioni a scapito
della protezione dei dati.</para>

<screen>directory &lt;directory&gt;</screen>
<para>Questa istruzione specifica la directory dove risiedono i file
LDBM contenenti il database e gli indici associati.</para>

<para>Default:</para>

<para>directory /usr/local/var/openldap-ldbm</para>
<screen>index {&lt;attrlist&gt; | default} [pres,eq,approx,sub,none]</screen>

<para>Questa direttiva specifica gli indici da mantenere per il dato
attributo. Se viene fornito un solo &lt;attrlist&gt;, vengono mantenuti
gli indici di default.</para>

<para>Esempio:</para>

<screen>
index default pres,eq
index uid
index cn,sn pres,eq,sub
index objectClass eq
</screen>

<para>La prima linea imposta l'insieme degli indici di default da
mantenere per present ed equality. La seconda linea fa s&igrave; che
l'insieme degli indici di default (pres, eq) sia mantenuto per il tipo
di attributo uid. La terza linea fa s&igrave; che gli indici di present,
equality e substring  siano mantenuti per i tipi di attributo cn e sn.
La quarta linea crea un indice equality per l'attributo di tipo
objectClass.</para>

<para>Di default, non &egrave; mantenuto nessun indice. Generalmente si
raccomanda come minimo di mantenere un indice equality sugli
objectClass.</para>

<para>index objectClass eq</para>

<screen>mode &lt;integer&gt;</screen>
<para>Questa direttiva specifica i permessi di accesso che i file indice
del database generato ex novo dovrebbero avere.</para>

<para>Default:</para>
<para>mode 0600</para></section>


<section id="AccessControl">
<title>Esempi di Access Control</title>

<para>La funzione di access control fornita dalla direttiva
<emphasis>access</emphasis> &egrave; abbastanza potente. Questa sezione
mostra alcuni esempi di utilizzo. In primo luogo, alcuni esempi
semplici:</para>

<screen>access to * by * read </screen>

<para>Questa direttiva di accesso garantisce accesso in lettura a
tutti.</para>

<para>Il seguente esempio mostra l'uso di una espressione regolare per
selezionare le voci per DN in due direttive di accesso dove
l'ordinamento &egrave; importante. </para>

<screen>access to dn=".*, o=U of M, c=US" 
by * search 
access to dn=".*, c=US" 
by * read </screen>

<para>L'accesso in lettura &egrave; assegnato alle voci sotto il
sottoalbero c=US, tranne quelle voci sotto il sottoalbero ""o=U of M,
c=US", a cui &egrave; garantito l'accesso in ricerca. Nessun accesso
&egrave; assegnato ai c=US, perch&eacute; nessuna direttiva di accesso
corrisponde a questo DN. Se l'ordine di queste direttive di accesso
fosse invertito, la direttiva specifica U-M non troverebbe mai
corrispondenza, poich&eacute; tutti i campi U-m sono anche campi c=US.
</para>

<para>Un altro modo di implementare lo stesso controllo di accesso
&egrave;:</para>

<screen>access to dn.children="dc=example,dc=com"
by * search
access to dn.children="dc=com"
by * read
</screen>

<para>L'accesso in lettura &egrave; consentito alle voci nel sottoalbero
dc=com, tranne per quelle voci nel sottoalbero dc=example,dc=com, a cui
&egrave; consentito accesso in ricerca. Non &egrave; consentito
l'accesso a dc=com, poich&eacute; nessuna direttiva di accesso
corrisponde a questo DN. Se l'ordine di queste direttive di accesso
fosse invertito, la direttiva trascinata non verrebbe mai raggiunta,
poich&eacute; tutte le voci sotto; dc=example,dc=com sono anche voci
dc=com.</para>

<para><command>Nota:</command> notare anche che se nessuna direttiva di
accesso o nessuna clausola "by &lt;who&gt;" corrisponde,
<command>l'accesso &egrave; negato</command>. Questo significa che ogni
direttiva <emphasis>access to</emphasis> termina con una clausola
implicita <emphasis>by * none </emphasis>, e ciascun elenco di accesso
termina con una direttiva implicita <emphasis>access to * by *
none</emphasis>.</para>

<para>L'esempio seguente mostra ancora l'importanza dell'ordinamento,
sia delle direttive di accesso che delle clausole "by &lt;who&gt;".
Inoltre mostra l'uso di un selettore di attributo per garantire
l'accesso a un attributo specifico e vari selettori &lt;who&gt;. 
</para>

<screen>access to dn.subtree="dc=example,dc=com" attr=homePhone
	by self write
	by dn.children=dc=example,dc=com" search
	by peername=IP:10\..+ read
	access to dn.subtree="dc=example,dc=com"
	by self write
	by dn.children="dc=example,dc=com" search
	by anonymous auth
</screen>

<para>Questo esempio riguarda le voci nel sottoalbero
"dc=example,dc=com". A tutti gli attributi tranne homePhone, una voce
puņ scrivere su se stessa, le voci nei campi example.com possono cercare
da queste, nessun altro ha accesso (implicito by * none)  tranne per
autenticazione/autorizzazione (che &egrave; sempre fatta anonimamente).
L'attributo homePhone &egrave; scrivibile dalla voce, ricercabile dai
campi sotto example.com,  leggibile dai client che si connettono dalla
rete 10, e non &egrave; altrimenti leggibile  (implicito by * none). 
Tutti gli altri accessi sono negati dall'implicito access to * by * none.
</para>

<para>A volte &egrave; utile per consentire a un particolare DN di
aggiungere o rimuovere se stesso da un attributo. Per esempio, se si
volesse creare un gruppo di utenti e concedere loro di aggiungere e
rimuovere soltanto il proprio DN dall'attributo membro, si potrebbe 
fare ci&ograve; tramite un'istruzione di accesso come questa: </para>

<screen>access to attr=member,entry 
        by dnattr=member selfwrite 
</screen>

<para>Il selettore dnattr &lt;who&gt; comunica che l'accesso si applica agli
oggetti elencati nell'attributo membro. Il selettore di accesso del
selfwrite comunica che tali membri possono aggiungere o cancellare soltanto
il loro proprio DN dall'attributo, e non altri valori. L'aggiunta del
campo attributo &egrave; necessaria poich&eacute; l'accesso alla voce
&egrave; necessario per accedere a qualunque attributo dell'oggetto.
</para>

<para>C'&egrave; abbondanza di informazioni sui controllo di accesso
sulla Guida dell'Amministratore OpenLDAP. Consultare: <ulink
url="http://www.openldap.org/doc/admin/slapdconfig.html#Access
Control">Access Control</ulink> per maggiori informazioni su questo
argomento.</para></section>


<section id="ConfigurationExample">
<title>Esempio del file di configurazione</title>

<para>Quello che segue &egrave; un esempio di file di configurazione,
suddiviso con testo esplicativo. Definisce due database per gestire
le parti differenti dell'albero X.500; entrambe sono istanze di database
BDB. I numeri della linea indicati sono forniti soltanto come
riferimento e non sono inclusi nel file reale. In primo luogo, la
sezione di configurazione globale:</para>

<screen>
1.    # example config file - global configuration section
2.    include /usr/local/etc/schema/core.schema
3.    referral ldap://root.openldap.org
4.    access to * by * read</screen>


<para>La linea 1 &egrave; un commento. La linea 2 include un altro file
di config il quale contiene le definizioni dello schema del nucleo. La
direttiva di rinvio nella linea 3 significa che le domande non locali ad
uno dei database definiti sotto si riferiranno al server LDAP che
funziona sulla porta standard (389) all'host root.openldap.org.</para>

<para>La linea 4 &egrave; un controllo di accesso globale. Si applica a
tutti i campi (dopo qualsiasi comando di accesso al database-specifico
applicabile).</para>

<para>La sezione successiva del file di configurazione definisce un
backend BDB che gestir&agrave; le domande per cose nella porzione
dell'albero "dc=example,dc=com". Il database viene replicato su due
slapd slave, una sui truelies, l'altra su judgmentday. Gli indici devono
essere mantenuti per numerosi attributi e l'attributo userPassword deve
essere protetto da accessi non autorizzati.</para>

<screen>
5.     # BDB definition for the example.com
6.     database bdb
7.     suffix "dc=example,dc=com"
8.     directory /usr/local/var/openldap-data
9.     rootdn "cn=Manager,dc=example,dc=com"
10.    rootpw secret
11.    # replication directives
12.    replogfile /usr/local/var/openldap/slapd.replog
13.	   replica uri=ldap://slave1.example.com:389
14.            binddn="cn=Replicator,dc=example,dc=com"
15.            bindmethod=simple credentials=secret
16.    replica uri=ldaps://slave2.example.com:636
17.            binddn="cn=Replicator,dc=example,dc=com"
18.            bindmethod=simple credentials=secret
19.    # indexed attribute definitions
20.    index uid pres,eq
21.    index cn,sn,uid pres,eq,sub
22.    index objectClass eq
23.    # database access control definitions
24.    access to attr=userPassword
25.            by self write
26.            by anonymous auth
27.            by dn.base="cn=Admin,dc=example,dc=com" write
28.            by * none
29.    access to *
30.            by self write
31.            by dn.base="cn=Admin,dc=example,dc=com" write
32.            by * read
</screen>


<para>La linea 5 &egrave; un commento. L'inizio della definizione del
database &egrave; contrassegnato dalla parola chiave del database alla
linea 6. La linea 7 specifica il suffisso di DN per le domande da
passare a questo database. La linea 8 specifica la directory in cui i
file del database saranno presenti.</para>

<para>Le linee 9 e 10 identificano la voce "super user" del database e
la password collegata. Questo campo non &egrave; soggetto a controllo di
accesso o a limitazioni di scadenza o di formato. Ricordare di cifrare
il rootpw usando slappasswd.</para>

<para><command>Esempio: </command>rootpw{SSHA}Jq4xhhkGa7weT/0xKmaecT4HEXsdqiYA
</para>

<para>Le linee da 11 a 18 sono per la replica. Vedere il link <ulink
url="http://www.openldap.org/doc/admin/replication.html">Replication</ulink>
per maggiori informazioni su queste direttive.</para>

<para>Le linee da 20 a 22 indicano gli indici da mantenere per i vari
attributi.</para>

<para>Le linee da 24 a 32 specificano il controllo di accesso per i
campi in questo database. Poich&eacute; questo &egrave; il primo
database, i controlli si applicano anche ai campi non contenuti in alcun
database (come la Root DSE). Per tutti i campi applicabili, l'attributo
di userPassword &egrave; scrivibile dall'oggetto stesso e dall'oggetto 
"admin". Pu&ograve; essere usato per scopi di autenticazione/autorizzazione, 
ma non &egrave; altrimenti leggibile. Tutti gli altri attributi sono 
scrivibili dall'oggetto e dall'oggetto "admin" ma possono essere letti da 
tutti gli utenti (autenticati o no).</para>

<para>La sezione successiva dell'esempio del file di configurazione
definisce un altro database BDB. Questo gestisce le domande che
riguardano il sottoalbero dc=example,dc=net, ma &egrave; gestito dalla
stessa entit&agrave; del primo database. Si noti che senza la linea 39,
l'accesso in lettura verrebbe concesso grazie alla regola globale di
accesso contenuta nella linea 4.</para>

<screen>
33.    # BDB definition for example.net
34.    database bdb
35.    suffix "dc=example,dc=net"
36.    directory /usr/local/var/openldap-data-net
37.    rootdn "cn=Manager,dc=example,dc=com"
38.    index objectClass eq
39.    access to * by users read</screen></section>
</chapter>


<chapter id="RunningLDAP"><title>Eseguire il server LDAP</title>

<para>Il demone <emphasis>slapd</emphasis> di LDAP &egrave; progettato
per funzionare come server stand-alone. Questo permette al server di
avere i vantaggi del caching, gestire i problemi di concorrenza con il
database sottostante, e conservare risorse di sistema. Il funzionamento
da inetd(8) non &egrave; previsto.</para>


<section id="CommandOptions">
<title>Opzioni della linea di comando</title>
<para><emphasis>Slapd</emphasis> supporta un certo numero di opzioni
della linea di comando, come dettagliato nella pagina di manuale. Questa 
sezione specifica alcune opzioni comunemente usate:</para>

<screen>-f &lt;filename&gt;</screen>

<para>Questa opzione specifica un file di configurazione alternativo 
per slapd. Il default &egrave; normalmente /usr/local/etc/openldap/slapd.conf.
</para>

<screen>-h &lt;URLs&gt;</screen>

<para>Questa opzione specifica le configurazioni alternative dell'
ascoltatore. Il default &egrave; ldap:/// che comporta LDAP sopra TCP su 
tutte le interfacce sulla porta LDAP di default 389. Si possono 
specificare le coppie host-porta o altri schemi di protocollo (quali 
ldaps:// o ldapi://). Per esempio, -h "ldaps:// ldap://127.0.0.1:667" 
generer&agrave; due ascoltatori: uno per LDAP sopra SSL su tutte le 
interfacce sulla porta 636 di default LDAP/SSL ed uno per LDAP sopra TCP 
sull'interfaccia del localhost (loopback) sulla porta 667. Gli host 
possono essere specificati usando il formato IPV4 punto-decimale usando 
i nomi di host. I valori delle porte devono essere numerici.</para>

<screen>-n &lt;service-name&gt;</screen>

<para>questa opzione specifica il nome del servizio usato per fare il
log e  per altri scopi. Il nome del servizio di default &egrave;
slapd.</para>

<screen>-l &lt;syslog-local-user&gt;</screen>

<para>Questa opzione specifica l'utente locale per il servizio syslog(8). I 
valori possono essere LOCAL0, LOCAL1, LOCAL2... e LOCAL7. Il default &egrave; 
LOCAL4. Questa opzione potrebbe non essere supportata su tutti i sistemi. 
Vedere i <xref linkend="Logs"/> per maggiori dettagli.</para>

<screen>-u user -g group</screen>

<para>Queste opzioni specificano rispettivamente l'utente e il gruppo  
necessari per fare funzionare lo slapd. L'utente pu&ograve; essere o un
username o  uid. Il gruppo pu&ograve; essere un nome gruppo o gid.
</para>

<screen>-r directory</screen>

<para>Questa opzione specifica una directory run-time. Slapd eseguir&agrave; 
chroot(2) in questa directory dopo aver aperto gli ascoltatori, ma prima 
di leggere qualunque file di configurazione o di inizializzare
qualunque backend.</para>


<screen>-d &lt;level&gt; | ?</screen>

<para>Questa opzione regola il livello di debug di slapd a &lt;level&gt;. 
Quando il livello &egrave; un carattere `?', i vari livelli di debug sono
stampati e slapd esce, incurante di qualsiasi altra opzione data. I 
livelli correnti di debug sono:</para>

<para><table tocentry="1">
<title>Livelli di debug</title>

<tgroup cols="2"><colspec colname="Level" colwidth="0"/><colspec colname="Description" colwidth="0"/>

<thead><row><entry>Livello</entry>
<entry>Descrizione</entry></row></thead>

<tbody><row><entry>-1</entry>
<entry>abilita tutto il debug</entry></row>
<row><entry>0</entry>
<entry>nessun debug</entry></row>
<row><entry>1</entry>
<entry>traccia le chiamate alle funzioni</entry></row>
<row><entry>2</entry>
<entry>debug il packet handling</entry></row>
<row><entry>4</entry>
<entry>heavy trace debugging</entry></row>
<row><entry>8</entry>
<entry>gestione della connessione</entry></row>
<row><entry>16</entry>
<entry>stampa i pacchetti inviati e ricevuti</entry></row>
<row><entry>32</entry>
<entry>processamento del filtro di ricerca </entry></row>
<row><entry>64</entry>
<entry>processamento del file di configurazione</entry></row>
<row><entry>128</entry>
<entry>processamento lista di controllo accesso</entry></row>
<row><entry>256</entry>
<entry>stats log connections/operations/results</entry></row>
<row><entry>512</entry>
<entry>stats log entries sent </entry></row>
<row><entry>1024</entry>
<entry>stampa la comunicazione con i backend della shell </entry></row>
<row><entry>2048</entry>
<entry>print entry parsing debugging </entry></row></tbody></tgroup></table></para>

<para>Si possono permettere livelli multipli specificando l'opzione di 
debug ogni volta per ogni livello voluto. O, poich&eacute; i livelli di 
debug sono additivi, si possono fare i calcoli da s&egrave;. Quindi se
si vogliono tracciare le chiamate alle funzioni e verificare che il file 
di configurazione venga processato si pu&ograve; impostare il livello 
come la somma di questi due livelli (in questo caso, - d 65). O si pu&ograve; 
lasciare che slapd faccia il calcolo, (per esempio - d 1 - d 64). 
Consultare &lt;ldap.h&gt;per maggiori dettagli. </para>

<para><command>Nota:</command> lo slapd deve essere compilato con -
DLDAP_DEBUG definito in modo che tutte le informazioni di debug oltre i
due livelli di stat siano disponibili. </para></section>


<section id="StartingLDAP">
<title>Avviare il server LDAP</title>
<para>in generale, slapd si avvia cos&igrave;:</para>

<screen>/usr/local/etc/libexec/slapd [&lt;option&gt;]*</screen>

<para>Dove/usr/local/etc/libexec &egrave; determinato per configurare e  
&lt;option&gt; &egrave; una delle opzioni descritte precedentemente (o 
in slapd(8)). A meno che si specifichi un livello di debug (incluso
Livello 0), lo slapd automaticamente si biforcher&agrave; e si 
staccher&agrave; dal relativo terminale di controllo e girer&agrave; 
in background. </para></section>

<section id="KillingLDAP">
<title>Terminare il server LDAP</title>
<para>Per terminare slapd in modo sicuro, si pu&ograve; usare questo
comando: </para>

<screen>kill -TERM `cat $(ETCDIR)/slapd.pid`</screen>

<para>Terminare slapd con un metodo pi&ugrave; drastico pu&ograve;
causare la corruzione del database, perch&eacute; potrebbe avere bisogno di
svuotare i vari buffer prima di uscire. Si noti che lo slapd scrive
il suo pid in un file denominato slapd.pid nella directory che si &egrave;
configurato nel file di slapd.conf, per esempio:/usr/local/var/slapd.pid 
</para>

<para>Slapd inoltre scriver&agrave; i suoi argomenti in un file
denominato slapd.args nella directory che si &egrave; configurato nel file
slapd.conf, per esempio/usr/local/var/slapd.args </para></section>
</chapter>


<chapter id="DBCreation"><title>Creazione e manutenzione del database</title>

<para>Questa sezione spiega come generare un database slapd da zero. Ci 
sono due modi per creare un database. In primo luogo, si pu&ograve; creare il
database on line usando LDAP . Con questo metodo si avvia semplicemente 
slapd e si aggiungono i campi usando il client LDAP di propria scelta.
Questo metodo &egrave; valido per database relativamente piccoli (poche
centinaia o migliaia di campi, secondo le proprie esigenze). Questo 
metodo funziona per i tipi di database che supportano gli aggiornamenti.
</para>

<para>Il secondo metodo di creazione del database &egrave; farlo off-line 
usando programmi di utilit&agrave; speciali forniti da slapd. Questo 
metodo &egrave; il migliore se si devono creare molte migliaia di campi, che
richiederebbe un tempo inaccettabilmente lungo usando il metodo LDAP, o 
se si desidera assicurare l'inaccessibilit&agrave; del database in fase 
di creazione. Si noti che non tutti i tipi di database supportano queste
utilitit&agrave;.</para>

<section id="DBOnline">
<title>Creazione di un database on line</title>

<para>ll pacchetto di programmi OpenLDAP, &egrave; munito di una
utilit&agrave; denominata ldapadd, usata per aggiungere i campi durante
il funzionamento  del server LDAP. Se si sceglie di creare il Database
on line, si pu&ograve; utilizzare lo strumento ldapadd per aggiungere i 
campi (si possono anche usare altri client forniti fuori dal pacchetto
OpenLDAP per aggiungere i campi, come il <ulink url="http://www.iit.edu/~gawojar/ldap/"> Browser Ldap</ulink>). Dopo
l'aggiunta dei primi campi, si pu&ograve; ancora usare ldapadd per
aggiungerne ancora. Bisogna essere sicuri di aver messo le seguenti
opzioni di configurazione sul proprio file sladp.conf prima di far
partire slapd:  </para>

<screen>suffix &lt;dn&gt; </screen>

<para>Come descritto nella  <xref linkend="GeneralDBDirect"/>, questa 
opzione comunica quali campi devono essere tenuti da questo database.
Bisogna impostare questo al DN della radice del sotto-albero che si
sta provando a generare. Per esempio: </para>

<screen>suffix "o=TUDelft, c=NL" </screen>

<para>Si dovrebbe essere sicuri di specificare una directory in cui i file 
di indice verranno creati: </para>

<screen>directory /usr/local/tudelft </screen>

<para>Bisogna generare questa directory con i permessi appropriati, 
cos&igrave; che lo slapd possa scrivere in essa. </para>

<para>Bisogna configurare slapd in modo da poterlo connettere come 
utente della directory con permesso di aggiungere oggetti. Si pu&ograve;
configurare la directory per supportare uno speciale super-utente o 
utente root, proprio per questo fine. Ci&ograve; &egrave; fatto con le
seguenti due opzioni nella definizione del database: </para>

<screen>
rootdn &lt;dn&gt; 
rootpw &lt;passwd&gt;   /* Remember to use a SHA password here !!! */ 
</screen>

<para>Queste opzioni specificano un DN e una password che possono essere 
usati per autenticarsi come campo "superutente" nel database (cio&egrave;,
l'oggetto che pu&ograve; fare tutto). Il DN e la password
specificati qui funzioneranno sempre, senza verificare se l'oggetto
chiamato realmente esiste o abbia la password data. Questo risolve il
problema dell'uovo e della gallina , cio&egrave; quello di
autenticare ed aggiungere gli oggetti prima che tutti gli oggetti 
tuttavia esistano. </para>

<para><emphasis>Slapd</emphasis> capisce nativamente se si usa una password
cifrata SHA-1 sulla direttiva rootpw. Io uso una classe Java che
genera le password SHA-1, ma &egrave; possibile usare il comando <emphasis>
slappasswd</emphasis> per generare le password:</para>

<screen>slappasswd -h {SHA}</screen>

<screen>rootpw    "{SHA}5en6G6MezRroT3XKqkdPOmY/BfQ="</screen>

<para>Per esempio:</para>

<screen>
        rootdn "cn=Manager,dc=example,dc=com"
        rootpw &quot;{SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=&quot;</screen>

<para>L'output di default per slappasswd &egrave; di generare password 
Secure Hash {SSHA}, in questo caso non &egrave; necessario passare il 
parametro -h, solo chiamare direttamente slappasswd.</para>

<para>Se si sta usando SASL come meccanismo di autenticazione verso
LDAP, la linea del rootpw pu&ograve; essere scartata. Dare uno sguardo
sulla  <xref linkend="GeneralDBDirect"/> e sulla <xref linkend="Authentication"/> 
per maggiori dettagli.</para>

<para>Per concludere, dovreste assicurarvi che la definizione di 
database contenga le definizioni di indice desiderate:  </para>

<screen>index &lcub;&lt;attrlist&gt; &verbar; default&rcub; &lsqb;pres,eq,sub,none&rsqb; </screen>

<para>Per esempio, per indicizzare gli attributi cn, sn, uid e objectclass, 
possono essere usate le seguenti linee di configurazione dell'indice.</para>

<screen>
index cn,sn,uid pres,eq,sub
index objectClass pres,eq
</screen>


<para><command>Nota:</command>Si noti che non tutti i tipi di indice 
sono disponibili con tutti i tipi di attributo. Si dia uno sguardo su
<xref linkend="LDBMDirect"/> per gli esempi.</para>

<para>Una volta che si sono configurate le cose a proprio gradimento,
avviare slapd, collegarsi con il proprio client LDAP, e iniziate ad
aggiungere gli oggetti. Per esempio, per aggiungere il campo TUDelft
seguito da un campo postmaster per mezzo dello strumento ldapadd, si 
pu&ograve; creare un file denominato /tmp/newentry contenente:</para>

<screen>
o=TUDelft, c=NL 
objectClass=organization 
description=Technical University of Delft Netherlands 

cn=Postmaster, o=TUDelft, c=NL 
objectClass=organizationalRole 
cn=Postmaster 
description= TUDelft postmaster - postmaster@tudelft.nl </screen>

<para>e poi usare un comando come questo per creare realmente l'oggetto:
</para>

<screen>ldapadd -f /tmp/newentry -x -D "cn=Manager, o=TUDelft, c=NL" -w secret </screen>

<para>Il precedente comando suppone che si sia impostato il rootdn a
"cn=Manager, o=TUDelft, c=NL" e rootpw a "segreto"
(forse SHA-1 cifrato su slapd.conf). Se non si vuole scrivere la
password sulla linea di comando, usare l'opzione -W per il comando
ldapadd invece di -w "password". Comparir&agrave; la richiesta di 
digitare la password: </para>

<screen>
ldapadd -f /tmp/newentry -x -D "cn=Manager, o=TUDelft, c=NL" -W 
Enter LDAP Password: </screen></section>

<section id="CreateDBOffline">
<title>Creare un database off line</title>

<para>Il secondo metodo di creazione del database &egrave; farlo
off-line, usando gli strumenti del database di slapd descritti qui
di seguito. Questo metodo &egrave; il migliore se avete molte migliaia di
oggetti da produrre, in quanto con il primo metodo occorrerebbe una
quantit&agrave; di tempo inaccettabile cio&egrave; usando il metodo 
LDAP descritto precedentemente. Questi strumenti leggono il file di 
configurazione dello slapd e il file dell&rsquo;input LDIF che 
contengono una rappresentazione del testo degli oggetti da aggiungere. 
Producono direttamente i file index del database. Ci sono parecchie 
opzioni di configurazione importanti delle quali vorreste essere sicuri di
impostare nei config file del database in primo luogo: </para>

<screen>suffix &lt;dn&gt; </screen>

<para>Come descritto nella sezione precedente, questa opzione comunica quali
oggetti devono essere tenuti da questo database. Si dovrebbe impostare
questo al DN della radice del sotto-albero che si sta provando a creare.
Per esempio:</para>

<screen>suffix "o=TUDelft, c=NL" </screen>

<para>Si dovrebbe essere sicuri di specificare una directory in cui i file
index dovrebbero essere creati: </para>

<screen>directory /usr/local/tudelft </screen>

<para>Per concludere, si dovrebbe specificare quali indici si desidera 
sviluppare. Ci&ograve; &egrave; fatto da una o pi&ugrave; opzioni di indice.
</para>

<screen>index {&lt;attrlist&gt; | default } [pres,eq,approx,sub,none]</screen>

<para>Per esempio:</para>

<screen>
index cn,sn,uid pres,eq,sub
index objectClass eq
</screen>

<para>Ci&ograve; genererebbe gli indici di presenza, di uguaglianza e di
sottostringa per il cn, Sn ed gli attributi del uid e un indice di
uguaglianza per l&rsquo;attributo objectClass. Vedere la sezione file di
configurazione per maggiori informazioni su questa opzione.</para>

<para>Una volta che si sono configurate le cose a proprio gradimento,
creare il database primario e gli indici collegati facendo funzionare il
programma slapadd(8):</para>

<screen>slapadd -l &lt;inputfile&gt; -f &lt;slapdconfigfile&gt; [-d &lt;debuglevel&gt;]
 [-n &lt;integer&gt;|-b &lt;suffix&gt;]</screen>

<para>Gli argomenti hanno i seguenti significati:</para>

<screen>-l &lt;inputfile&gt;</screen>

<para>Specifica il file input di LDIF contenente gli oggetti da
aggiungere nella forma del testo (dare uno sguardo alla prossima sezione).
</para>

<screen>-f &lt;slapdconfigfile&gt;</screen>

<para>Specifica il file di configurazione dello slapd che comunica dove
creare gli indici, che indici creare, ecc.</para>

<screen>-d &lt;debuglevel&gt;</screen>

<para>Attiva il debbuging, come specificato da  &lt;debuglevel&gt;. I 
livelli di debug sono gli stessi come per slapd. Vedere la  
<xref linkend="CommandOptions"/> per maggiori dettagli.
</para>

<screen>-n &lt;databasenumber&gt;</screen>

<para>Un argomento opzionale che specifica quale database modificare. Il
primo database elencato nel file di configurazione &egrave; 1, i secondi
2, ecc. Di default &egrave; usato il primo database nel file di
configurazione. Non dovrebbe essere usato insieme a - b.</para>

<screen>-b &lt;suffix&gt;</screen>

<para>Un argomento opzionale che specifica quale database modificare. Il
suffisso fornito &egrave; abbinato a un suffisso di una direttiva del
database per determinare il numero del database. Non dovrebbe essere
insieme ad - n.</para>

<para>A volte pu&ograve; essere necessario rigenerare gli indici (come
dopo aver modificato slapd.conf(5)). Ci&ograve; &egrave; possibile
usando il programma slapindex(8). Il programma slapindex &egrave;
invocato in questo modo:</para>

<screen>slapindex -f &lt;slapdconfigfile&gt; [-d &lt;debuglevel&gt;] [-n &lt;databasenumber&gt;|-b &lt;suffix&gt;]</screen>

<para>Dove le opzioni - f, - d, - n e -b sono le stesse che per il
programma slapadd(1). slapindex ricostruisce tutti gli indici basati sui
contenuti correnti del database.</para>

<para>Il programma slapcat &egrave; usato per fare il dump del database
in un file LDIF. Ci&ograve; pu&ograve; essere utile quando si desidera
fare un backup leggibile del proprio database o quando si desidera
editare il proprio database off-line. Il programma &egrave; invocato in
questo modo:</para>

<screen>slapcat -l &lt;filename&gt; -f &lt;slapdconfigfile&gt; [-d &lt;debuglevel&gt;] [-n &lt;databasenumber&gt;|-b &lt;suffix&gt;]</screen>

<para>dove -n o -b si usano per selezionare il database nello
slapd.conf(5) specificato usando -f. L'uscita corrispondente di LDIF
&egrave; scritta sullo standard output o in un determinato file usando
l'opzione -l.</para></section>


<section id="MoreonLDIF">
<title>Maggiori informazioni sul formato LDIF</title>
<para>L'LDAP Data Interchange Format (LDIF) &egrave; usato per
rappresentare i campi di LDAP in un formato testo semplice. La forma di
base di un campo &egrave;: 
</para>

<screen>
#comment 
dn: &lt;distinguished name&gt; 
&lt;attrdesc&gt;: &lt;attrvalue&gt; 
&lt;attrdesc&gt;: &lt;attrvalue&gt;
...</screen>

<para>Le linee che cominciano con un '#' sono commenti. Un attributo di
descrizione (attrdesc) pu&ograve; essere un tipo semplice di attributo
come cn o objectClass o 1, 2, 3 (un OID associato con un tipo di
attributo) o pu&ograve; includere opzioni quali i cn; lang_en_US o
userCertificate; binary. 
</para>

<para>Una linea pu&ograve; essere continuata iniziando la linea seguente
con un singolo spazio o un carattere tab. Per esempio: 
</para>

<screen>
dn: cn=Barbara J Jensen, dc=example, dc=
 com
cn: Barbara J
    Jensen
</screen>

<para>&egrave; equivalente a:</para>

<screen>
dn: cn=Barbara J Jensen, dc=example, dc=com
cn: Barbara J Jensen
</screen>

<para>I valori multipli di attributo sono specificati su linee separate.
Per esempio:</para>

<screen>
cn: Barbara J Jensen
cn: Babs Jensen
</screen>


<para>Se un  &lt;attrvalue&gt; contiene i caratteri non stampabili o
comincia con uno spazio, un carattere due punti (':'), o un segno di
minore,('&lt;'), il &lt;attrdesc&gt; &egrave; seguito da due punti e
dalla codifica base64 del valore. Per esempio, il valore "begins with a
space" sarebbe codificato in questo modo: </para>

<screen>cn:: IGJlZ2lucyB3aXRoIGEgc3BhY2U=</screen>

<para>Si pu&ograve; anche specificare un URL che contiene il valore di
attributo. Per esempio, ci&ograve; che segue specifica il valore
jpegPhoto che si dovrebbe essere ottenere dal file /path/to/file.jpeg.
</para>

<screen>cn:&lt; file://path/to/file.jpeg</screen>

<para>Gli oggetti multipli all'interno dello stesso file LDIF sono
separati da linee vuote. Qui c'&egrave; un esempio di un file LDIF che
contiene tre campi. 
</para>

<screen>
# Barbara's Entry
dn: cn=Barbara J Jensen, dc=example, dc=com
cn: Barbara J Jensen
cn: Babs Jensen
objectClass: person
sn: Jensen

# Bjorn's Entry
dn: cn=Bjorn J Jensen, dc=example, dc=com
cn: Bjorn J Jensen
cn: Bjorn Jensen
objectClass: person
sn: Jensen
# Base64 encoded JPEG photo
jpegPhoto:: /9j/4AAQSkZJRgABAAAAAQABAAD/2wBDABALD
A4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQ
ERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVG

# Jennifer's Entry
dn: cn=Jennifer J Jensen, dc=example, dc=com
cn: Jennifer J Jensen
cn: Jennifer Jensen
objectClass: person
sn: Jensen
# JPEG photo from file
jpegPhoto:&lt; file://path/to/file.jpeg</screen>

<para>Notare che il jpegPhoto nel campo Bjorn &egrave; codificato base
64 ed il jpegPhoto nell'oggetto Jennifer &egrave; ottenuto dalla
posizione indicata dal URL. </para>

<para>Gli spazi posteriori non sono ripuliti dai valori in un file LDIF.
N&egrave; gli spazi interni multipli sono compressi. Se non sono
desiderati nei propri dati, non li si metta.</para></section>

<section id="Utilities">
<title>Le utilit&agrave; ldapsearch, ldapdelete e ldapmodify</title>
<para><command>ldapsearch</command> - ldapsearch &egrave; un'interfaccia di 
shell che permette di accedere alla chiamata di libreria ldap_search(3). 
Usare questo programma di utilit&agrave; per cercare i campi nel proprio 
database backend LDAP.
</para>

<para>La sintassi per richiamare ldapsearch &egrave; la seguente
(guardare alla man page del ldapsearch per vedere che cosa significa
ogni opzione):  
</para>

<screen>
ldapsearch  [-n]  [-u]  [-v]  [-k]  
[-K]  [-t]  [-A] [-B] [-L] 
[-R] [-d debuglevel] [-F sep] [-f file] 
[-x] [-D binddn]  [-W]  [-w bindpasswd]  
[-h ldaphost]  [-p ldapport]   [-b searchbase]   
[-s base|one|sub] 
[-a never|always|search|find] [-l timelimit] 
[-z sizelimit] filter [attrs...] 
</screen>


<para><command>ldapsearch</command> apre un collegamento con un server LDAP, 
bind, ed effettua una ricerca usando il filtro <emphasis>filter</emphasis>. 
Il filtro dovrebbe essere conforme alla rappresentazione della stringa per 
i filtri LDAP come definiti in RFC 1558. Se ldapsearch trova uno o pi&ugrave; 
campi, gli attributi specificati da <emphasis>attrs</emphasis> sono richiamati 
e i campi ed i valori sono stampati sullo standard output.
Se nessun attrs &egrave; elencato, tutti gli attributi sono restituiti.
</para>

<screen>
ldapsearch -x -b 'o=TUDelft,c=NL' 'objectclass=*' 

ldapsearch -b 'o=TUDelft,c=NL' 'cn=Rene van Leuken' 

ldasearch -u -b 'o=TUDelft,c=NL' 'cn=Luiz Malere' sn mail
</screen>


<para>L'opzione -b sta per searchbase (punto iniziale di ricerca),
l'opzione -u corrisponde alle informazioni di output userfriendly e
l'opzione -x &egrave; usata per specificare la semplice
autenticazione.</para>


<para><command>ldapdelete - </command>ldapdelete &egrave; un'interfaccia 
accessibile dalla shell alla chiamata di libreria ldap_delete(3). 
Usare questo programma di utilit&agrave; per eliminare gli oggetti sul 
proprio database backend Ldap.</para>

<para>La sintassi per richiamare ldapdelete &egrave; la seguente (dare
un'occhiata alla man page del ldapdelete per vedere che cosa significa
ogni opzione): </para>

<screen>
ldapdelete   [-n]   [-v]  [-k]  [-K]  
[-c]  [-d debuglevel]  [-f file]  [-D binddn]  
[-W]  [-w passwd] [-h ldaphost] [-p ldapport] 
[dn]... 

</screen>

<para><command>ldapdelete</command> apre un collegamento con un server LDAP, 
bind, e cancella una o pi&ugrave; campi. Se uno o pi&ugrave; argomenti dn 
sono forniti, gli oggetti con quei Distinguished Names vengono eliminati. 
Ciascun DN dovrebbe essere rappresentato da una stringa DN come definito 
in RFC 1779. Se non sono forniti argomanti sul DN, una lista di DN viene 
letta dallo standard input (o dal file se &egrave; usato -f flag). 
</para>

<para>Qui ci sono alcuni esempi di uso di ldapdelete: </para>

<screen>
ldapdelete 'cn=Luiz Malere,o=TUDelft,c=NL' 

ldapdelete -v 'cn=Rene van Leuken,o=TUDelft,c=NL' -D 'cn=Luiz Malere,o=TUDelft,c=NL' -W 

</screen>

<para>L'opzione -v corrisponde al modo prolisso, l'opzione -D
corrisponde a Binddn (il DN su cui fare l'autenticazione) e l'opzione -W
corrisponde alla prompt della password. </para>

<para><command>ldapmodify - </command>ldapmodify &egrave; un'interfaccia
accessibile dalla shell che permette l'accesso alle chiamate di libreria
ldap_modify(3) e ldap_add(3). Usare questo programma di utilit&agrave;
per modificare i campi sul proprio database backend LDAP. </para>

<para>La sintassi per richiamare ldapmodify &egrave; la seguente (dare
un'occhiata alla man page di ldapmodify per vedere il significato di
ogni opzione):  </para>

<screen>
ldapmodify   [-a]  [-b]  [-c]  [-r]  
[-n]  [-v]  [-k]  [-d debuglevel]  
[-D binddn]  [-W]  [-w passwd] 
[-h ldaphost] [-p ldapport] [-f file] 

ldapadd [-b] [-c] [-r] [-n] 
[-v]  [-k]  [-K]  [-d debuglevel]  
[-D binddn]  [-w passwd]  [-h ldaphost] 
[-p ldapport] [-f file] 
</screen>

<para><command>ldapadd</command> &egrave; implementato come un link 
fisico allo strumento ldapmodify. Quando invocato come ldapadd, il 
flag -a (aggiunge un nuovo campo) di ldapmodify &egrave; attivato 
automaticamente. ldapmodify apre un collegamento con un server LDAP, 
bind, e modifica o aggiunge voci. Le informazioni sugli oggetti sono 
lette dallo staqndard input o dal file attraverso l'uso dell'opzione -f.
</para>

<para>Qui ci sono alcuni esempi sull'uso di ldapmodify: </para>

<para>Supponendo che il file /tmp/entrymods esista ed abbia i contenuti: 
</para>

<screen>
dn: cn=Modify Me, o=University of Michigan, c=US 
changetype: modify 
replace: mail 
mail: modme@terminator.rs.itd.umich.edu 
- 
add: title 
title: Grand Poobah 
- 
add: jpegPhoto 
jpegPhoto: /tmp/modme.jpeg 
- 
delete: description 
- 
</screen>

<para>Il comando: </para>

<screen>ldapmodify -b -r -f /tmp/entrymods </screen>

<para>sostituir&agrave; i contenuti dell'attributo della voce dell'email
"Modify Me" con il valore "modme@terminator.rs.itd.umich.edu",
aggiunger&agrave; un titolo "Grand Poobah", e i contenuti del file
/tmp/modme.jpeg come un jpegPhoto e rimuover&agrave; completamente
l'attributo descrizione. </para>

<para>Le stesse modifiche come sopra possono essere fatte usando il
pi&ugrave; vecchio formato di input ldapmodify: </para>

<screen>
cn=Modify Me, o=University of Michigan, c=US 
mail=modme@terminator.rs.itd.umich.edu 
+title=Grand Poobah 
+jpegPhoto=/tmp/modme.jpeg 
-description 
</screen>

<para>E pi&ugrave; il seguente comando: </para>

<screen>ldapmodify -b -r -f /tmp/entrymods </screen>

<para>Supponendo che il file /tmp/newentry esista ed abbia i contenuti:
</para>

<screen>
dn: cn=Barbara Jensen, o=University of Michigan, c=US 
objectClass: person 
cn: Barbara Jensen 
cn: Babs Jensen 
sn: Jensen 
title: the world's most famous manager 
mail: bjensen@terminator.rs.itd.umich.edu 
uid: bjensen 
</screen>

<para>Il comando: </para>

<screen>ldapadd -f /tmp/entrymods </screen>

<para>aggiunger&agrave; il campo con dn: cn=Barbara Jensen, o=University
del Michigan, c=US se non &egrave; gi&agrave; presente. Se un oggetto
con questo dn esiste gi&agrave;, il comando indicher&agrave; l'errore e
non sovrascriver&agrave; l'oggetto. </para>

<para>Supponendo che il file /tmp/newentry esista e abbia i contenuti: 
</para>

<screen>
dn: cn=Barbara Jensen, o=University of Michigan, c=US 
changetype: delete 
</screen>

<para>Il comando: </para>

<screen>ldapmodify -f /tmp/entrymods </screen>

<para>rimuover&agrave; l'oggetto Babs Jensen. </para>

<para>L'opzione -f corrisponde al file (legge le informazioni di
modifica da un file invece che dallo standard input), l'opzione -b
corrisponde al binario (tutti i valori che cominciano con un '/' nel
file di input sono interpretati come binari), -r corrisponde a 'replace'
(sostituite i valori esistenti con il default). </para></section>
</chapter>

<chapter id="Additional"><title>Caratteristiche e informazioni aggiuntive</title>

<para>In questa sezione si troveranno informazioni addizionali e
riferimenti utili per argomenti come Autenticazione, Log e client Ldap.
Alla fine della sezione ci sono anche delle URL generiche molto buone e
qualche libro riguardo l'argomento LDAP.</para>

<section id="LDAPMigrationTools"><title>LDAP Migration Tools</title>
<para>Gli LDAP Migration Tools sono una collezione di Script Perl
forniti da PADL software Ltd. Sono usati per convertire i file di
configurazione nel formato LDIF. Si raccomanda di leggere i termini di
licenza prima di usarli, anche se sono liberi. Se si progetta di usare
il proprio server LDAP per autenticare gli utenti, questi strumenti
potranno essere molto utili. Usare i Migration Tools per convertire il
proprio NIS o i propri archivi di password nel formato LDIF, rendendo
questi file compatibili con il proprio Server LDAP. Applicare anche
questi script Perl per la migrazione di utenti, gruppi, alias, host, 
netgroup, reti, protocolli, RPC e servizi dai nameservice esistenti 
(NIS, file flat e NETinfo) al formato LDIF.</para>

<para>Per scaricare gli LDAP Migration Tools e avere maggiori
informazioni, andare al seguente indirizzo:
<ulink url="http://www.padl.com/tools.html">http://www.padl.com/tools.html</ulink>.</para>

<para>Il pacchetto si presenta con un file README e il nome dei file di
script sono intuitivi. Dare uno sguardo al file README e poi avviare
applicando gli script.</para>

<para>Un altro URL raccomandato per i Migration Tool &egrave;:</para>

<para><ulink url="http://dataconv.org/apps_ldap.html">http://dataconv.org/apps_ldap.html</ulink></para></section>

<section id="Authentication">
<title>Autenticazione usando LDAP</title>

<para>Per accedere al servizio LDAP, il primo client LDAP deve
autenticare se stesso al servizio. Cio&egrave;, deve comunicare al
server LDAP chi sta cercando di accedere ai dati cos&igrave; che il
server puossa decidere cosa il client pu&ograve; vedere e fare. Se il
client si autentica con successo al server LDAP, allora quando il server
riceve successivamente una richiesta dal client, esso controller&agrave;
se al client &egrave; permesso fare (operare) la richiesta (domanda).
Questo processo &egrave; chiamato controllo di accesso. </para>

<para>In LDAP, l'autenticazione &egrave; fornita nell'operazione "bind".
Ldapv3 supporta tre tipi di autenticazioni: autenticazione anonima,
semplice e SASL. Un client che trasmette una richiesta a LDAP senza fare
un "bind" viene trattato come un client anonimo. L'autenticazione
semplice consiste nel trasmettere al server LDAP il fully qualified DN
del client (utente) e la password del client in chiaro. Questo
meccanismo presenta problemi di sicurezza, perch&eacute; la password
pu&ograve; essere letta dalla rete. Per evitare di esporre la password
in questo modo si pu&ograve; usare il meccanismo di autenticazione
semplice all'interno di un canale cifrato (quale SSL), a condizione che
questo sia fornito dal server LDAP. </para>

<para>Per concludere, SASL &egrave; il Simple Authentication and
Security Layer (RFC 2222). Esso specifica un protocollo di
domanda-risposta in cui i dati sono scambiati fra il client e il server
per gli scopi dell'autenticazione e di instaurazione di uno strato di
sicurezza su cui effettuare comunicazione successiva. Usando SASL, LDAP
pu&ograve; supportare qualunque tipo di autenticazione gradito al client
e al server LDAP. Il pacchetto di Cyrus-SASL &egrave; disponibile al
seguente URL: <ulink
url="http://asg.web.cmu.edu/sasl/sasl-library.html">http://asg.web.cmu.edu/sasl/sasl-library.html</ulink>.
</para>

<para>Oltre ad autenticare gli utenti per accedere alle informazioni dal
proprio albero di directory, il proprio server LDAP pu&ograve;
autenticare gli utenti da altri servizi (Sendmail, login, ftp, ecc.).
Questo &egrave; ottenuto migrando informazioni specifiche dell'utente
sul proprio server LDAP e usando un meccanismo denominato PAM (Pluggable
Authentication Module). Il modulo di autenticazione per LDAP &egrave;
disponibile come file di archivio in formato tar al seguente indirizzo:

<ulink url="http://www.padl.com/OSS/pam_ldap.html">http://www.padl.com/OSS/pam_ldap.html</ulink></para></section>

<section id="sasl">
<title>Configurazione di SASL : Digest - MD5</title>
<para>Sono riuscito a far funzionare l'autenticazione LDAP-SASL usando
il meccanismo DIGEST-MD5. Per ottenere questo, ho seguito rigorosamente
i passi elencati sotto:</para>

<itemizedlist>
<listitem><para>Scaricato SleepyCat 4.1.25, compilato e costruito manualmente. Dopo averlo scaricato, ho seguito le istruzioni elencate sul file doc/install.html sotto la directory in cui ho disimballato il pacchetto del tar.gz.</para>
<para>Dopo il disimballaggio potete sperimentare il consiglio dato:</para>
<screen>root@rdnt03:/usr/local/db-4.1.25/build_unix#../dist/configure
root@rdnt03:/usr/local/db-4.1.25/build_unix#make
root@rdnt03:/usr/local/db-4.1.25/build_unix#make install
</screen></listitem>
<listitem><para>Scaricato Cyrus SASL 2.1.12, disimballando e seguendo le istruzioni elencate sul documento doc/install.html, sotto la directoryt in cui ho disimballato il file del tar.gz. a questo punto &egrave; necessaria un po&rsquo; di attenzione, dovete far funzionare lo script di configurazione usando alcuni parametri del env:</para>
<screen>root@rdnt03:/usr/local/cyrus-sasl-2.1.12#env CPPFLAGS="-I/usr/local/BerkeleyDB.4.1/include"
LDFLAGS="-L/usr/local/BerkeleyDB.4.1/lib" ./configure</screen>
<para>I parametri ambientali CPPFLAGS e LDFLAGS mirerebbero rispettivamente alle directori include e lib dove &egrave; stato installato berkeley BDB.</para>
<para>A questo punto potete far funzionare ci&ograve; che vi &egrave; stato suggerito:</para>
<screen>root@rdnt03:/usr/local/cyrus-sasl-2.1.12#make
root@rdnt03:/usr/local/cyrus-sasl-2.1.12#make install
root@rdnt03:/usr/local/cyrus-sasl-2.1.12#ln -s /usr/local/lib/sasl2 /usr/lib/sasl2</screen></listitem>
<listitem><para>Per concludere, ho installato OpenLDAP 2.1.16 usandole stesse procedure elencate su questo documento, e facendo funzionare lo script di configurazione nello stesso modo della SASL configuration:</para>
<screen>root@rdnt03:/usr/local/openldap-2.1.16#env CPPFLAGS="-I/usr/local/BerkeleyDB.4.1/include"
LDFLAGS="-L/usr/local/BerkeleyDB.4.1/lib" ./configure</screen>
<para>Dopo questo, ho attuato il suggerimento:</para>
<screen>root@rdnt03:/usr/local/openldap-2.1.16#make depend
root@rdnt03:/usr/local/openldap-2.1.16#make
root@rdnt03:/usr/local/openldap-2.1.16#make install</screen></listitem>
<listitem><para>Successivamente, ho creato l'user database di SASL:</para>
<screen>root@rdnt03:~# saslpasswd2 -c admin</screen>
<para>Sarete richiamati per inserire una password. Ricordarsi che l'username non dovrebbe essere un DN (nome distinto). Inoltre ricordarsi di usare la stessa password di administrator sull'albero della directory.</para></listitem>
<listitem><para>Ora, dovreste regolare la direttiva sasl-regexp nel file <emphasis>slapd.conf</emphasis> prima di far partire il daemon slapd e di verificare l'autenticazione. Il mio file <emphasis>slapd.conf</emphasis> risiede in /usr/local/etc/openldap:</para>
<screen>sasl-regexp uid=(.*),cn=rdnt03,cn=DIGEST-MD5,cn=auth uid=$1,ou=People,o=Ever</screen>

<para>Questo parametro &egrave; nel formato di:</para>
<para>uid=&lt;username&gt;,cn=&lt;realm&gt;,cn=&lt;mech&gt;,cn=auth</para>
<para>Lo username &egrave; preso da sasl ed inserito nella stringa di ricerca di ldap nella posizione $1. Il proprio regno si presuppone essere il proprio FQDN (Fully Qualified Domain Name), ma in alcuni casi non &egrave; cos&igrave;, come nel mio. Si scopra che cosa &egrave; il proprio regno:</para>
<screen>root@rdnt03:~# sasldblistusers2
admin@rdnt03: userPassword
admin@rdnt03: cmusaslsecretOTP</screen>
<para>Nel mio caso, <emphasis>rdnt03</emphasis> &egrave; indicato come il regno. Se esso &egrave; il proprio FQDN non bisognerebbe avere problemi. Io uso il seguente file LDIF:
</para>
<screen>dn: o=Ever
o: Ever
description: Organization Root
objectClass: top
objectClass: organization

dn: ou=Staff, o=Ever
ou: Staff
description: These are privileged users that can interact with Organization products
objectClass: top
objectClass: organizationalUnit

dn: ou=People, o=Ever
ou: People
objectClass: top
objectClass: organizationalUnit

dn: uid=admin, ou=Staff, o=Ever
uid: admin
cn: LDAP Adminstrator
sn: admin
userPassword: {SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=
objectClass: Top
objectClass: Person
objectClass: Organizationalperson
objectClass: Inetorgperson

dn: uid=admin,ou=People,o=Ever
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
userPassword: {SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=
displayName: admin
mail: admin@eversystems.com.br
uid: admin
cn: Administrator
sn: admin
</screen>
<para>Inserire i campi nella propria directory LDAP usando il seguente comando:</para>
<screen>slapadd -c -l Ever.ldif -f slapd.conf -v -d 256</screen></listitem>
<listitem><para>Ora, avviare il demone <emphasis>slapd</emphasis> e lanciare una query usando il comando <emphasis>ldapsearch</emphasis>:</para>
<screen>root@rdnt03:~# ldapsearch -U admin@rdnt03 -b 'o=Ever' '(objectclass=*)'
SASL/DIGEST-MD5 authentication started
Please enter your password:
SASL username: admin@rdnt03
SASL SSF: 128
SASL installing layers
...
Entries
...</screen></listitem>
</itemizedlist>
<para>Questo &egrave; tutto! Se si preferisce usare SASL con kerberos V o 
GSSAPI, c'&egrave; un link utile su
<ulink url="http://www.openldap.org/doc/admin22/sasl.html">http://www.openldap.org/doc/admin22/sasl.html</ulink>. Questo link presuppone che si sia riusciti a installare e configurare la libreria di SASL. Le mailing list aiuteranno ad ottenere suggerimenti su questo problema: <ulink url="http://asg.web.cmu.edu/sasl/index.html#mailinglists">http://asg.web.cmu.edu/sasl/index.html#mailinglists</ulink></para>
</section>

<section id="Graphicaltools">
<title>Strumenti grafici di LDAP</title>

<para><command>Kldap</command> &egrave; un client grafico di LDAP
scritto per KDE. Kldap ha un'interfaccia piacevole e pu&ograve; mostrare
tutto l'albero delle informazioni immagazzinato sulla propria directory.
Si possono vedere alcuni screenshot dell'applicazione e scaricarli
presso:

<ulink url="http://www.mountpoint.ch/oliver/kldap/">http://www.mountpoint.ch/oliver/kldap/</ulink></para>

<para><command>KDirAdm</command> &egrave; uno strumento di
amministrazione delle directory LDAP scritto per l'ambiente desktop KDE
versione 2 o successiva. Mira a fornire tutte la funzionalit&agrave;
della maggior parte degli strumenti commerciali di amministrazione della
directory:

<ulink url="http://www.carillonis.com/kdiradm/">http://www.carillonis.com/kdiradm/</ulink></para>

<para><command>Directory Administrator</command> &egrave; l'applicazione
GNOME pi&ugrave; utilizzata per la gestione di utenti e gruppi UNIX sui
server directory LDAP. Gli amministratori di directory permettono di
creare ed eliminare utenti e gruppi e di gestire le informazioni della
rubrica degli indirizzi associata agli utenti, gestire il controllo di
accesso e gli instradamenti di posta di Sendmail:

<ulink url="http://diradmin.open-it.org/index.php">http://diradmin.open-it.org/index.php</ulink></para>

<para><command>GQ</command> &egrave; un altro client grafico di LDAP con
un'interfaccia pi&ugrave; semplice. &Egrave; stato scritto per GNOME.
Inoltre funziona sotto KDE, allo stesso modo come Kldap funziona sotto
GNOME. L'indirizzo per scaricarlo e ottenere maggiori informazioni
&egrave;:

<ulink url="http://biot.com/gq/">http://biot.com/gq/</ulink></para>

<para><command>LDAP Browser/Editor:</command> Questo strumento &egrave;
fantastico, ha funzionalit&agrave; complete di navigazione e
amministrative. Verificare: <ulink url="http://www.iit.edu/~gawojar/ldap/">Ldap
Browser</ulink>.</para></section>

<section id="Logs">
<title>Log</title>
<para>Slapd usa il servizio syslog(8) per generare i log. L'utente
predefinito del servizio syslog(8) &egrave; LOCAL4, ma i valori da
LOCAL0, LOCAL1, fino a LOCAL7 sono permessi. </para>

<para>Per permettere la generazione dei logs bisogna editare il proprio
file syslog.conf, situato solitamente nella directory /etc. </para>

<para>Create una linea come questa: </para>

<screen>local4.*     /usr/adm/ldaplog </screen>

<para>Questo user&agrave; di default l'utente LOCAL4 per il servizio
syslog. Se non si ha familiarit&agrave; con la sintassi di questa linea,
dare un'occhiata alle man pages di syslog, syslog.conf e syslogd. Se si
vuole specificare il livello dei log generati o cambiare l'utente
predefinito, si hanno le seguenti opzioni durante l'avvio di slapd:
</para>

<screen>-s syslog-level </screen>

<para>Questa opzione comunica allo slapd a quale livello di debugging
dovrebbe collegarsi il servizio syslog(8). Il livello descrive la
severit&agrave; del messaggio ed &egrave; una parola chiave dalla
seguente lista ordinata (dal maggiore al minore): emerg, alert, crit,
err, warning, notice, info e debug. Es: slapd -f myslapd.conf -s debug
</para>

<screen>-l syslog-local-user </screen>

<para>Selezionare l'utente locale per il servizio syslog(8). I valori
possono essere LOCAL0, LOCAL1 e cos&igrave; via, fino a LOCAL7. Il
default &egrave; LOCAL4. Tuttavia, questa opzione &egrave; consentita
soltanto su sistemi che supportano gli utenti locali con il servizio
syslog(8). </para>

<para>Ora dare un'occhiata ai log generati (/usr/adm/ldaplog
nell'esempio). Possono aiutare immensamente nel risolvere problemi con
domande, aggiornamenti, binding, ecc. </para></section>

</chapter>

<chapter id="References"><title>Riferimenti</title>

<para>In questa sezione si trova la documentazione supplementare su LDAP: URL utili, libri tosti e definizione di RFC. </para>
<section id="Urls">
<title>URL</title>

<para>Qui ci sono URL contenenti informazioni molto utili su LDAP.
Questo HOWTO &egrave; stato scritto utilizzando questi URL, quindi se dopo aver
letto questo documento si ha bisogno di informazioni pi&ugrave;
specifiche, probabilmente saranno qui: </para>

<para><itemizedlist>

<listitem><para>University of Michigan LDAP Page: 
<ulink url="http://www.umich.edu/~dirsvcs/ldap/">http://www.umich.edu/~dirsvcs/ldap/</ulink></para></listitem>

<listitem><para>University of Michigan LDAP Documentation Page: 
<ulink url="http://www.umich.edu/~dirsvcs/ldap/doc/">http://www.umich.edu/~dirsvcs/ldap/doc/</ulink></para></listitem>

<listitem><para>OpenLDAP Administrator's Guide (brother document): 
<ulink url="http://www.openldap.org/doc/admin">http://www.openldap.org/doc/admin</ulink></para></listitem>

<listitem><para>Linux Directory Service:
<ulink url="http://www.rage.net/ldap/">http://www.rage.net/ldap/</ulink></para></listitem>

<listitem><para>Red Hat and LDAP:
<ulink url="http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/ref-guide/ch-ldap.html">http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/ref-guide/ch-ldap.html</ulink></para></listitem>

<listitem><para>Mandrake Linux - Using OpenLDAP for Authentication:
<ulink url="http://www.mandrakesecure.net/en/docs/ldap-auth.php">http://www.mandrakesecure.net/en/docs/ldap-auth.php</ulink></para></listitem>
<listitem><para>Integrating OpenLDAP with other Open Source projects:
<ulink url="ftp://kalamazoolinux.org/pub/pdf/ldapv3.pdf">ftp://kalamazoolinux.org/pub/pdf/ldapv3.pdf</ulink></para></listitem>
</itemizedlist></para></section>


<section id="Books">
<title>Libri</title>

<para>Questi sono i libri pi&ugrave; popolari e pi&ugrave; utili su LDAP:</para>

<itemizedlist>
<listitem><para>Implementing LDAP di Mark Wilcox</para></listitem>
<listitem><para>LDAP: Programming Directory-Enabled Applications with Lightweight
Directory Access Protocol di Howes e Smith</para></listitem>
<listitem><para>Understanding and Deploying LDAP Directory Servers di Howes, Smith,
e Good</para></listitem>
</itemizedlist></section>

<section id="RFCs">
<title>RFC</title>
<para>Gli <ulink url="http://www.rfc-editor.org/rfc/">RFC</ulink> che
suportano gli sforzi di sviluppo di LDAP:</para>


<itemizedlist>
<listitem><para>RFC 1558: Una rappresentazione della stringa dei filtri di ricerca di LDAP</para></listitem>
<listitem><para>RFC 1777: Directory Access Protocol Leggero</para></listitem>
<listitem><para>RFC 1778: La rappresentazione della stringa delle sintassi standard di attributo </para></listitem>
<listitem><para>RFC 1779: Una rappresentazione della stringa dei D N</para></listitem>
<listitem><para>RFC 1781: Uso della directory OSI per realizzare chiamate user friendly</para></listitem>

<listitem><para>RFC 1798: LDAP Connectionless </para></listitem>
<listitem><para>RFC 1823: L&rsquo;Interfaccia Di Programmazione e Di Applicazione di LDAP</para></listitem>
<listitem><para>RFC 1959: formato del URL di LDAP </para></listitem>
<listitem><para>RFC 1960: Una rappresentazione della stringa dei filtri di ricerca di LDAP </para></listitem>
<listitem><para>RFC 2251: Directory Access Protocol Leggero (v3) </para></listitem>
<listitem><para>RFC 2307: LDAP come servizio d&rsquo;informazione della rete</para></listitem>
</itemizedlist></section>

</chapter></book>










