如何用单个Kerberos主体访问两个不同LDAP RootDN
单个Kerberos账号映射到两个LDAP RootDN的GSSAPI认证解决方案
问题背景
现有两个LDAP RootDN:
cn=admin,cn=configcn=admin,dc=example,dc=com
目标是通过单个Kerberos账号ldap/admin获取票据后,使用GSSAPI认证分别访问这两个RootDN,对应的客户端命令为:
ldapsearch -D "cn=admin,cn=config" -W -Y GSSAPI ldapsearch -D "cn=admin,dc=example,dc=com" -W -Y GSSAPI
已配置olcAuthzRegexp规则,但目前仅能访问其中一个RootDN,现寻求无需修改olcAccess的解决方法。当前配置规则:
olcAuthzRegexp: {0}"uid=ldap/admin,cn=example.com,cn=gssapi,cn=auth" "cn=admin,dc=example,dc=com" olcAuthzRegexp: {1}"uid=ldap/admin,cn=example.com,cn=gssapi,cn=auth" "cn=admin,cn=config"
解决方案
核心思路
OpenLDAP默认olcAuthzPolicy为none,会忽略客户端指定的-D授权ID,仅使用olcAuthzRegexp匹配到的第一个DN。要实现同一个Kerberos主体切换不同授权DN,可通过authzTo属性结合olcAuthzPolicy配置实现,无需修改访问控制列表。
步骤1:修改授权策略配置
在cn=config条目下添加或更新olcAuthzPolicy,允许客户端指定授权ID:
olcAuthzPolicy: to
步骤2:为两个RootDN添加authzTo属性
分别为两个RootDN添加authzTo属性,授权Kerberos主体的SASL身份使用该DN:
- 修改
cn=admin,cn=config:ldapmodify -Y GSSAPI <<EOF dn: cn=admin,cn=config changetype: modify add: authzTo authzTo: uid=ldap/admin,cn=example.com,cn=gssapi,cn=auth EOF - 修改
cn=admin,dc=example,dc=com:ldapmodify -Y GSSAPI <<EOF dn: cn=admin,dc=example,dc=com changetype: modify add: authzTo authzTo: uid=ldap/admin,cn=example.com,cn=gssapi,cn=auth EOF
步骤3:验证配置
获取Kerberos票据后,执行客户端命令验证:
# 以cn=admin,cn=config身份访问 ldapsearch -D "cn=admin,cn=config" -Y GSSAPI # 以cn=admin,dc=example,dc=com身份访问 ldapsearch -D "cn=admin,dc=example,dc=com" -Y GSSAPI
说明
olcAuthzPolicy: to允许客户端通过-D参数指定授权DN,只要该DN的authzTo属性包含认证后的SASL身份。- 无需修改
olcAccess规则,两个RootDN本身已拥有最高权限,authzTo仅控制身份切换的权限。
内容的提问来源于stack exchange,提问作者Ichigo Kurosaki
相关产品推荐
相关产品推荐

