我正在尝试设置我的第一个 LDAP 服务器,该服务器将用于存储用户帐户(用于邮件、git 服务器和其他一些内容)。我设法安装了服务器,但在创建第一个对象时遇到了困难。
我想要设置的服务器是 ashley-vps.mildred.fr(目前,这是一个测试服务器)。它的 dn 是dc=ashley-vps, dc=mildred, dc=fr
。我做的第一件事是导入cosine
(这是一个数学函数吗?)和nis
架构。然后,我修改了配置的oldSuffix
和oldRootDN
,如下所示:
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 对象?这似乎是一个不必要的限制。同样,在创建posixAccount
s 时,似乎我们还需要创建一个用户和组organizationalUnit
s(如中所示本指南)。我可以不用吗?
答案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)
手册页并授予manage
root 访问权限(最高权限)
答案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>