在 LDAP 上创建用户时访问被拒绝

在 LDAP 上创建用户时访问被拒绝

我有一个 Web 应用程序,需要能够在 LDAP 上创建用户。我已经创建了cn=intranet,dc=example,dc=com,我需要它能够在 之外添加用户ou=People,dc=example,dc=com

因此,我尝试cn=intranet使用以下属性添加用户:

    dn = "uid=something,ou=People,dc=telecom-etude,dc=com"
    attrs = {
        cn: 'something',
        givenName: 'something',
        sn: 'something',
        uid: 'something',
        displayName: 'something',
        objectClass: ["inetOrgPerson", 'top', 'Person' ],
    }
    ldap = Devise::LDAP::Connection.admin # returns a Net::LDAP binding with `cn=intranet`
    ldap.add(dn: dn, attributes: attrs)

无论我做什么,我似乎都陷入了

(Net::LDAP) LDAP Creation ERROR : #<OpenStruct code=50, error_message="no write access to parent", matched_dn="", message="Insufficient Access Rights">
(phpmyldap) 0x32 (LDAP_INSUFFICIENT_ACCESS)

我已经尝试过(意思是,非最佳但绝对有效?)以下内容:

第一个条目用于备份,忽略它(除非它真的相关?)

olcAccess: {0}to attrs=userPassword,shadowLastChange,sambaLMPassword,sambaNTPa
 ssword,sambaPwdLastSet by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by dn="cn=jarvisrepl,dc=example,dc=com" write
 by * none
olcAccess: {1}to dn.base="" by * read
oclAccess: {2}to * by dn="intranet,dc=example,dc=com" write
olcAccess: {3}to * by self write by dn="cn=admin,dc=example,dc=com" writ
 e by * read
oclAccess: {4}to * by dn="intranet,dc=example,dc=com" write

我尝试使用通配符 * 来访问 cn="intranet",并将 oclAccess 置于默认访问 ({3}) 之后和之前,但即使这样也不起作用,我不明白为什么。

否则,从我读到的内容来看,我想要的最佳工作配置应该是这个:

olcAccess: {1}to dn.base="" by * read
oclAccess: {2}to dn.base="ou=People,dc=example,dc=com" attributes=children by dn="intranet,dc=example,dc=com" write
oclAccess: {3}to dn.onelevel="ou=People,dc=example,dc=com" by dn="intranet,dc=example,dc=com" write
olcAccess: {4}to * by self write by dn="cn=admin,dc=example,dc=com" writ
 e by * read

答案1

您必须将 "to * by * write" 规则一直移动到{0}插槽,然后才允许您的cn=intranet用户更新或创建新用户。

我相信这可能是因为插槽 {0} 中的默认 ACL 是:“to attrs=userPassword by self write by anonymous auth by * none”,尽管稍后在配置中有了新规则,但它仍会阻止对 userPassword 属性的访问。

看来顺序很重要,而且其他规则也会对最终结果产生很大的影响。

相关内容