
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 pwreset
DN 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 by
frase 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 sockname
elemento está ausente, lo que sugiere que, por lo demás, la configuración funciona como espero.
Cuando intento escribir el userPassword
atributo 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 sockname
es 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>
ysockurl=<sockurl>
significan que la IP del host de contacto (en el formatoIP=<ip>:<port>
para IPv4 oIP=[<ipv6>]:<port>
para IPv6) o el nombre del archivo de canalización con nombre del host de contacto (en el formatoPATH=<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 comparanpattern
para 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.