OpenLDAP - o usuário não pode fazer login após a alteração das regras da ACL

OpenLDAP - o usuário não pode fazer login após a alteração das regras da ACL

Estou brincando com servidores OpenLDAP com replicação e preciso definir ACLs apropriadas para permitir que o usuário de replicação leia tudo no host de origem.

Depois de lerEste artigocriou este conjunto de regras:

olcAccess: {0}to * by dn.base="cn=admin,dc=example,dc=com" manage
olcAccess: {1}to * by dn.base="uid=rpuser,dc=example,dc=com" read
olcAccess: {2}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {3}to attrs=shadowLastChange by self write by * read
olcAccess: {4}to * by users read

O que eu queria alcançar era:

  1. O administrador pode fazer tudo, sem limites
  2. O usuário de replicação pode ler tudo
  3. Os usuários podem alterar suas senhas
  4. Qualquer acesso ao diretório é possível apenas para usuários logados, sem acesso anônimo.

Depois de definir as ACLs acima para o servidor, o usuário de replicação não consegue fazer login. Não entendo por que isso acontece, o DN do usuário de replicação está correto e, pelo que sei, deve corresponder...

Logs do servidor após tentativa de login:

slapd[3475]: => access_allowed: result not in cache (userPassword)
slapd[3475]: => access_allowed: auth access to "uid=rpuser,dc=example,dc=com" "userPassword" requested
slapd[3475]: => acl_get: [1] attr userPassword
slapd[3475]: => acl_mask: access to entry "uid=rpuser,dc=example,dc=com", attr "userPassword" requested
slapd[3475]: => acl_mask: to value by "", (=0)
slapd[3475]: <= check a_dn_pat: cn=admin,dc=example,dc=com
slapd[3475]: <= acl_mask: no more <who> clauses, returning =0 (stop)
slapd[3475]: => slap_access_allowed: auth access denied by =0
slapd[3475]: => access_allowed: no more rules

Se bem entendi, apenas a primeira ACL é verificada?

Responder1

Essas ACLs não foram testadas, mas devem funcionar:

olcAccess: {0}to * by dn.base="cn=admin,dc=example,dc=com" manage by * break
olcAccess: {1}to * by dn.base="uid=rpuser,dc=example,dc=com" read by * break
olcAccess: {2}to attrs=userPassword by self write by anonymous auth by * none
olcAccess: {3}to attrs=shadowLastChange by self write by * read
olcAccess: {4}to * by users read

Você precisará by * breakdas duas primeiras regras, portanto, se não houver correspondência na bycláusula específica, a próxima regra será verificada. Você não precisa by * breakdo attrs=userPasswordou attrs=shadowLastChange- não deve haver substituto para to * by users read.

informação relacionada