如何使用动态 config=cn 后端在 Debian 5 上为 OpenLDAP 安装新架构?

Noe*_*eto 6 debian openldap debian-lenny

我正在从另一台服务器导入 OpenLDAP 数据库,在导入时,某些用户出现了一些错误,问题是该数据库mozillaAbPersonAlpha不是有效的objectClass.

#!ERROR [LDAP Error Code 21 - objectClass: value #3 invalid per syntax]
...
dn: uid=somedude,cn=Whatever,dc=test,dc=com
sn: Some Dude
givenName: Dude
mail: dude@test.com
mozillaCustom1: Engineering
l: Somewhere
objectClass: inetOrgPerson
objectClass: top
objectClass: person
objectClass: mozillaAbPersonAlpha
uid: somedude
cn: Some Dude
Run Code Online (Sandbox Code Playgroud)

AFAICT 似乎我的 OpenLDAP 安装缺少mozillaABPersonAlpha的架构。

但是我该如何安装这个架构呢?


编辑:服务器正在使用新的配置后端,因此没有任何slapd.conf文件。相反,有一个/etc/slapd.d/带有奇怪目录命名的目录(例如/etc/slapd.d/cn=config/)。

在这种情况下如何添加新架构?

Noe*_*eto 7

我正在回答我自己的问题,因为我想知道如何在使用新slapd.d/dynamic/cn=config后端时解决问题,而且我不想回到该slapd.conf方法。(几乎没有人这样做,AFAICT)

当我尝试使用 `ldapadd 添加新模式时,我总是收到以下错误:

ldapadd -H ldap://whatever.test.com -D "cn=admin,dc=whatever,dc=test,dc=com" -x -W -f mozillaabpersonalpha.ldif
ldap_add: Insufficient access (50)
Run Code Online (Sandbox Code Playgroud)

所以BindDN我使用的没有那个特权。我需要设置一个 ACL 或使用该rootDN操作。

我不知道为什么,但是在配置slapddebian 包时,它允许我为我的 DIT 创建一个管理员帐户,但它没有提到rootDN. 经过一番浏览,我发现这个博客解释了如何rootDN在使用cn=config架构时设置密码。

因此,编辑该文件/etc/ldap/slapd.d/cn=config/olcDatabase\=\{0\}config.ldif并添加以下内容:

olcRootDN: cn=admin,cn=config
olcRootPW: mypassword
Run Code Online (Sandbox Code Playgroud)

我必须重新启动 slapd 才能使更改生效(应该没有必要,但是......)。为了测试它,我运行了以下命令:

ldapwhoami -H ldap://whatever.test.com -D "cn=admin,cn=config" -x -w mypassword
Run Code Online (Sandbox Code Playgroud)

它奏效了!下一步是mozillaAbPersonAlpha使用 ldif 格式加载架构ldapadd

ldapadd -H ldap://whatever.test.com -D "cn=admin,cn=config" -x -w mypassword -f mozillaabpersonalpha.ldif
Run Code Online (Sandbox Code Playgroud)

响应成功

adding new entry "cn=mozillaabpersonalpha,cn=schema,cn=config"
Run Code Online (Sandbox Code Playgroud)

最后,mozillaABPersonAlpha现在可以添加一个依赖于架构的用户。例如,该文件newuser.ldif具有以下内容:

dn: uid=somedude,cn=Whatever,dc=test,dc=com
sn: Some Dude
givenName: Dude
mail: dude@test.com
mozillaCustom1: Engineering
l: Somewhere
objectClass: inetOrgPerson
objectClass: top
objectClass: person
objectClass: mozillaAbPersonAlpha
uid: somedude
cn: Some Dude
Run Code Online (Sandbox Code Playgroud)

并将其添加到新目录(不使用rootDN帐户)现在可以工作:

ldapadd -H ldap://whatever.test.com -D "cn=admin,dc=whatever,dc=test,dc=com" -x -W -f usertest.ldif 
Enter LDAP Password: 
adding new entry "uid=somedude,cn=SomeGroup,cn=whatever,dc=test,dc=com
Run Code Online (Sandbox Code Playgroud)