我有一个新的 OpenLDAP 服务器,正在设置一个新环境。我的布局大致如下:
dc=example,dc=com
ou=groups
ou=accounts
uid=surfrock66
uid=ldapbinduser
uid=surfrock67
我有一个用于修改 olcAccess 的 ldif 文件,并且语法检查并安装正确,但我无法再对任何用户进行身份验证。
以下是我希望实现的目标:
- 我的用户现在就像一个域管理员,可以管理一切
- ldapbinduser 帐户将用于绑定,这意味着它需要验证并读取用户和组(基本上是整个目录)
- 任何用户都应该能够读取自己的属性、进行身份验证并更改自己的密码
- 其余一切都被否定。
我确信我的权限顺序不正确,但我无法理解它:
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to dn.subtree="dc=example,dc=com"
by dn.one="uid=surfrock66,ou=accounts,dc=example,dc=com" manage
by dn.one="uid=ldapbinduser,ou=accounts,dc=example,dc=com" read
-
add: olcAccess
olcAccess: {1}to dn.children="ou=accounts,dc=example,dc=com" attrs=userPassword
by self =xw
by anonymous auth
by * none
-
add: olcAccess
olcAccess: {2}to dn.children="ou=accounts,dc=example,dc=com"
by self read
by * none
我已经读过几次了,但还是有点难以理解:https://www.openldap.org/doc/admin24/access-control.html 我也查阅了很多例子。我唯一的其他想法(我将尝试)是先放规则“1”,然后是规则 0,然后是规则 2?不过,在我开始配置之前,如果有人能更了解这一点,我会很高兴能解释一下我错在哪里。
答案1
这篇文章对我帮助很大:
https://medium.com/@moep/keeping-your-sanity-while-designing-openldap-acls-9132068ed55c
解决方案是这样的:
dn: olcDatabase={1}mdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to *
by dn="cn=admin,dc=example,dc=com" manage
by dn="cn=surfrock66,ou=accounts,dc=example,dc=com" manage
by dn="cn=ldapbinduser,ou=accounts,dc=example,dc=com" read
by * break
-
add: olcAccess
olcAccess: {1}to dn.children="ou=accounts,dc=example,dc=com" attrs=userPassword,shadowExpire,shadowInactive,shadowLastChange,shadowMax,shadowMin,shadowWarning
by self write
by anonymous auth
-
add: olcAccess
olcAccess: {2}to dn.subtree="dc=example,dc=com"
by self read