OpenLDAP: el usuario no puede iniciar sesión después de que cambian las reglas de ACL

OpenLDAP: el usuario no puede iniciar sesión después de que cambian las reglas de ACL

Estoy jugando con servidores OpenLDAP con replicación y necesitaba configurar las ACL apropiadas para que el usuario de replicación pueda leer todo en el host de origen.

Despues de leerEste artículocreó este conjunto de reglas:

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

Lo que quería lograr era:

  1. El administrador puede hacer todo, sin límites
  2. El usuario de replicación puede leer todo.
  3. Los usuarios pueden cambiar sus contraseñas
  4. Cualquier acceso al directorio solo es posible para usuarios registrados, no acceso anónimo.

Después de configurar las ACL anteriores en el servidor, el usuario de replicación no puede iniciar sesión en absoluto. No entiendo por qué sucede esto, el DN del usuario de replicación es correcto y, hasta donde yo sé, debería coincidir...

Registros del servidor después del intento de inicio de sesión:

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

Si entiendo correctamente, ¿solo se verifica la primera ACL?

Respuesta1

Esas ACL no se prueban pero deberían 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

Necesitará by * breaklas dos primeras reglas, de modo que si no hay coincidencia en byuna cláusula específica, se verificará la siguiente regla. No es necesario by * breakel attrs=userPasswordo attrs=shadowLastChange; no debería haber ningún recurso alternativo to * by users read.

información relacionada