Configuração avançada de ACL do OpenLDAP

3

Eu tenho vários DITs no meu servidor OpenLDAP. Eu fiz o usuário cn = config a raiz para que cn = config tenha acesso root a todos os DITs (cada DIT). Além disso, há um administrador por DIT identificado como cn = admin, $ suffix [por exemplo, cn = admin, dc = exemplo, dc = com ou o que quer que seja].

Eu adicionei um atributo NAME personalizado aos objetos de administrador e usuário. O atributo é denominado: 'serviceLevel' e os valores são 'suspensos' ou 'normais'. O atributo é opcional e, quando não está presente, é interpretado como normal - não suspenso.

Atualmente, quando serviceLevel é definido como 'suspenso', minha ACL suspende usuários regulares e não suspende os administradores locais / DIT. Preciso que os administradores não consigam autenticar, como usuários comuns.

A amostra de ACLs atuais de configuração LDIF está abaixo:

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
  filter=(serviceLevel=suspended)
  by dn="cn=config" write
  by * none
olcAccess: {1}to attrs=userPassword,shadowLastChange
  filter=(!(serviceLevel=suspended))
  by self write
  by anonymous auth
  by dn="cn=admin,dc=directory,dc=com" write
  by dn="cn=config" write
  by * none
olcAccess: {2}to dn.base="" by * read
olcAccess: {3}to *
  filter=(serviceLevel=suspended)
  by dn="cn=config" write
  by * none
olcAccess: {4}to *
  filter=(!(serviceLevel=suspended))
  by self write
  by dn="cn=admin,dc=directory,dc=com" write
  by dn="cn=config" write
  by * read

Por favor, informe se você tem uma idéia do porquê de administradores de domínio passarem pela minha ACL. Eu aparentemente não entendo como definir corretamente essas regras.

    
por Moshe Shmukler 15.04.2015 / 10:53

1 resposta

2

Acredito que você esteja adotando uma abordagem mais complicada do que o necessário. Para desativar um DIT, desative seu banco de dados correspondente. Isso pode ser feito definindo olcHidden: TRUE .

olcHidden: TRUE | FALSE
Controls whether the database will be used to answer queries. A database that is hidden will never be selected to answer any queries, and any suffix configured on the database will be ignored in checks for conflicts with other databases. By default, olcHidden is FALSE.

ldapmodify <<EOF
dn: olcDatabase={2}hdb,cn=config
replace: olcHidden
olcHidden: TRUE
EOF

Nota adicional:

Regardless of what access control policy is defined, the rootdn is always allowed full rights (i.e. auth, search, compare, read and write) on everything and anything.

As a consequence, it's useless (and results in a performance penalty) to explicitly list the rootdn among the clauses. --OpenLDAP Software 2.4 Administrator's Guide

    
por 16.04.2015 / 05:59