存储用户和组权限(ACL)到 LDAP

存储用户和组权限(ACL)到 LDAP

我正在尝试将 ACL 权限存储到 LDAP。我有用户和组的权限(用户属于多个组)。这是我创建的结构:

 ou=Groups
    cn=Admin [posixGroup] {memberUid=andrew, memberUid=johny}
       cn=Right {resource:ftp1, action:all}
       cn=Right {resource:ftp2, action:all}
    cn=Editor [posixGroup] {memberUid=joseph}
       cn=Right {resource:ftp1, action:list}
 ou=People
    cn=andrew {uid=andrew}
       cn=Right {resource:ftp3, action:all}
    cn=johny {uid=johny}
    cn=joseph {uid=joseph}

括号 {} 中是属性。好吧,当 andrew 连接到 ftp3 时,我想检查权限,因此我查询:

(|(memberUid=andrew)(uid=andrew))

但我只得到 cn=Rights 的父元素:cn=a​​ndrew 和 cn=Admin。是否可以使用按父元素中定义的 memberUid uid 元素进行过滤来编写查询以返回 cn=Right 元素?或者必须以某种方式更改结构。非常感谢您抽出时间。Andrew

答案1

使用您当前的模式,我相信您必须执行两组查询:

  1. 使用现有的查询来查找匹配的用户和组。
  2. 对于找到的每个条目,查询每个条目以查看其是否有Right条目,设置基本 DN到您在步骤 1 中找到的条目。

或者您可以更改结构,以便用户和组具有多值right条目,也许类似于:

cn=Admin [posixGroup] {memberUid=andrew, memberUid=johny,
                       right: ftp1/all, right: ftp2/all}
cn=Editor [posixGroup] {memberUid=joseph, right: ftp1/list}
...
cn=andrew {uid=andrew, right: ftp3/all}

您的查询将相同,但您将获得right返回集中的属性(无需进行任何进一步的查询)。或者,如果您知道进行查询时请求的服务和权限级别,您也可以将其输入:

(&((|(memberUid=andrew)(uid=andrew)))(right=ftp3/all))

如果您至少获得一个结果,那么您就知道可以授予访问权限;否则,拒绝访问。

相关内容