OpenLDAP: ¿ACL que usan nombre de calcetín y DN?

OpenLDAP: ¿ACL que usan nombre de calcetín y DN?

En OpenLDAP (2.4.45, en FreeBSD), estoy intentando restringir el acceso de un DN a un atributo, otorgando acceso a un DN solo cuando la conexión se realiza a través de un socket; pero sin éxito.

Lo que estoy intentando es

olcAccess: to attrs=userPassword
  by dn.base="uid=pwreset,ou=service,dc=example,dc=edu" 
     sockname.exact="/var/run/openldap/ldapi"
  write

(La idea es que el pwresetDN pueda ser utilizado por un script de restablecimiento automático de contraseña, pero que ese DN tendrá ese acceso sólo cuando el script se esté ejecutando en la misma máquina que el servidor LDAP).

Esta byfrase parece coincidir con la producción de la Sección. 8.3 dela documentación de control de acceso de OpenLDAPy la observación en slapd.access(5) de que los elementos del <who>campo 'pueden especificarse en combinación'. Y, de hecho, no se generan advertencias de sintaxis. Supongo que la combinación implica unaYen lugar de unO– esto no se hace explícito en la documentación. No puedo encontrar ejemplos que cubran esto ni en la documentación de OpenLDAP ni en la web.

Esta estrofa funciona cuando el socknameelemento está ausente, lo que sugiere que, por lo demás, la configuración funciona como espero.

Cuando intento escribir el userPasswordatributo usando este DN, aparece un ldap_modify: Insufficient access (50)error.

La documentación de OpenLDAP no establece (de manera algo sorprendente) explícitamente cuál socknamees el efecto de este elemento, y la página slapd.access(5) dice, de manera bastante indirecta, que:

Las declaraciones peername=<peername>, sockname=<sockname>, domain=<domain>y sockurl=<sockurl>significan que la IP del host de contacto (en el formato IP=<ip>:<port>para IPv4 o IP=[<ipv6>]:<port>para IPv6) o el nombre del archivo de canalización con nombre del host de contacto (en el formato PATH=<path>si se conecta a través de una canalización con nombre) para peername, el nombre del archivo de canalización con nombre para sockname, el nombre de host de contacto para el dominio y la URL de contacto para sockurl se comparan patternpara determinar el acceso.

En realidad eso no dice mucho.

¿He entendido completamente mal el objetivo de esta especificación de acceso o hay otra forma de hacerlo?

Respuesta1

La sintaxis correcta (al menos para esta versión de OpenLDAP) es:

olcAccess: to attrs=userPassword
  by dn.base="uid=pwreset,ou=service,dc=example,dc=edu"
     sockname.exact="PATH=/var/run/openldap/ldapi"
     write

Gracias a Quanah Gibson-Mount enla lista técnica de openldappor señalar la solución.

información relacionada