OpenLDAP多LDAP服务器代理:指定映射属性查询失败问题问询
OpenLDAP RWM代理配置有效性及查询异常问题解决
先给你明确结论:你的核心映射配置逻辑是有效的,但因为非标准属性未在schema中定义,导致了ldapsearch查询时的异常问题——这也是启动slapd时警告的根源。
一、你的配置本身是否有效?
答案是肯定的:
- 虽然你重复写了两次
overlay rwm,但OpenLDAP会识别并加载这个overlay,所有属性映射逻辑都能正常工作(你提到代理能查询到用户所有属性且映射有效,就证明了这一点)。 lastName同时映射到sAMAccountName和sn的一对多配置是符合rwm overlay规则的,这个写法完全没问题。
不过这里可以优化一下配置,把重复的overlay rwm合并,让配置更清晰:
overlay rwm # 一对多映射lastName到两个目标属性 rwm-map attribute lastName sAMAccountName rwm-map attribute lastName sn # 其他属性与对象类映射 rwm-map attribute email emailAddress rwm-map attribute mobileNumber mobile rwm-map attribute uid uid rwm-map attribute firstName givenName rwm-map objectClass inetOrgPerson person
二、为什么ldapsearch指定自定义属性时只返回dn?
这个问题的直接原因就是启动时的警告:lastName、mobileNumber这些是你自定义的非标准属性,没有在OpenLDAP的schema中定义OID和属性规则。
OpenLDAP的slapd默认会对查询请求做属性合法性校验:
- 当你只请求这些未定义的自定义属性时,slapd会认为这些属性是无效的,所以只返回dn(这是LDAP协议的默认行为);
- 当你同时请求一个已定义的原生属性(比如
notesemail)时,slapd会放松校验,把所有匹配到的属性(包括自定义映射的)都返回给你。
三、快速解决方法(满足你“只想让代理正常工作”的需求)
方法1:添加极简的自定义属性schema
创建一个自定义schema文件(比如/etc/openldap/schema/custom.ldif),内容如下(替换1.3.6.1.4.1.123456为你自己的企业OID段,随便填一个未被占用的编号就行):
dn: cn=custom,cn=schema,cn=config objectClass: olcSchemaConfig cn: custom olcAttributeTypes: ( 1.3.6.1.4.1.123456.1.1 NAME 'lastName' DESC 'Custom last name attribute' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) olcAttributeTypes: ( 1.3.6.1.4.1.123456.1.2 NAME 'email' DESC 'Custom email attribute' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) olcAttributeTypes: ( 1.3.6.1.4.1.123456.1.3 NAME 'mobileNumber' DESC 'Custom mobile number attribute' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) olcAttributeTypes: ( 1.3.6.1.4.1.123456.1.4 NAME 'firstName' DESC 'Custom first name attribute' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )
然后用命令导入这个schema:
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/custom.ldif
重启slapd后,启动警告会消失,ldapsearch指定自定义属性也能正常返回结果了。
方法2:允许未知属性(更简单的方案)
如果不想折腾schema,可以直接在slapd.conf的全局配置部分(比如在所有include schema的指令之后)添加一行:
allow unknown attributes
重启slapd后,这个配置会让slapd跳过对未定义属性的合法性校验,你直接用ldapsearch查询自定义属性就能正常返回结果了。这个方法更快捷,虽然会降低一点属性合法性校验的安全性,但对于你的代理场景来说完全够用。
内容的提问来源于stack exchange,提问作者Ruifeng Ma
相关产品推荐
相关产品推荐

