我有一个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
此规则不会影响任何内容。 那么有人有想法解决我的问题吗?
或者是不可能像我一样对成员进行分组?
再次感谢
答案 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