OpenLDAP:使用 sockname 和 DN 的 ACL?

OpenLDAP:使用 sockname 和 DN 的 ACL?

在 OpenLDAP(2.4.45,在 FreeBSD 上)中,我尝试通过仅当通过套接字建立连接时才授予 DN 访问权限来限制 DN 对属性的访问;但没有成功。

我正在尝试的是

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

(这个想法是pwresetDN 可以被自动密码重置脚本使用,但是只有当脚本在与 LDAP 服务器相同的机器上运行时,该 DN 才具有该访问权限)。

by短语似乎与第 8.3 节中的生成式相匹配OpenLDAP 访问控制文档,以及 slapd.access(5) 中的注释,字段中的项目<who>“可以组合指定”。确实没有生成语法警告。我假设组合意味着而不是或者– 文档中没有明确说明这一点。我在 OpenLDAP 文档或网络上都找不到涉及此问题的示例。

当元素不存在时,此节有效sockname,表明配置如我预期的那样有效。

当我尝试userPassword使用此 DN 写入属性时,出现ldap_modify: Insufficient access (50)错误。

OpenLDAP 文档没有(有点令人惊讶地)明确说明此元素的作用sockname,而 slapd.access(5) 页面则相当隐晦地说明了:

语句peername=<peername>sockname=<sockname>domain=<domain>sockurl=<sockurl>表示将联系主机 IP(对于IP=<ip>:<port>IPv4 为 ,IP=[<ipv6>]:<port>对于 IPv6 为 )或联系主机命名管道文件名(PATH=<path>如果通过命名管道连接则为 )与 peername 、命名管道文件名与 sockname 、联系主机名与 domain 、联系 URL 与 sockurl 进行比较pattern以确定访问权限。

这实际上并没有说明什么。

我是否完全误解了这个访问规范的要点,或者还有其他方法可以做到这一点?

答案1

正确的语法(至少对于此版本的 OpenLDAP)是:

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

感谢 Quanah Gibson-Mountopenldap 技术列表指出解决方案。

相关内容