25.3. Configurazione del server con slapd.conf

Il sistema installato contiene un file di configurazione completo per il server LDAP nel percorso /etc/openldap/slapd.conf. Questo file descrive brevemente le singole voci e le necessarie modifiche. Le voci precedute da cancelletto (#) sono inattive. Per l'attivazione è necessario rimuovere questo carattere di commento.

25.3.1. Direttive globali in slapd.conf

Esempio 25.2. slapd.conf: Direttiva di inclusione per schemi

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/rfc2307bis.schema
include         /etc/openldap/schema/yast.schema

La prima direttiva del file slapd.conf, mostrata nell'Esempio 25.2, "slapd.conf: Direttiva di inclusione per schemi", specifica lo schema in base al quale è organizzata la directory LDAP. La voce core.schema è obbligatoria. A questa direttiva sono aggiunti ulteriori schemi obbligatori. Per informazioni in merito, consultare la documentazione OpenLDAP allegata.

Esempio 25.3. slapd.conf: pidfile e argsfile

pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args

Questi due file contengono il PID (ID processo) e alcuni degli argomenti con cui viene avviato il processo slapd. Non sono necessarie modifiche.

Esempio 25.4. slapd.conf: Controllo dell’accesso

# Sample Access Control
#       Allow read access of root DSE
# Allow self write access
#       Allow authenticated users read access
#       Allow anonymous users to authenticate
# access to dn="" by * read
  access to * by self write
              by users read
              by anonymous auth
#
# if no access controls are present, the default is:
#       Allow read by all
#
# rootdn can always write!

L'Esempio 25.4, "slapd.conf: Controllo dell’accesso" è un estratto di slapd.conf che regola le autorizzazioni di accesso per la directory LDAP sul server. Le impostazioni specificate qui nella sezione globale di slapd.conf sono valide finché non vengono dichiarate regole di accesso personalizzate nella sezione specifica del database. Tali regole sovrascriveranno le dichiarazioni globali. Nell'esempio, tutti gli utenti dispongono di accesso in lettura alla directory, ma solo l'amministratore (rootdn) può eseguire operazioni di scrittura. La regolamentazione del controllo dell'accesso in LDAP è un processo altamente complesso. Può essere di aiuto quanto segue:

  • Ogni regola di accesso presenta la seguente struttura:

    accesso a <cosa> da <chi> <accesso>
  • cosa è il segnaposto dell'oggetto o attributo cui è consentito accedere. Le singole diramazioni della directory possono essere esplicitamente protette con regole distinte. È anche possibile elaborare aree dell'albero della directory con una regola utilizzando espressioni regolari. slapd valuta tutte le regole nell'ordine in cui sono elencate nel file di configurazione. Le regole più generiche devono essere elencate dopo quelle più specifiche; la prima regola che slapd considera valida viene valutata e tutte le voci successive ignorate.

  • chi definisce a chi consentire l'accesso alle aree specificate con cosa. È possibile utilizzare espressioni regolari. Ancora una volta, slapd interromperà la valutazione di chi dopo la prima corrispondenza, pertanto le regole più specifiche dovranno essere specificate prima di quelle più generiche. Sono possibili le voci mostrate nella Tabella 25.2, "Gruppi di utenti e autorizzazioni di accesso".

    Tabella 25.2. Gruppi di utenti e autorizzazioni di accesso

    Tag

    Ambito

    *

    Tutti gli utenti senza eccezioni

    anonymous

    Utenti non autenticati ("anonimi")

    users

    Utenti autenticati

    self

    Utenti collegati all'oggetto di destinazione

    dn.regex=<regex>

    Tutti gli utenti corrispondenti all'espressione regolare

  • accesso specifica il tipo di accesso. Utilizzare le opzioni elencate nella Tabella 25.3, "Tipi di accesso".

    Tabella 25.3. Tipi di accesso

    Tag

    Ambito di accesso

    none

    Nessun accesso

    auth

    Per contattare il server

    compare

    Confronto con oggetti per accesso tramite confronto

    search

    Per l'impiego di filtri di ricerca

    read

    Accesso in lettura

    write

    Accesso in scrittura

    slapd confronta il diritto di accesso richiesto dal client con quelli concessi in slapd.conf. Il client è autorizzato ad accedere se le regole consentono un diritto uguale o superiore a quello richiesto. Se il client richiede diritti superiori a quelli dichiarati nelle regole, l'accesso verrà negato.

L'Esempio 25.5, "slapd.conf: Esempio di controllo dell'accesso" mostra un controllo dell'accesso semplice che può essere sviluppato mediante espressioni regolari.

Esempio 25.5. slapd.conf: Esempio di controllo dell'accesso

access to  dn.regex="ou=([^,]+),dc=suse,dc=de" 
by dn.regex="cn=administrator,ou=$1,dc=suse,dc=de" write  
by user read 
by * none

Questa regola dichiara che solo il relativo amministratore ha l'accesso in scrittura a una singola voce ou. Gli altri utenti autenticati hanno l'accesso in lettura; tutti gli altri non hanno accesso.

[Tip]Definizione di regole di accesso

Se non esistono regole access to (accesso a) o direttive by (da) corrispondenti, l'accesso verrà negato. Vengono concessi solo i diritti di accesso esplicitamente dichiarati. Se non vengono dichiarate regole, il principio di default è l'accesso in scrittura per l'amministratore e l'accesso in lettura per tutti gli altri utenti.

Per informazioni dettagliate e un esempio di configurazione per i diritti di accesso LDAP, consultare la documentazione in linea del pacchetto openldap2 installato.

Oltre alla possibilità di amministrare le autorizzazioni di accesso con il file di configurazione server centrale (slapd.conf), esiste l'ACI (Access Control Information). Consente di memorizzare informazioni di accesso per singoli oggetti all'interno dell'albero LDAP. Questo tipo di controllo dell'accesso non è ancora comune ed è ancora considerato sperimentale dagli sviluppatori. Per informazioni, consultare http://www.openldap.org/faq/data/cache/758.html.

25.3.2. Direttive specifiche del database in slapd.conf

Esempio 25.6. slapd.conf: Direttive specifiche del database

database bdb 
checkpoint      1024    5
cachesize       10000
suffix "dc=suse,dc=de" 
rootdn "cn=admin,dc=suse,dc=de" 
# Cleartext passwords, especially for the rootdn, should 
# be avoided.  See slappasswd(8) and slapd.conf(5) for details. 
# Use of strong authentication encouraged.
rootpw secret 
# The database directory MUST exist prior to running slapd AND 
# should only be accessible by the slapd/tools. Mode 700 recommended. 
directory /var/lib/ldap 
# Indices to maintain 
index   objectClass     eq

Questo tipo di database, un database Berkeley in questo caso, è definito nella prima riga di questa sezione (vedere l'Esempio 25.6, "slapd.conf: Direttive specifiche del database"). checkpoint determina la quantità di dati (in Kb) conservati nel registro transazioni prima di essere scritti nel database vero e proprio e il tempo (in minuti) tra due azioni di scrittura. cachesize imposta il numero di oggetti conservati nella cache del database. suffix determina la parte dell'albero LDAP di cui questo server deve essere responsabile. Il rootdn successivo determina il possessore di diritti di amministratore per questo server. Non è necessario che l'utente dichiarato qui disponga di una voce LDAP o esista come utente normale. La parola d'ordine dell'amministratore viene impostata con rootpw. Invece di utilizzare secret, è possibile immettere l'hash della parola d'ordine dell'amministratore creato da slappasswd. La direttiva directory indica la directory (nel file system) in cui sono memorizzate le directory di database sul server. L'ultima direttiva, index objectClass eq, comporta la manutenzione di un indice di tutte le classi oggetto. Gli attributi cercati più di frequente dagli utenti possono essere aggiunti qui in base alla propria esperienza. Le regole di accesso personalizzate definite qui per il database verranno utilizzate al posto delle regole di accesso globali.

25.3.3. Avvio e arresto dei server

Una volta che il server LDAP è configurato e sono state specificate tutte le voci desiderate in base al modello descritto nella Sezione 25.4, "Gestione dei dati nella directory LDAP", avviare il server LDAP come root immettendo rcldap start. Per arrestare il server manualmente, immettere il comando rcldap stop. Richiedere lo stato del server LDAP in esecuzione con rcldap status.

L'editor runlevel di YaST, descritto nella Sezione 8.2.3, "Configurazione dei servizi di sistema (runlevel) con YaST", può essere utilizzato per far sì che il server venga avviato e arrestato automaticamente all'avvio e all'arresto del sistema. È anche possibile creare i relativi collegamenti agli script di avvio e arresto con il comando insserv da un prompt dei comandi come descritto nella Sezione 8.2.2, "Script di init".