Configurazione e avvio di 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
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 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.
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>]
Esempio:
updateref ldap://master.example.net
Direttive di database specifiche
Direttive di questo tipo sono applicate solo al tipo di database che le supporta.
directory <directory> Questa direttiva specifica la directory si trovano i file BDB che contengono il database e gli indici associati.
cachesize <integer> Specifica la dimensione della cache dell’istanza del database di backend LDBM in numero di entry.
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.
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 |
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
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:
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:
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.