如何正确设置openldap从属关系?

如何正确设置openldap从属关系?

我无法使此配置按预期工作:

# Database LDAP for ldap1
database        ldap
suffix          "ou=ldap1,dc=local"
uri ldap://ldap1
idassert-bind bindmethod=simple
   binddn="cn=admin,dc=ext1"
   credentials="secret3"
   mode=none
   flags=non-prescriptive
idassert-authzFrom "dn.exact:cn=manager,dc=local"
overlay rwm
rwm-suffixmassage   "ou=ldap1,dc=local" "dc=ext1"
subordinate

# Database LDAP for ldap2
database        ldap
suffix          "ou=ldap2,dc=local"
uri  ldap://ldap2
idassert-bind bindmethod=simple
  binddn="cn=admin,dc=ext2"
  credentials="secret2"
  mode=none
  flags=non-prescriptive
idassert-authzFrom "dn.exact:cn=manager,dc=local"
overlay rwm
rwm-suffixmassage   "ou=ldap2,dc=local" "dc=ext2"
subordinate

# Database LDAP for local Manager authentication
database ldap
readonly                yes
suffix "dc=local"
rootdn "cn=manager,dc=local"
rootpw secret1

知道在 ldap2 中,有一个“cn=test”的条目,我只希望查询主 LDAP 服务器(以“dc=local”为基数)能够工作,所以基本上,我希望让它工作:

 ldapsearch -x -b "dc=local" -D "cn=manager,dc=local" cn=test -H ldap://localhost -w secret1

实际上这个查询将会停滞......

当然,使用基数“ou=ldap2,dc=local”查询下属可以完美运行并返回正确的条目。这是有效的查询:

 ldapsearch -x -b "ou=ldap2,dc=local" -D "cn=manager,dc=local" cn=test -H ldap://localhost -w secret1

我的错误是什么?我想将两台服务器粘合在一起,以便通过主服务器上的一个请求在 ldap1 和 ldap2 服务器之间进行有效搜索。

答案1

与基础一起工作的子树搜索所缺少的dc=local是数据库中的实际根对象dc=local

因此我必须切换到mdb主数据库,以便dc=local有一个虚拟数据库,以便我可以实际添加新对象。

readonly yes当然,我还必须删除该声明。

然后我准备好这个base.ldif文件并将其添加到基础数据库:

cat <'EOF' > /tmp/base.ldif
dn: dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: Local
dc: local
EOF
ldapadd -h ldap://MYMASTERHOST -D cn=manager,dc=local -w secret1 -f /tmp/base.ldif

然后,ldapsearch基础树dc=local和子树都ou=ldap2,dc=local按预期工作。

我没有忘记放回该readonly yes语句,因为我不需要在主数据库中存储任何内容。

相关内容