因此,我尝试将一些 ACI 添加到我的 OpenLDAP 系统(托管在 CentOS 6 上)。我读过其他人如何将他们的 ACI 放入 bdb,如下所示...
olcAccess:通过 dn="cn=manager,dc=bromosapien,dc=net" 向 attrs=userPassword,shadowLastChange 写入,通过匿名身份验证通过自我写入,通过 * none olcAccess: 通过 * 读取到 dn.base="" olcAccess: 由 dn="cn=manager,dc=bromosapien,dc=net" 写入 * 由 * 读取
但是,我想避免这种情况,只允许从容器中更改密码(至少避免使用目录管理器)。我读到有人这样做,从他们的角度来看是可行的:
dn:ou=People,dc=bromosapien,dc=net 变更类型:修改 添加:aci aci:(targetattr =“用户密码||电话号码”)(版本3.0;acl“允许自我输入修改”;允许(写入)(userdn =“ldap:///self”);)
问题是,尝试添加它时,我得到了这个。
# ldapadd -xWD “cn=manager,dc=bromosapien,dc=net” -f aci-password.ldif 输入 LDAP 密码: 修改条目“ou=People,dc=bromosapien,dc=net” ldap_modify:未定义属性类型(17) 附加信息:aci:属性类型未定义
我一定是做错了什么事情,或者提到了错误的对象类等等。问题是,我真的应该在 bdb.ldif 中做所有事情吗,或者是否可以通过这种方式添加 ACI,无论在这种情况下“推荐”什么方法,有什么更好的方法来提供我需要的 ACI,以允许用户更改他们自己的密码(无需目录管理员)?
编辑:我还注意到 olcAccess 行,ldapsearch 没有显示匿名搜索的 userPassword 行。
答案1
我发现最好还是用 bdb.ldif 的方式。我做的和上面的类似,但我做了一些改动。
olcAccess: {0}to attrs=userPassword,shadowLastChange,loginShell by dn="cn=manager,dc=bromosapien,dc=net" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=manager,dc=bromosapien,dc=net" write by group.exact="cn=LDAPADMIN,ou=Group,dc=bromosapien,dc=net" write by * read
我所做的是,用括号和数字标记每一行。我还添加了用户更改其登录 shell 的功能(因为我允许使用 Bash、ksh 和 zsh,所以我们默认使用 bash)。然后我在 Group OU 内创建了一个 groupOfNames 容器。就像这样。
dn: cn=LDAPADMIN,ou=Group,dc=bromosapien,dc=net
objectClass: groupOfNames
objectClass: top
cn: LDAPADMIN
member: uid=zera,ou=People,dc=angelsofclockwork,dc=net
member: uid=sithlord,ou=People,dc=angelsofclockwork,dc=net
当然,这需要memberOf覆盖。
我使用的 memberOf 覆盖如下:
% vi modules.ldif
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: memberof
% vi memberof.ldif
dn: olcOverlay=memberof,olcDatabase={2}bdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf