You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenLDAP主服务器端配置ACL限制同步至消费端的记录属性

OpenLDAP主服务器端配置ACL限制同步至消费端的记录属性

我来帮你搞定这个问题!你思路是对的,确实可以在主节点(provider)通过ACL来限制同步账号能读取的属性,从源头把敏感字段拦下来,比在消费端过滤更稳妥,完全符合你隐私合规的需求。

先给你理清楚核心逻辑:syncrepl是消费端主动拉取,但它得用专门的同步账号(比如你说的cn=replicator,dc=my,dc=company,dc=com)来访问主节点数据。我们只要给这个账号设置ACL,让它看不到特定字段,消费端自然同步不到这些内容。

具体配置步骤

  1. 编写针对性的ACL规则
    针对你的MDB数据库(olcDatabase={0}mdb),调整ACL规则,重点是给同步账号设置read attrs=!gecos(意思是允许读取除了gecos之外的所有属性)。完整的ACL条目可以这么写:

    olcAccess: {0}to * by dn.exact="cn=replicator,dc=my,dc=company,dc=com" read attrs=!gecos by * break
    

    如果要排除多个字段,比如还要排除电话号码,就改成attrs=!gecos,!telephoneNumber就行,用逗号分隔多个属性。

  2. 应用ACL配置
    我们用ldapmodify命令来修改配置,先写一个LDIF文件(比如叫acl_modify.ldif):

    dn: olcDatabase={0}mdb,cn=config
    changetype: modify
    replace: olcAccess
    olcAccess: {0}to * by dn.exact="cn=replicator,dc=my,dc=company,dc=com" read attrs=!gecos by * break
    olcAccess: {1}to * by dn.exact="cn=admin,dc=my,dc=company,dc=com" write by * read
    

    👉 注意:第二个ACL条目是示例,你要替换成自己原有管理员权限的规则,别把原有正常权限覆盖了!

    然后执行命令加载这个LDIF:

    ldapmodify -Y EXTERNAL -H ldapi:/// -f acl_modify.ldif
    

    这个命令是用本地root权限通过LDAPI接口修改配置,不需要输入密码(前提是你有服务器的root权限)。

  3. 验证ACL是否生效
    用同步账号测试能不能读取gecos字段:

    ldapsearch -x -D "cn=replicator,dc=my,dc=company,dc=com" -W -b "dc=my,dc=company,dc=com" "(objectClass=inetOrgPerson)" gecos
    

    输入同步账号的密码后,如果返回结果里没有gecos字段,或者提示权限不足,说明ACL已经生效了,消费端同步的时候自然拿不到这个字段。

几个关键注意事项

  • ACL顺序很重要:OpenLDAP的ACL是从上到下匹配的,匹配到第一条符合规则的就会停止,所以一定要把针对同步账号的规则放在最前面(也就是{0}这个位置)。
  • 不要破坏原有权限:修改ACL的时候,一定要保留管理员的读写权限以及其他正常业务的权限,别把整个数据库的权限搞乱了。
  • 最小权限原则:同步账号只需要read权限就够了,千万别给write或者更高权限,降低安全风险。

备注:内容来源于stack exchange,提问作者Dave Spear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 07:44:41