OpenLDAP子/中继服务器配置协助请求
看起来你想搭建一个OpenLDAP中继/覆盖服务器,用来在不修改主LDAP的前提下扩展自定义组和权限控制——这个需求非常贴合企业里常见的“无主LDAP写权限但需要细化权限”的场景,下面我会帮你梳理具体的实现思路和关键配置步骤:
核心架构思路
你的子LDAP需要承担两个核心角色:
- 代理查询:当应用请求用户基础信息(比如密码、用户属性)时,自动转发到主LDAP服务器获取
- 本地扩展:存储你自定义的组(比如
Support-NewHires),并关联主LDAP中的用户UID,同时让应用能把这些本地组和主LDAP的用户信息关联起来
步骤1:搭建基础OpenLDAP子服务器
先按照常规流程搭建一个全新的OpenLDAP服务器(slapd),确保能正常运行。这里建议你的子LDAP根DN设置为dc=corp,dc=ORG,dc=com(和主LDAP保持一致,这样应用对接时不需要调整基础DN)。
步骤2:配置LDAP Proxy Overlay(实现主LDAP查询转发)
这个overlay能让子LDAP将特定的查询请求转发到主LDAP服务器,比如用户的认证请求、用户属性查询。
- 先加载
ldapoverlay模块:
ldapmodify -Y EXTERNAL -H ldapi:/// <<EOF dn: cn=module,cn=config changetype: modify add: olcModuleLoad olcModuleLoad: ldap.la EOF
- 为你的根DN配置proxy overlay,指向主LDAP服务器:
ldapmodify -Y EXTERNAL -H ldapi:/// <<EOF dn: olcOverlay=ldap,olcDatabase={1}mdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcLDAPOverlayConfig olcOverlay: ldap olcLDAPURI: ldap://xx.eng.yy.ORG.com olcLDAPBase: dc=corp,dc=ORG,dc=com olcLDAPBindDN: cn=readonly-user,dc=corp,dc=ORG,dc=com # 用你主LDAP的只读绑定账号 olcLDAPBindPW: your-readonly-password olcLDAPSearchScope: sub olcLDAPUpdateRef: ldap://xx.eng.yy.ORG.com # 写请求会被转发(但你没写权限,实际仅生效只读逻辑) EOF
注意:如果主LDAP允许匿名只读访问,
olcLDAPBindDN和olcLDAPBindPW可以省略。
步骤3:创建自定义组并关联主LDAP用户
现在你可以在子LDAP里创建自定义的OU和组了,比如:
- 先创建一个用来存放自定义组的OU(可选,方便管理):
ldapadd -x -D cn=admin,dc=corp,dc=ORG,dc=com -W <<EOF dn: ou=CustomGroups,dc=corp,dc=ORG,dc=com objectClass: organizationalUnit ou: CustomGroups EOF
- 创建
Support-NewHires组,并添加主LDAP里的用户(直接用用户的完整DN关联即可):
ldapadd -x -D cn=admin,dc=corp,dc=ORG,dc=com -W <<EOF dn: cn=Support-NewHires,ou=CustomGroups,dc=corp,dc=ORG,dc=com objectClass: groupOfNames cn: Support-NewHires description: Support team new hires member: uid=john,ou=support,dc=corp,dc=ORG,dc=com EOF
这里的
member直接指向主LDAP里的用户DN,子LDAP会通过之前配置的proxy overlay自动验证这个用户的存在。
步骤4:配置认证转发(让子LDAP使用主LDAP验证密码)
当应用通过子LDAP认证用户时,子LDAP会自动将密码验证请求转发到主LDAP。你可以通过调整子LDAP的访问控制策略确保这个流程正常:
ldapmodify -Y EXTERNAL -H ldapi:/// <<EOF dn: olcDatabase={1}mdb,cn=config changetype: modify add: olcAccess olcAccess: to attrs=userPassword by self write by anonymous auth by * none olcAccess: to * by * read EOF
这个配置允许匿名用户尝试绑定认证,同时所有查询请求都能被转发到主LDAP完成验证。
步骤5:应用对接与权限控制
现在你可以把VMware vCenter(或其他应用)对接子LDAP服务器:
- 在vCenter里配置LDAP服务器为你的子LDAP地址
- 设置权限时:
- 给
cn=Support-NewHires,ou=CustomGroups,dc=corp,dc=ORG,dc=com设置受限访问 - 给主LDAP里的
ou=support,dc=corp,dc=ORG,dc=com设置完全控制访问
- 给
当John登录时,vCenter会从子LDAP查询到他属于Support-NewHires组,应用受限权限;而Jane不属于这个自定义组,vCenter会从主LDAP获取她的ou=support属性,应用完全控制权限。
关键验证步骤
- 测试子LDAP能否查询主LDAP用户:
ldapsearch -x -b dc=corp,dc=ORG,dc=com -H ldap://your-child-ldap-host uid=john
应该能返回John的完整用户信息,包括主LDAP里的属性。
- 测试自定义组查询:
ldapsearch -x -b ou=CustomGroups,dc=corp,dc=ORG,dc=com -H ldap://your-child-ldap-host cn=Support-NewHires
应该能看到组的信息以及成员John的DN。
- 测试用户认证:
ldapwhoami -x -D uid=john,ou=support,dc=corp,dc=ORG,dc=com -W -H ldap://your-child-ldap-host
输入John的主LDAP密码,应该能成功返回uid=john,ou=support,dc=corp,dc=ORG,dc=com,说明认证转发正常。
备注:内容来源于stack exchange,提问作者RuMAN S

