OpenLDAP作为多个LDAP服务器的代理,无法正确返回映射属性

时间:2018-01-31 13:35:30

标签: openldap

我们希望使用OpenLDAP代理我们拥有的多个客户LDAP服务器,例如Linux和Windows AD等中的普通LDAP。由于代理了多个LDAP服务器,我们还需要一对多的属性映射。所以在slapd.conf文件中,我们定义了rwm overlay部分,如下所示。

overlay       rwm
rwm-map       attribute   lastName  sAMAccountName

overlay rwm
rwm-map attribute email emailAddress
rwm-map attribute mobileNumber mobile
rwm-map attribute lastName sn
rwm-map attribute uid uid
rwm-map attribute firstName givenName
rwm-map objectClass inetOrgPerson person

请注意lastName如何映射到snsAMAccountName。我理解lastNamemobileNumber之类的条目不是合法的LDAP属性,在模式中定义了有效的OID。这就是启动slapd时出现以下警告的原因。但是,让我们暂时离开它。

5a71c27c /etc/openldap/slapd.conf: line 125: warning, source attributeType 'lastName' should be defined in schema

代理本身有效。我们可以使用它来查询用户并获取所有可用的属性。映射也可以成功完成。

但奇怪的是,如果我们在ldapsearch调用中指定映射属性,如下所示,那些属性将无法成功检索。

ldapsearch -h localhost -x -b "dc=local,dc=foo,dc=bar,dc=com" "mail=someone@foo.bar.com" lastname firstname mobilenumber

输出中仅显示dn属性。如果我们从LDAP服务器添加一个默认属性。所有这些都可以成功检索。

ldapsearch -h localhost -x -b "dc=local,dc=foo,dc=bar,dc=com" "mail=someone@foo.bar.com" lastname firstname mobilenumber notesemail

我们对OpenLDAP了解不多。只想先让这个代理工作。所以想知道以上配置是否是有效的试用版。

2 个答案:

答案 0 :(得分:0)

您正在搜索过滤器中将外部属性命名为本地服务器。它并不了解它们,因为它们已被映射。您需要使用映射的名称,例如givenName

答案 1 :(得分:0)

最终我发现诀窍是根本不使用rwm overlay。相反,只需在map指令后使用uri语句即可。所以在数据库声明部分,而不是

database meta
suffix "dc=foo,dc=bar,dc=com"
rootdn "cn=admin,dc=foo,dc=bar,dc=com"
rootpw "p@ssw0rd"

uri "ldaps://tstbluepages.mkm.can.ibm.com:636/dc=foo,dc=bar,dc=com"
lastmod off
readonly yes
suffixmassage "dc=foo,dc=bar,dc=com" "ou=bluepages,o=ibm.com"

uri "ldaps://<AD_HOSTNAME>:636/dc=local,dc=foo,dc=bar,dc=com"
lastmod off
readonly yes
suffixmassage "dc=foo,dc=bar,dc=com" "dc=testad,dc=ibm,dc=com"

overlay       rwm
rwm-map       attribute   lastName  sAMAccountName

overlay rwm
rwm-map attribute email emailAddress
rwm-map attribute mobileNumber mobile
rwm-map attribute lastName sn
rwm-map attribute uid uid
rwm-map attribute firstName givenName
rwm-map objectClass inetOrgPerson person

现在slapd.conf文件位于以下部分。

database meta
suffix "dc=foo,dc=bar,dc=com"
rootdn "cn=admin,dc=foo,dc=bar,dc=com"
rootpw "p@ssw0rd"

uri "ldaps://tstbluepages.mkm.can.ibm.com:636/dc=foo,dc=bar,dc=com"
lastmod off
readonly yes
suffixmassage "dc=foo,dc=bar,dc=com" "ou=bluepages,o=ibm.com"
map attribute mobileNumber mobile
map attribute email emailAddress
map attribute lastName sn
map attribute firstName givenName
map objectClass inetOrgPerson person


uri "ldaps://<AD_HOSTNAME>:636/dc=foo,dc=bar,dc=com"
lastmod off
readonly yes
suffixmassage "dc=foo,dc=bar,dc=com" "dc=testad,dc=ibm,dc=com"
map attribute lastName  sAMAccountName

我知道slapd-ldap联机帮助页指出map指令的功能已委托给rwm overlay,但slapd-meta联机帮助页仍然有map列出的指令,它的工作原理。

这很好地实现了我们最初的目的,即将来自多个后端LDAP服务器的不同属性映射为统一的。