我无法使此配置按预期工作:
# 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
语句,因为我不需要在主数据库中存储任何内容。