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 regular
Que 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.