我正在尝试将openldap用作中央身份验证系统,并根据用户类型存储一些数据。
我的ldap DIT结构如下
domain
Superuser Users data
User1 user2 user3 Entry1 Entry2
对于每个用户条目,我都修复了auth字符串,例子 -
for user1
authstring=Entry1-RW #allowing entry1 to be readable and writable
authstring=Entry2.R #allowing entry2 to be readable
,类似于user2
authstring=*.RW #allowing all entries to be readable and writable
如何在不对所有情况进行硬编码的情况下定义我的slapd.conf以实现此功能? 通常我们只能用dn定义访问控制 我可以使用attrs限制访问控制定义吗?
像
access to dn.regex=uid=[^,]ou=data,dc=my-domain,dc=com
by dn="uid=.*,ou=users,dc=my-domain,dc=com" filter=authstring=$1.RW
答案 0 :(得分:0)
我可以执行以下操作:( uid是数据输入的属性,也可以是cn)
access to dn.regex="uid=[^,]+,ou=data,dc=my-domain,dc=com"
by set.expand="this/uid & user/authstring" write
但问题仍然是我必须为每个dataEntry和每种类型的权限编写单独的attr 例: 对于user1:
authstringread:Entry1
authstringreadwrite:Entry2
,访问控制设置为
access to dn.regex=uid=[^,],ou=data,dc=my-domain,dc=com
by set.expand="this/uid & user/authstringreadwrite" write
by set.expand="this/uid & user/authstringread" read
答案 1 :(得分:-3)
您当然可以使用attrs限制ACL方法:
aci: (targetattr=*)(targetfilter="(entryCategory=Entry1)")(version 3.0; acl "read-write"; allow (read, write)userdn ="ldap:///uid=user1,dc=example,dc=com";)
aci: (targetattr=*)(targetfilter="(entryCategory=Entry2)")(version 3.0; acl "read"; allow (read)userdn ="ldap:///uid=user1,dc=example,dc=com";)
aci: (targetattr=*)(targetfilter="(|(entryCategory=Entry1)(entryCategory=Entry2)")(version 3.0; acl "read-write"; allow (write)userdn ="ldap:///uid=user2, dc=example,dc=com";)
同样,您可以允许任何人拥有特定的读取或写入权限。
aci: (version 3.0; acl "anonymous-read-search";allow (read, write) userdn = "ldap:///anyone";)
或
userdn = "ldap:///uid=b*,c=example.com ||ldap:///cn=b*,dc=example,dc=com";
查看此链接以获取更多信息:
希望这有帮助。
谢谢,约翰