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
dn: cn=sasl,cn=config
objectClass: top
objectClass: nsContainer
cn: sasl
SASL 身份映射条目是此条目的子项:
dn: cn=mapping,cn=sasl,cn=config objectClass: top objectClass: nsContainer cn: mapping
dn: cn=mapping,cn=sasl,cn=config
objectClass: top
objectClass: nsContainer
cn: mapping
映射条目由以下属性定义:
nsSaslMapRegexString
:用于映射提供的authid
的元素的正则表达式。nsSaslMapFilterTemplate
: 一个模板,它应用nsSaslMapRegexString
的元素来创建 DN。nsSaslMapBaseDNTemplate
:提供搜索基础或特定条目 DN 以匹配构建的 DN。- 可选:
nsSaslMapPriority
: 设置此 SASL 映射的优先级。如果使用优先级值,如果在cn=config
中启用了nsslapd-sasl-mapping-fallback
。详情请查看 第 9.10.4.1 节 “设置 SASL 映射优先级”。
详情请查看 红帽目录服务器配置、命令和文件参考中的相应部分。
例如:
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=EXAMPLE 和 dc=example 等效。
目录服务器也可以使用更包含的映射方案,例如:
这与任何用户 ID 匹配,并将它映射到满足过滤器 cn=userId 的 ou=People,dc=example,dc=com 子树下的条目。
通过在
nsSaslMapRegexString
属性中指定 realm,可以将映射限制为单个域。例如:
这个映射与之前的映射相同,但它只适用于从 US.EXAMPLE.COM 域进行身份验证的用户。(域在 第 9.11.2.1 节 “关于 Principals 和 Realms” 中进行了描述。)
当服务器连接到其他服务器时,如复制期间或使用链,则服务器的默认映射将无法正确映射身份。这是因为,一个服务器的主体(SASL 身份)与进行身份验证的服务器上的主体不匹配,因此它与映射条目不匹配。
要允许服务器使用 SASL 进行服务器身份验证,请为特定服务器主体创建一个到特定用户条目的映射。例如,此映射将 ldap1.example.com 服务器与 cn=replication managercn=config 条目匹配。映射条目本身是在第二个服务器上创建的,如 ldap2.example.com。
有时,域名不包括在 SASL GSS-API 配置中的主体名称中。可以创建第二个映射,其与第一个映射相同,只能在主体名称中指定域的情况下。例如:
因为没有指定 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) 的过滤器。
RFC 2829 DN Syntax
此映射与前缀为 dn: 的有效 DN (在 RFC 2829 中定义)的 authid
匹配。authid
直接映射到指定的 DN。
RFC 2829 U Syntax
映射会匹配 UID 前缀为 u: 的 authid
。前缀后指定的值定义了过滤器 (uid=value)。搜索基础被硬编码为默认 userRoot 数据库的后缀。
UID 映射
此映射与 authid
匹配,它是不匹配其他默认映射规则的普通字符串。它使用此值定义过滤器 (uid=value)。搜索基础被硬编码为默认 userRoot 数据库的后缀。
9.10.3. 配置 SASL 身份映射 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
(简单身份验证和安全层)SASL 身份映射可以从 Directory 服务器或命令行配置。要使 SASL 身份映射可用于 SASL 身份验证,映射必须返回一个,且在主机上必须配置与 Kerberos 匹配的条目。
9.10.3.1. 使用命令行配置 SASL 身份映射 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要从命令行配置 SASL 身份映射,请使用 dsconf 工具添加身份映射方案。
- 添加身份映射方案。例如:
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
# 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 Copied! Toggle word wrap Toggle overflow 这会匹配任何用户的通用名称,并根据过滤器 cn=userId 将它映射到带有基本 ou=People,dc=example,dc=com 的子树搜索的结果。 - 重启实例:
dsctl instance_name restart
# dsctl instance_name restart
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
注意
使用 dsconf 添加 SASL 映射将映射添加到列表的末尾,而不考虑其 ASCII 顺序。
9.10.3.2. 使用 Web 控制台配置 SASL 身份映射 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
添加 SASL 身份映射方案:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”。
- 选择实例。
- 打开 SASL Settings & Mappings。菜单,然后选择
- 点。
- 填写表单。例如:
- 点击。
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
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-sasl-mapping-fallback=on
Successfully replaced "nsslapd-sasl-mapping-fallback"
如果启用了回退,且只返回一个用户身份,则绑定会成功。如果没有用户,或者返回多个用户,则绑定会失败。
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 映射设置最高优先级: