As ACL's (Access Control Lists) fornecidas pelo OpenLDAP possuem uma sintaxe simples e são muito flexiveis e poderosas na sua implementação. A idéia básica é definir Quem têm qual Nível de Acesso a O Quê?
As principais formas de "Quem" são:
Qualquer usuário conectado, incluindo conexões anônimas.
O DN do usuário atualmente conectado.
Conexões de usuários não autenticadas.
Conexões de usuários autenticadas.
expressão regularQue case com um DN ou com uma identidade SASL.
A seguir está uma tabela que resume os vários níveis de acesso. Níveis maiores possuem todas as capacidades de níveis abaixo deles.
Tabela A.1. Níveis de acesso das ACL's
| Nível de acesso | Permissão concedida |
|---|---|
write | Acesso para atualizar valores de atributos |
read | Acesso para ler resultados de buscas |
search | Acesso para aplicar filtros de busca |
compare | Acesso para comparar atributos |
auth | Acesso para autenticar. Requer que o cliente mande o nome de usuário na forma de um DN e algum tipo de credencial para provar a sua identidade |
none | Nenhum acesso |
Finalmente, "O Quê" define as entradas ou atributos aos quais a ACL deve ser aplicada. Ele é composto de três partes, todas opcionais.
Uma expressão regular definindo o DN. A sintaxe é dn.targetstyle=regex, onde targetstyle é base, one ou children, e regex é uma expressão regular representando um DN.
Um filtro LDAP que obedeça o [RFC4515 “Lightweight Directory Access Protocol (LDAP): String Representation of Search Filters ”]. A sintaxe básica para especificar um filtro é filter=filtroLDAP.
Uma lista de nomes atributos separados por vírgula, cuja forma é attrs=listaDeAtributos.
* para incluir tudo.
A seguir está um exemplo de ACL.
Exemplo A.1. Uma ACL básica
access to attrs=userPassword,sambaNTPassword,sambaLMPassword
by dn.base="cn=admin,dc=ime,dc=usp,dc=br" write
by anonymous auth
by self write
by * none
access to *
by dn.base="cn=admin,dc=ime,dc=usp,dc=br" write
by * read
Uma ACL listada antes tem precedência sobre as ACL's listadas depois. Isso significa que as ACL's mais restritas devem ser listadas antes das mais gerais para que tenham efeito.
A primeira configuração listada no exemplo garante direito de acesso aos atributos userPassword, sambaNTPassword e sambaLMPassword para escrita ao cn=admin,dc=ime,dc=usp,dc=br, para autenticação aos usuários não autenticados (anônimos), de escrita aos usuários autenticados (apenas para as suas próprias entradas), ou seja, permite que os usuários alterem a própria senha, e nenhum acesso aos outros.
A segunda configuração garante direito de acesso à todo o diretório ao cn=admin,dc=ime,dc=usp,dc=br, e para leitura para todos os outros usuários.