OpenLDAP的olcAccess是否支持用户Quorum(法定人数)机制?
OpenLDAP的olcAccess是否支持用户Quorum(法定人数)机制?
嘿,这个需求挺实用的!答案是可以实现,而且确实要用到你提到的olcAccess里的sets规则——虽然这部分文档确实零散,很多人都踩过坑,我来给你捋清楚具体怎么弄。
你的场景是:有一个高权限的敏感角色,另外两个只有低权限的用户,你希望这两个低权限用户单独都没法给别人分配这个敏感角色,必须要两人共同协作(也就是法定人数为2)才能完成操作。
OpenLDAP的sets规则允许我们组合多个身份验证/条目属性条件,通过逻辑运算符(&“与”、|“或”、!“非”)来定义更精细的权限控制。不过要注意:单个LDAP操作只能由一个用户发起绑定,所以我们没法让两个用户同时发起同一个操作,但可以通过协作式的权限规则来模拟法定人数的效果。
举个具体的配置示例(假设你的域是dc=example,dc=com):
- 敏感角色:
cn=SensitiveRole,ou=Roles,dc=example,dc=com - 低权限用户:
uid=userA,ou=Users,dc=example,dc=com和uid=userB,ou=Users,dc=example,dc=com - 目标用户:要被分配敏感角色的用户,比如
uid=targetUser,ou=Users,dc=example,dc=com
我们可以设置这样的访问控制规则:
olcAccess: to dn.subtree="ou=Users,dc=example,dc=com" attrs=memberOf by set="user/uid=userA & target/approval=uid=userB,ou=Users,dc=example,dc=com" write by set="user/uid=userB & target/approval=uid=userA,ou=Users,dc=example,dc=com" write by * none
这个规则的逻辑是:
- 当
userA发起修改目标用户memberOf属性(也就是分配敏感角色)的操作时,必须先由userB在目标用户的条目里添加一个approval属性,值为userA的完整DN - 反之,
userB要执行分配操作,也需要userA先在目标用户条目里添加对应自己DN的approval属性 - 其他用户或者不满足条件的操作都会被拒绝
这样就实现了“必须两个用户共同协作才能完成敏感角色分配”的法定人数效果,完全依赖sets规则来实现。
另外还要提醒几个注意点:
- 确保你的OpenLDAP版本是2.4及以上,因为
sets规则是从这个版本开始支持的 - 访问控制规则是按顺序匹配的,这条规则一定要放在其他更宽松的规则(比如
by * read)之前,否则会被覆盖 - 你需要先给
userA和userB配置修改目标用户approval属性的权限,不然他们没法完成前置的协作步骤
当然,如果想要更直接的“同时验证两个用户身份”的机制,OpenLDAP本身原生不支持,可能需要结合外部认证系统或者自定义扩展,但用sets模拟的协作方式已经能满足大部分场景的需求了。
备注:内容来源于stack exchange,提问作者RomanYa
相关产品推荐
相关产品推荐

