9.10. 设置 SASL 身份映射


简单身份验证和安全层 (SASL)是 LDAP 和身份验证方法(如 GSS-API)之间的抽象层,允许任何可与 SASL 交互的协议使用任何可以与 SASL 一起工作的验证机制。简而言之,SASL 是一个中介,可以更轻松地使用不同机制向应用程序进行身份验证。SASL 还可用于在客户端和服务器之间建立加密的会话。
SASL 框架允许使用不同的机制向服务器验证用户,具体取决于客户端和服务器应用程序中启用了哪些机制。SASL 还为加密的(安全)会话创建一个层。使用 GSS-API,目录服务器使用 Kerberos 票据来验证会话和加密数据。

9.10.1. 关于 SASL 身份映射

在处理 SASL 绑定请求时,服务器匹配或映射,用来使用存储在服务器中的 LDAP 条目向目录服务器进行身份验证的 SASL 身份验证 ID。使用 Kerberos 时,SASL 用户 ID 通常会具有 userid@REALM 格式,如 scarter@EXAMPLE.COM。此 ID 必须转换为用户的目录服务器条目的 DN,如 uid=scarter,ou=body,dc=example,dc=com
如果身份验证 ID 明确对应于个人的 LDAP 条目,可以将 Directory 服务器配置为自动将身份验证 ID 映射到条目 DN。目录服务器具有一些预先配置的默认映射,这些映射可以处理大多数常见配置和自定义映射。默认情况下,在绑定尝试过程中,如果没有启用 SASL 映射回退,则只应用第一个匹配的映射规则。有关 SASL 映射回退的详情,请参阅 第 9.10.4 节 “启用 SASL 映射 Fallback”
务必配置 SASL 映射,以便只有一个映射规则与身份验证字符串匹配。
SASL 映射由容器条目下的条目配置:
dn: cn=sasl,cn=config
objectClass: top
objectClass: nsContainer
cn: sasl
Copy to Clipboard Toggle word wrap
SASL 身份映射条目是此条目的子项:
dn: cn=mapping,cn=sasl,cn=config
objectClass: top
objectClass: nsContainer
cn: mapping
Copy to Clipboard Toggle word wrap
映射条目由以下属性定义:
  • nsSaslMapRegexString :用于映射提供的 authid 的元素的正则表达式。
  • nsSaslMapFilterTemplate: 一个模板,它应用 nsSaslMapRegexString 的元素来创建 DN。
  • nsSaslMapBaseDNTemplate :提供搜索基础或特定条目 DN 以匹配构建的 DN。
  • 可选: nsSaslMapPriority: 设置此 SASL 映射的优先级。如果使用优先级值,如果在 cn=config 中启用了 nsslapd-sasl-mapping-fallback。详情请查看 第 9.10.4.1 节 “设置 SASL 映射优先级”
例如:
dn: cn=mymap,cn=mapping,cn=sasl,cn=config
objectclass:top
objectclass:nsSaslMapping
cn: mymap
nsSaslMapRegexString: \(.*\)@\(.*\)\.\(.*\)
nsSaslMapFilterTemplate: (objectclass=inetOrgPerson)
nsSaslMapBaseDNTemplate: uid=\1,ou=people,dc=\2,dc=\3
Copy to Clipboard Toggle word wrap
nsSaslMapRegexString 属性设置表单 \1,\2,\3 用于绑定 ID 的变量,以便在搜索过程中填充模板属性。本例为 ou=People,dc=example,dc=com 子树中任何用户设置 SASL 身份映射,其属于 inetOrgPerson 对象类。
当目录服务器收到一个 SASL 绑定请求,mconnors@EXAMPLE.COM 为用户 ID (authid),正则表达式会填充基本 DN 模板,带有 uid=mconnors,ou=people,dc=EXAMPLE,dc=COM 作为用户 ID,并从此进行身份验证。
注意
dc 值不区分大小写,因此 dc=EXAMPLEdc=example 等效。
目录服务器也可以使用更包含的映射方案,例如:
dn: cn=example map,cn=mapping,cn=sasl,cn=config
objectclass: top
objectclass: nsSaslMapping
cn: example map
nsSaslMapRegexString: \(.*\)
nsSaslMapBaseDNTemplate: ou=People,dc=example,dc=com
nsSaslMapFilterTemplate: (cn=\1)
Copy to Clipboard Toggle word wrap
这与任何用户 ID 匹配,并将它映射到满足过滤器 cn=userIdou=People,dc=example,dc=com 子树下的条目。
通过在 nsSaslMapRegexString 属性中指定 realm,可以将映射限制为单个域。例如:
dn: cn=example map,cn=mapping,cn=sasl,cn=config
objectclass: top
objectclass: nsSaslMapping
cn: example map
nsSaslMapRegexString: \(.*\)@US.EXAMPLE.COM   
nsSaslMapBaseDNTemplate: ou=People,dc=example,dc=com
nsSaslMapFilterTemplate: (cn=\1)
Copy to Clipboard Toggle word wrap
这个映射与之前的映射相同,但它只适用于从 US.EXAMPLE.COM 域进行身份验证的用户。(域在 第 9.11.2.1 节 “关于 Principals 和 Realms” 中进行了描述。)
当服务器连接到其他服务器时,如复制期间或使用链,则服务器的默认映射将无法正确映射身份。这是因为,一个服务器的主体(SASL 身份)与进行身份验证的服务器上的主体不匹配,因此它与映射条目不匹配。
要允许服务器使用 SASL 进行服务器身份验证,请为特定服务器主体创建一个到特定用户条目的映射。例如,此映射将 ldap1.example.com 服务器与 cn=replication managercn=config 条目匹配。映射条目本身是在第二个服务器上创建的,如 ldap2.example.com
dn: cn=z,cn=mapping,cn=sasl,cn=config
objectclass: top
objectclass: nsSaslMapping
cn: z
nsSaslMapRegexString: ldap/ldap1.example.com@EXAMPLE.COM
nsSaslMapBaseDNTemplate: cn=replication manager,cn=config
nsSaslMapFilterTemplate: (objectclass=*)
Copy to Clipboard Toggle word wrap
有时,域名不包括在 SASL GSS-API 配置中的主体名称中。可以创建第二个映射,其与第一个映射相同,只能在主体名称中指定域的情况下。例如:
dn: cn=y,cn=mapping,cn=sasl,cn=config
objectclass: top
objectclass: nsSaslMapping
cn: y
nsSaslMapRegexString: ldap/ldap1.example.com
nsSaslMapBaseDNTemplate: cn=replication manager,cn=config
nsSaslMapFilterTemplate: (objectclass=*)
Copy to Clipboard Toggle word wrap
因为没有指定 realm,因此第二个映射更为通用(表示,它有能力与第一个条目匹配)。最佳实践是首先处理更为具体的映射,并通过更常规映射逐步进行进度。
如果没有使用 nsSaslMapPriority 参数为 SASL 映射设置优先级,则无法指定处理映射的顺序。但是,有办法控制 SASL 映射的处理方式:名称。目录服务器以反向 ASCII 顺序处理 SASL 映射。在过去的两个示例中,首先处理 cn=z 映射(第一个示例)。如果没有匹配项,服务器将处理 cn=y 映射(第二个示例)。
注意
当实例在静默安装过程中创建实例时,可以通过在 LDIF 文件中指定映射并使用 ConfigFile 指令添加 LDIF 文件来添加 SASL 映射。安装指南 中介绍了使用静默安装。

9.10.2. 目录服务器的默认 SASL 映射

目录服务器具有预定义的 SASL 映射规则,以处理一些最常见的用法。

Kerberos UID 映射

这使用两个部分域( 如用户@example.com )匹配 Kerberos 主体。然后,使用 realm 定义搜索基础,用户 ID (authid)定义过滤器。搜索基础为 dc=example,dc=com,以及 (uid=user) 的过滤器。

dn: cn=Kerberos uid mapping,cn=mapping,cn=sasl,cn=config
objectClass: top
objectClass: nsSaslMapping
cn: Kerberos uid mapping
nsSaslMapRegexString: \(.*\)@\(.*\)\.\(.*\)
nsSaslMapBaseDNTemplate: dc=\2,dc=\3
nsSaslMapFilterTemplate: (uid=\1)
Copy to Clipboard Toggle word wrap

RFC 2829 DN Syntax

此映射与前缀为 dn: 的有效 DN (在 RFC 2829 中定义)的 authid 匹配。authid 直接映射到指定的 DN。

dn: cn=rfc 2829 dn syntax,cn=mapping,cn=sasl,cn=config
objectClass: top
objectClass: nsSaslMapping
cn: rfc 2829 dn syntax
nsSaslMapRegexString: ^dn:\(.*\)
nsSaslMapBaseDNTemplate: \1
nsSaslMapFilterTemplate: (objectclass=*)
Copy to Clipboard Toggle word wrap

RFC 2829 U Syntax

映射会匹配 UID 前缀为 u:authid 。前缀后指定的值定义了过滤器 (uid=value)。搜索基础被硬编码为默认 userRoot 数据库的后缀。

dn: cn=rfc 2829 u syntax,cn=mapping,cn=sasl,cn=config
objectClass: top
objectClass: nsSaslMapping
cn: rfc 2829 u syntax
nsSaslMapRegexString: ^u:\(.*\)
nsSaslMapBaseDNTemplate: dc=example,dc=com
nsSaslMapFilterTemplate: (uid=\1)
Copy to Clipboard Toggle word wrap

UID 映射

此映射与 authid 匹配,它是不匹配其他默认映射规则的普通字符串。它使用此值定义过滤器 (uid=value)。搜索基础被硬编码为默认 userRoot 数据库的后缀。

dn: cn=uid mapping,cn=mapping,cn=sasl,cn=config
objectClass: top
objectClass: nsSaslMapping
cn: uid mapping
nsSaslMapRegexString: ^[^:@]+$
nsSaslMapBaseDNTemplate: dc=example,dc=com
nsSaslMapFilterTemplate: (uid=&)
Copy to Clipboard Toggle word wrap

9.10.3. 配置 SASL 身份映射

(简单身份验证和安全层)SASL 身份映射可以从 Directory 服务器或命令行配置。要使 SASL 身份映射可用于 SASL 身份验证,映射必须返回一个,且在主机上必须配置与 Kerberos 匹配的条目。

9.10.3.1. 使用命令行配置 SASL 身份映射

要从命令行配置 SASL 身份映射,请使用 dsconf 工具添加身份映射方案。
  1. 添加身份映射方案。例如:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com sasl create --cn "example_map" --nsSaslMapRegexString "\(.*\)" --nsSaslMapBaseDNTemplate "ou=People,dc=example,dc=com" --nsSaslMapFilterTemplate "(cn=\1)" --nsSaslMapPriority 50
    Successfully created example_map
    Copy to Clipboard Toggle word wrap
    这会匹配任何用户的通用名称,并根据过滤器 cn=userId 将它映射到带有基本 ou=People,dc=example,dc=com 的子树搜索的结果。
  2. 重启实例:
    # dsctl instance_name restart
    Copy to Clipboard Toggle word wrap
注意
使用 dsconf 添加 SASL 映射将映射添加到列表的末尾,而不考虑其 ASCII 顺序。

9.10.3.2. 使用 Web 控制台配置 SASL 身份映射

添加 SASL 身份映射方案:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”
  2. 选择实例。
  3. 打开 Server Settings 菜单,然后选择 SASL Settings & Mappings
  4. Create New Mapping
  5. 填写表单。例如:
  6. 点击 Save

9.10.4. 启用 SASL 映射 Fallback

使用默认设置时,Directory 服务器只验证第一个匹配的 SASL 映射。如果这个第一个匹配的映射失败,则绑定操作会失败,且不会验证进一步匹配的映射。
但是,您可以通过启用 nsslapd-sasl-mapping-fallback 参数,将目录服务器配置为验证所有匹配的映射:
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-sasl-mapping-fallback=on
Successfully replaced "nsslapd-sasl-mapping-fallback"
Copy to Clipboard Toggle word wrap
如果启用了回退,且只返回一个用户身份,则绑定会成功。如果没有用户,或者返回多个用户,则绑定会失败。

9.10.4.1. 设置 SASL 映射优先级

如果您使用 nsslapd-sasl-mapping-fallback 属性启用了 SASL 映射回退,您可以选择在映射配置中设置 nsSaslMapPriority 属性来优先排序它们。nsSaslMapPriority 属性支持从 1 (最高优先级) 到 100 (最低优先级) 的值。默认值为 100
例如,要为 cn=Kerberos uid mapping,cn=mapping,cn=sasl,cn=config 映射设置最高优先级:
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x

dn: cn=Kerberos uid mapping,cn=mapping,cn=sasl,cn=config
changetype: modify
replace: nsSaslMapPriority
nsSaslMapPriority: 1
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat