LDAP olcAccess正则表达式未按预期工作

时间:2015-07-29 06:41:39

标签: regex spring-security permissions ldap ldif

我有一个LDAP服务器runnign与Structure:

dc=example,dc=ldap
   dc=organisations
      o=orga1 (objectClasses top/organisation/dcObject)
         cn=ADMINS (objectClasses top/groupOfNames)
         cn=USER
      o=orga2 
         cn=ADMIN
         cn=USER
      cn=users (objectClasses top/organisation/dcObject)
         cn=user1 (objectClasses top/person)
         cn=user2

现在我想添加一些规则,只有组织组中的用户才能看到该组织。

硬编码方法很容易实现:

olcAccess: {1}to dn.subtree="o=orga1,dc=organizations,dc=example,dc=ldap"
  by group.exact="cn=ADMINS,o=orga1,dc=organizations,dc=example,dc=ldap" write
  by group.exact="cn=USER,o=orga1,dc=organizations,dc=example,dc=ldap" read
  by * none

(在'by'前面写两个空格很重要[这对我来说很长一段时间是个问题])

但我不想为每个新组织实施这些规则,因此我尝试使用一些正则表达式magig来实现该规则。但我失败了:

olcAccess: {1}to dn.regex="^o(.+),dc=organizations,dc=example,dc=ldap$"
  attrs=children
  by group.exact="cn=ADMINS,o=[$1],dc=organizations,dc=example,dc=ldap$" write
  by group.exact="cn=USER,o=[$1],dc=organizations,dc=example,dc=ldap$" read
  by * none

此规则不会影响任何内容。 那么有人有想法解决我的问题吗?

或者是不可能像我一样对成员进行分组?

再次感谢

1 个答案:

答案 0 :(得分:0)

通过邮件列表,我得到了group.exact的提示,不进行正则表达式评估。

作为一个工作场所,我已经使用属性创建了自己的objectClass " orgaMember"和" orgaAdmin"现在可以基于这些属性创建olcAccess规则。要将此规则应用于所有组织,可以使用正则表达式。

olcAccess: {1}to dn.regex="^o=(.+),dc=organizations,dc=example,dc=ldap$"
 by dnattr=orgaAdmin write
 by dnattr=orgaMember read
 by * none

我希望这会对某人有所帮助。

PS。更新objectClasses需要注意很多事情。 见http://www.zytrax.com/books/ldap/ch6/slapd-config.html