Configurazione e avvio di slapd

Il demone slapd 

slapd è il demone che gestisce le richieste dei client del servizio.Spesso è in esecuzione su più macchine della rete per aumentare la disponibilità del servizio con una copia di parte o tutta la struttura dell’albero di directory.

 

Sessione LDAP

Generalmente in ambienti distribuiti con directory estese troviamo molteplici istanze di slapd dette slave che fanno riferimento, per mantenere coerente il database delle entry, a un'altra istanza detta master. L'istanza master si occupa di scrivere in un file di log le informazioni che il demone slurpd passerà alle istanze slave di slapd.  

Interazione tra slapd slave-master e slurpd

Struttura di slapd.conf

La configurazione del demone slapd avviene mediante il file slapd.conf collocato solitamente nella directory  /usr/local/etc/openldap. Il file slapd.conf  consiste di tre sezioni per la configurazione: global, backend specific e database specific.Le informazioni della sezione global ; sono le prime ad essere specificate all'interno del file, successivamente sono definite le direttive della sezione di backend ed infine quelle di database.Le direttive globali possono essere sovrascritte da quelle di backend e/o di database , e le direttive di backend possono essere annullate dalle direttive di database.

Esempio:

Impostata una proprietà sia nella sezione “Global” che in quella “Database specific”, quella usata da slapd sarà quella impostata nella sezione “Database specific”.

Le righe di commento iniziano con il simbolo #.La struttura di slapd.conf è simile alla seguente:

	# Direttive di configurazione globali
        <global config directives>
        # Definizioni di backend
        backend <typeA>
        <backend-specific directives>
        # Definizione di direttive di database e tipo
        database <typeA>
        <database-specific directives>
        # Seconda definizione di direttive di database
        database <typeB>
        <database-specific directives>
        # Successive direttive di backend, database e di configurazione
        ...

Direttive di configurazione

 

Direttive globali

Le direttive globali sono applicate per la configurazione del servizio da parte del server slapd.

Direttive di backend

Queste direttive si applicano solo alla sezione di backend per la quale sono definite e specificano la configurazione di moduli a supporto di slapd per la gestione del servizio.

          Questa direttiva marca l'inizio di un sezione di backend di uno dei tipi definiti nella tabella sottostante.

Tabella per le estensioni di backend
Tipo Descrizione
bdb Berkeley DB transactional backend
dnssrv DNS SRV backend
ldap Lightweight Directory Access Protocol (Proxy) backend
ldbm Lightweight DBM backend
meta Meta Directory backend
monitor Monitor backend
passwd Provides read-only access to passwd(5)
perl Perl Programmable backend
shell Shell (extern program) backend
sql SQL Programmable backend

Esempio:

        backend bdb
	
	Indica l'inizio di una nuova definizione di backend per  il  Berkeley DB.

 

Direttive generali di database

Le direttive presenti nella sezione database sono applicate per  la configurazione e la gestione del database delle entry.

          Esempio:

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

 

Direttive di database specifiche
Direttive di questo tipo sono applicate solo al tipo di database che le supporta.
 

Access list

L'accesso alle entry e agli attributi nel file slapd.conf è controllato da direttive di accesso dette Access List.La forma generale di queste direttive è la seguente:

    <access directive> ::= access to <what>
        [by <who> <access> <control>]+
    <what> ::= * |
        [dn[.<basic-style>]=<regex> | dn.<scope-style>=<DN>]
        [filter=<ldapfilter>] [attrs=<attrlist>]
    <basic-style> ::= regex | exact
    <scope-style> ::= base | one | subtree | children
    <attrlist> ::= <attr> | <attr> ,  <attrlist>
    <attr> ::= <attrname> | entry | children
    <who> ::= * | [anonymous | users | self
     | dn[.<basic-style>]=<regex> | dn.<scope-style>=<DN>]
        [dnattr=<attrname>]
        [group[/<objectclass>[/<attrname>][.<basic-style>]]=<regex>]
        [peername[.<basic-style>]=<regex>]
        [sockname[.<basic-style>]=<regex>]
        [domain[.<basic-style>]=<regex>]
        [sockurl[.<basic-style>]=<regex>]
        [set=<setspec>]
        [aci=<attrname>]
    <access> ::= [self]{<level>|<priv>}
    <level> ::= none | auth | compare | search | read | write
    <priv> ::= {=|+|-}{w|r|s|c|x}+
    <control> ::= [stop | continue | break]

dove la clausola <what> specifica quali oggetti e/o attributi sono contenuti nella access list, il parametro <who> specifica a chi è garantito l'accesso e la parte <access> specifica quale livello di accesso è stato applicato.

Entità per l'accesso
Identificatore Entità
* Tutti gli utenti, sia anonimi che autenticati
anonymous Utenti anonimi
users Utenti autenticati
self Utenti associati aal'entità di destinazione
dn[.<basic-style>]=<regex> Utente associato ad un'espressione regolare
dn.<scope-style>=<DN> Utente associato allo scope di un DN

 

Livelli d'accesso
Livello Privilegi Descrizione
none   Nessun accesso
auth =x Autorizzato
compare =cx Autorizzato al confronto
search =scx Autorizzato ad eseguire ricerche
read =rscx Autorizzato alla lettura
write =wrscx Autorizzato a scrivere

 

Esempio (1)

access to attr=userPassword 
by self write 
by anonymous auth 
by dn.base="cn=Admin, dc=example, dc=com" write
by * none 

Specifica che l’amministratore può modificare l’attributo userPassword di qualsiasi entry, che ogni entry può modificare il suo attributo userPassword e che tutti gli altri non hanno permesso di lettura e di scrittura.

Esempio (2)


access to * 
by dn.base="cn=Admin, dc=example, dc=com" 
write 
by * read 

Specifica che l’amministratore ha permesso di scrittura su qualsiasi oggetto e tutti hanno permesso di lettura su tutti gli oggetti.

 

Esempio di file di configurazione per slapd

Il seguente è un file di configurazione d'esempio di uso generale che definisce 2 istanze di database BDB che manipolano rami differenti di un albero X.500.Ciascuna linea è stata numerata tramite il comando cat per favorire la leggibilità.

 

1.     # (Commento)Sezione di configurazione globale
2.     include /usr/local/etc/schema/core.schema
3.     referral ldap://root.openldap.org
4.     access to * by * read
5.     # Definizioni BDB per per il dominio 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.   # Direttive per la replica
12.   replogfile /usr/local/var/openldap/slapd.replog
13.    replica host=slave1.example.com:389
14.    binddn="cn=Replicator, dc=example, dc=com"
15.    bindmethod=simple credentials=secret
16.    replica host=slave2.example.com
17.    binddn="cn=Replicator, dc=example, dc=com"
18.    bindmethod=simple credentials=secret
19.    # Definizione di attributi indicizzati
20.    index uid pres, eq
21.    index cn, sn, uid pres, eq, approx, sub
22.    index objectClass eq
23.    # Definizione Access List
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
33.    # Definizioni BDB per per il dominio 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

 

Avvio e terminazione di slapd

slapd è stato progettato per essere eseguito come server stand-alone.I comandi per avviare slapd variano a seconda del tipo di installazione che è stata fatta, se da file RPM oppure da sorgenti.


Per installazioni da RPM digitare da riga di comando:
    #/etc/init.d/slapd start
Per installazioni da sorgenti:
    #/usr/local/etc/libexec/slapd start
Anche la terminazione varia a seconda del tipo di installazione che è stata fatta. 
Per installazioni da RPM:
    #/etc/init.d/slapd stop
Per installazioni da sorgenti:
    #kill –INT ‘cat /usr/local/var/slapd.log’

Per quanto riguarda la procedura di avvio è possibile specificare opzioni della riga di comando.Le più utili sono:


Gestione del database

OpenLDAP mette a disposizione una serie di programmi di utilità per la gestione del database di slapd:

Tutte le utility sono basate sulla gstione di file in formato testo LDIF.Inoltre è possibile usare dei tool grafici che si interfacciano a questi programmi e che permettono di svolgere ulteriori operazioni sulla configurazione di tutto il pacchetto OpenLDAP, i più famosi sono:

 

Formato LDIF

LDIF è l’acronimo di LDAP Data Interchange Format.Questo formato è usato da OpenLDAP per rappresentare le entry del servizio di directory in formato testuale e per la gestione degli schemi.LDIF inoltre è lo standard adottato per descrivere gli oggetti presenti all'interno di directory  X.500. Una entry in LDIF avrà una forma del tipo:

#commento
Dn:<distinguished nname>
<attrdesc>:<attrvalue>
<attrdesc>:<attrvalue>


dove attrdesc può essere un tipo di attributo come dn o una objestClass e attrvalue rappresenta il valore dell'attributo.