3.7. Esempi di Access Control

La funzione di access control fornita dalla direttiva access è abbastanza potente. Questa sezione mostra alcuni esempi di utilizzo. In primo luogo, alcuni esempi semplici:

access to * by * read 

Questa direttiva di accesso garantisce accesso in lettura a tutti.

Il seguente esempio mostra l'uso di una espressione regolare per selezionare le voci per DN in due direttive di accesso dove l'ordinamento è importante.

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

L'accesso in lettura è assegnato alle voci sotto il sottoalbero c=US, tranne quelle voci sotto il sottoalbero ""o=U of M, c=US", a cui è garantito l'accesso in ricerca. Nessun accesso è assegnato ai c=US, perché 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é tutti i campi U-m sono anche campi c=US.

Un altro modo di implementare lo stesso controllo di accesso è:

access to dn.children="dc=example,dc=com"
by * search
access to dn.children="dc=com"
by * read

L'accesso in lettura è consentito alle voci nel sottoalbero dc=com, tranne per quelle voci nel sottoalbero dc=example,dc=com, a cui è consentito accesso in ricerca. Non è consentito l'accesso a dc=com, poiché 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é tutte le voci sotto; dc=example,dc=com sono anche voci dc=com.

Nota: notare anche che se nessuna direttiva di accesso o nessuna clausola "by <who>" corrisponde, l'accesso è negato. Questo significa che ogni direttiva access to termina con una clausola implicita by * none , e ciascun elenco di accesso termina con una direttiva implicita access to * by * none.

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

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

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 è sempre fatta anonimamente). L'attributo homePhone è scrivibile dalla voce, ricercabile dai campi sotto example.com, leggibile dai client che si connettono dalla rete 10, e non è altrimenti leggibile (implicito by * none). Tutti gli altri accessi sono negati dall'implicito access to * by * none.

A volte è 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ò tramite un'istruzione di accesso come questa:

access to attr=member,entry 
        by dnattr=member selfwrite 

Il selettore dnattr <who> 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 è necessaria poiché l'accesso alla voce è necessario per accedere a qualunque attributo dell'oggetto.

C'è abbondanza di informazioni sui controllo di accesso sulla Guida dell'Amministratore OpenLDAP. Consultare: Access Control per maggiori informazioni su questo argomento.