为什么我无法在 Open-LDAP 服务器中创建我的第一个对象?

为什么我无法在 Open-LDAP 服务器中创建我的第一个对象?

我正在尝试设置我的第一个 LDAP 服务器,该服务器将用于存储用户帐户(用于邮件、git 服务器和其他一些内容)。我设法安装了服务器,但在创建第一个对象时遇到了困难。

我想要设置的服务器是 ashley-vps.mildred.fr(目前,这是一个测试服务器)。它的 dn 是dc=ashley-vps, dc=mildred, dc=fr。我做的第一件事是导入cosine(这是一个数学函数吗?)和nis架构。然后,我修改了配置的oldSuffixoldRootDN,如下所示:

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=ashley-vps, dc=mildred, dc=fr
-
replace: olcRootDN
olcRootDN: cn=Manager, dc=ashley-vps, dc=mildred, dc=fr

我使用的答案是添加国家时“没有全球优越知识”作为模板。

我认为我不需要设置任何特殊访问权限,因为我正在使用-Y EXTERNAL -H ldapi:///并且当我查看我的访问设置时,我似乎拥有必要的权限:

# {0}config, config
dn: olcDatabase={0}config,cn=config
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth" manage by * none

# {1}monitor, config
dn: olcDatabase={1}monitor,cn=config
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth" read by dn.base="cn=Manager,dc=my-domain,dc=com" read by * none

现在,我想创建我的第一个对象。让我们从以下开始dn: dc=ashley-vps, dc=mildred, dc=fr

dn: dc=ashley-vps, dc=mildred, dc=fr
changetype: add
objectclass: top
objectclass: organizationalUnit
objectclass: dcObject
ou: ashley-vps.mildred.fr

我被拒绝了:

ldap_add: Insufficient access (50)
    additional info: no write access to parent

我想这是因为这超出了 LDAP 服务器管理的层次结构的顶部,是吗?如果我尝试直接创建一个人:

dn: cn=Toto, dc=ashley-vps, dc=mildred, dc=fr
changetype: add
objectclass: person
cn: Toto
sn: Surname  

我也被拒绝了:

ldap_add: No such object (32)

这次我猜这是因为顶部物体丢失了。

那么,如何创建 top 对象?为什么我甚至需要创建一个 top 对象?这似乎是一个不必要的限制。同样,在创建posixAccounts 时,似乎我们还需要创建一个用户和组organizationalUnits(如中所示本指南)。我可以不用吗?

答案1

解决方案似乎是将olcAccess属性添加到dn: olcDatabase={2}hdb,cn=config。我以为我不需要它,但我需要它。这使得修改数据库成为可能。

因此我添加了以下代码dn: olcDatabase={2}hdb,cn=config

-
replace: olcAccess
olcAccess: {0}to *
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" write
  by * none

现在可以工作了(至少我可以创建dc=ashley-vps,dc=mildred,dc=fr

注意:不要忘记留出两个空格用于续行,否则会出现以下错误:ldap_modify:其他(例如,特定于实现)错误(80),<olcAccess> 处理程序以 1 退出

编辑:查看slapd.access(5)手册页并授予manageroot 访问权限(最高权限)

答案2

我知道这已经晚了,但我会发布此内容以供将来参考。我不会解决第一个错误,因为我认为您只是没有添加所需的架构。但对于错误,ldap_add: Insufficient access (50) additional info: no write access to parent 以下命令用于修改/添加架构:

ldapadd -Q -Y EXTERNAL -H ldapi:/// -w <password> -f </path/to/file>

要将条目添加到 LDAP,请使用以下命令:

ldapadd -x -D 'cn=Manager,dc=domain,dc=local' -w <password> -H ldapi:/// -f </path/to/file>

相关内容