如何正确地将 ACI 添加到 OpenLDAP

如何正确地将 ACI 添加到 OpenLDAP

因此,我尝试将一些 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

相关内容