20.13. 使用透传身份验证

直通身份验证(PTA)是一种机制,它允许一个 Red Hat Directory Server 实例参考另一个机制来验证绑定请求。直通身份验证是通过 PTA 插件实现的;启用后,插件可让目录服务器实例接受简单的绑定操作(基于密码)用于不存储在本地数据库中的条目。
目录服务器使用 PTA 管理目录服务器独立实例上的用户和配置目录。
第一个实例充当 PTA 目录服务器,该服务器是通过绑定到另一个目录服务器的服务器。第二个实例充当身份验证目录,这是包含该条目的服务器,并验证请求客户端的绑定凭据。
直通子树 是 PTA 目录中 不存在 的子树。当用户的绑定 DN 包含此子树时,用户的凭据将传递给身份验证目录。

图 20.2. 简单传递身份验证过程

简单传递身份验证过程
以下是通过身份验证的工作方式:
  1. 配置目录服务器(身份验证目录)安装在机器 A 上。配置目录始终包含带有身份验证用户条目的后缀,如 o=114。在本例中,服务器名称为 authdir.example.com
  2. 然后,在机器 B 上安装用户目录服务器(PTA 目录)。用户目录存储 root 后缀,如 dc=example,dc=com。在本例中,服务器名称为 userdir.example.com
  3. 使用以下命令在 userdir.example.com 上设置插件:
    # dsconf -D "cn=Directory Manager" ldap://userdir.example.com plugin pass-through-auth enable
    # dsconf -D "cn=Directory Manager" ldap://userdir.example.com plugin pass-through-auth url add "ldap://authdir.example.com/o=RedHat"
  4. userdir.example.com 上重新启动目录服务器。
  5. 用户主目录现在被配置为,向配置目录 authdir.example.com 发送带有包括 o=RedHat 的 DN 的所有绑定请求。
  6. 用户目录允许 o=rhcs 中的任何用户 绑定。

20.13.1. PTA 插件语法

PTA 插件配置信息在 PTA 目录中的 cn=Pass Through Authentication,cn=plugins,cn=config 条目中指定(配置为通过绑定请求传递给身份验证目录)使用所需的 PTA 语法。
使用以下命令来管理直通身份验证 URL:
  • 添加直通身份验证 URL:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin pass-through-auth url add URL
  • 修改直通身份验证 URL:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin pass-through-auth url modify old_URL new_URL
  • 删除直通身份验证 URL:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin pass-through-auth url delete URL
PTA 插件语法的变量组件在 表 20.3 “PTA 插件参数” 中进行了描述。
注意
LDAP URL (ldap|ldaps://authDS/subtree)必须独立于可选参数(maxconns, maxops, timeout, ldver, connlifetime, startTLS)。如果定义了任何可选参数,则必须定义所有这些参数,即使只使用默认值。
可以通过每次递增 nsslapd-pluginarg 属性后缀来指定几个验证目录或子树,如 第 20.13.3.2 节 “指定多个验证目录服务器” 所述。例如:
nsslapd-pluginarg0: LDAP URL for the first server
nsslapd-pluginarg1: LDAP URL for the second server
nsslapd-pluginarg2: LDAP URL for the third server
...
可选参数按照语法中显示的顺序在下表中描述。

表 20.3. PTA 插件参数

变量 定义
state 定义插件是否启用或禁用。可接受值为 onoff
ldap|ldaps 定义 TLS 是否用于两个目录服务器之间的通信。请参阅 第 20.13.2.1 节 “配置服务器以使用安全连接” 了解更多信息。
authDS 身份验证目录主机名。通过添加冒号,然后添加端口号,可以给定目录服务器的端口号。例如: ldap://dirserver.example.com:389/。如果没有指定端口号,PTA 服务器会尝试使用其中一个标准端口进行连接:
如果在 URL 中指定 ldap://,端口 389。
如果在 URL 中指定 ldaps://,则端口 636。
请参阅 第 20.13.2.2 节 “指定 Authenticating 目录服务器” 了解更多信息。
子树 直通子树。PTA 目录服务器从 DN 位于此子树中的所有客户端通过绑定请求传递给身份验证目录服务器。请参阅 第 20.13.2.3 节 “指定 Pass-Through Subtree” 了解更多信息。此服务器上不能存在此子树。
maxconns 可选。PTA 目录可以同时打开到身份验证目录的最大连接数。默认值为 3。请参阅 第 20.13.2.4 节 “配置可选参数” 了解更多信息。
maxops 可选。PTA 目录可以同时同时操作的最大数量(通常是绑定请求)可以发送到单一连接中的身份验证目录。默认值为 5。请参阅 第 20.13.2.4 节 “配置可选参数” 了解更多信息。
timeout 可选。PTA 目录从身份验证目录服务器等待响应的时间限制(以秒为单位)。如果超过这个超时,服务器会向客户端返回错误。默认值为 300 秒(5 分钟)。指定零(0)以指示不应强制实施时间限制。请参阅 第 20.13.2.4 节 “配置可选参数” 了解更多信息。
ldver 可选。用于连接到身份验证目录的 LDAP 协议版本。目录服务器支持 LDAP 版本 2 和 3。默认为版本 3,红帽强烈建议不要使用 LDAPv2,因为它是非常旧且已被弃用的技术。请参阅 第 20.13.2.4 节 “配置可选参数” 了解更多信息。
connlifetime 可选。可以使用连接的时间限制(以秒为单位)。如果在这段时间到期后客户端启动绑定请求,服务器将关闭连接并打开与身份验证目录的新连接。除非启动了绑定请求,否则服务器不会关闭连接,并且目录决定超过连接生命周期。如果没有指定这个选项,或者只列出一个主机,则不会强制执行连接生命周期。如果列出了两个或多个主机,则默认为 300 秒(5 分钟)。请参阅 第 20.13.2.4 节 “配置可选参数” 了解更多信息。
startTLS
可选。使用 STARTTLS 进行与身份验证目录的连接的标记。STARTTLS 通过标准端口建立安全连接,因此使用 LDAP 而不是 LDAPS 连接非常有用。TLS 服务器和 CA 证书都需要在两个服务器上可用。
默认值为 0, 即关闭。要启用 STARTTLS,请将其设置为 1。要使用 STARTTLS,LDAP URL 必须使用 ldap:,而不是 ldaps:
请参阅 第 20.13.2.4 节 “配置可选参数” 了解更多信息。

20.13.2. 配置 PTA 插件

修改 PTA 配置:
  1. 使用 dsconf 插件 pass-through-auth 命令修改 cn=Pass Through Authentication,cn=plugins,cn=config 条目。
  2. 重启目录服务器。
在配置任何 PTA 插件参数前,Directory 服务器中必须存在 PTA 插件条目。如果这个条目不存在,请使用适当的语法创建它,如 第 20.13.1 节 “PTA 插件语法” 所述。
注意
如果在目录的不同实例上安装了用户和配置目录,则 PTA 插件条目会自动添加到用户目录的配置中。
本节提供有关在以下部分中配置插件的信息:

20.13.2.1. 配置服务器以使用安全连接

PTA 目录可以配置为通过在 PTA 目录的 LDAP URL 中指定 LDAPS,通过 TLS 与身份验证目录通信。例如:
nsslapd-pluginarg0: ldaps://ldap.example.com:636/o=example

20.13.2.2. 指定 Authenticating 目录服务器

身份验证目录包含客户端试图绑定的条目的绑定凭证。PTA 目录将绑定请求传递给主机,定义为身份验证目录。要指定身份验证目录服务器,请将 PTA 目录的 LDAP URL 中的 authDS 替换为验证目录的主机名,如 表 20.3 “PTA 插件参数” 所述。
  1. 使用 dsconf 插件 pass-through-auth 命令编辑 PTA 插件条目:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin pass-through-auth add ldap://server.example.com/o=example
    (可选)包含端口号。如果没有提供端口号,PTA Directory 服务器会尝试对 ldap:// 使用标准端口(389)或 ldaps:// 的安全端口(636)进行连接。
    如果 PTA 目录服务器和身份验证目录服务器之间的连接中断或者无法打开连接,则 PTA 目录服务器会将请求发送到指定的下一个服务器(若有)。根据需要,可以指定多个目录服务器,以便在第一个目录服务器不可用时提供故障转移。所有身份验证目录服务器都在 nsslapd-pluginarg0 属性中设置。
    多个身份验证目录服务器以空格分隔的 host:port 对列表中列出,其格式如下:
    ldap|ldaps://host1:port1 host2:port2/subtree
  2. 重新启动服务器。
    # dsctl instance_name restart

20.13.2.3. 指定 Pass-Through Subtree

PTA 目录通过绑定请求从直通子树中定义的所有客户端传递给身份验证目录。子树通过替换 PTA 目录的 LDAP URL 中的 subtree 参数来指定。
PTA 目录中不能存在直通子树。如果这样做,PTA 目录会尝试使用自己的目录的内容解析绑定请求,绑定会失败。
  1. 使用 dsconf 插件 pass-through-auth 命令将 LDIF 文件导入到目录中:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin pass-through-auth add ldap://server.example.com/o=example
    有关此语法中的变量组件的详情,请参考 表 20.3 “PTA 插件参数”
  2. 重启服务器:
    # dsctl instance_name restart

20.13.2.4. 配置可选参数

可使用 LDAP URL 设置 PTA 连接的额外参数。
ldap|ldaps://authDS/subtree maxconns, maxops, timeout, ldver, connlifetime, startTLS
  • PTA 目录服务器可以同时打开到身份验证目录的最大连接数,由 PTA 语法中的 maxconns 表示。默认值为 3
  • PTA 目录服务器可同时向单个连接中的身份验证目录服务器发送的最大绑定请求数量。在 PTA 语法中,此参数是 maxops。默认值为 5
  • PTA 目录服务器的时间限制,以等待来自身份验证目录服务器的响应。在 PTA 语法中,这个参数是 超时。默认值为 300 秒(5 分钟)。
  • 用于连接到身份验证目录服务器的 PTA 目录服务器的 LDAP 协议版本。在 PTA 语法中,此参数是 ldver。默认值为 LDAPv3
  • 可以使用连接的时间限制(以秒为单位)。如果在这段时间到期后客户端启动绑定请求,服务器将关闭连接并打开与身份验证目录服务器的新连接。除非启动了绑定请求,服务器不会关闭连接,并且服务器确定已超过超时。如果没有指定这个选项,或者在 authDS 参数中只列出一个身份验证目录服务器,则不会强制执行时间限制。如果列出了两个或多个主机,则默认为 300 秒(5 分钟)。在 PTA 语法中,这个参数是 connlifetime
  • 是否将 STARTTLS 用于连接。STARTTLS 通过标准 LDAP 端口创建一个安全连接。对于 STARTTLS,服务器必须安装有服务器和 CA 证书,但它们不需要在 TLS 中运行。
    默认值为 0, 即 STARTTLS 为 off。要启用 STARTTLS,请将其设置为 1。要使用 STARTTLS,LDAP URL 必须使用 ldap:,而不是 ldaps:
  1. 使用 dsconf 插件 pass-through-auth 命令编辑插件条目:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin pass-through-auth add ldap://server.example.com/o=example 3,5,300,3,300,0
    (在这个示例中,每个可选参数都被设置为默认值。) 确保 subtree 参数和可选参数之间有一个空格。
    注意
    虽然这些参数是可选的,但如果定义了其中任何一个参数,但也必须定义它们,即使它们使用了默认值。
  2. 重启服务器:
    # dsctl instance_name restart

20.13.3. PTA 插件语法示例

本节包含在 dse.ldif 文件中 PTA 插件语法示例:

20.13.3.1. 指定一个 Authenticating Directory 服务器和一个 Subtree

这个示例将 PTA 插件配置为接受可选变量的所有默认值。此配置会导致 PTA 目录服务器连接到身份验证目录服务器,以获取到 o=example 子树的所有绑定请求。身份验证目录服务器的主机名是 configdir.example.com
dn: cn=Pass Through Authentication,cn=plugins,cn=config
...
nsslapd-pluginEnabled: on
nsslapd-pluginarg0: ldap://configdir.example.com/o=example
...

20.13.3.2. 指定多个验证目录服务器

如果 PTA 目录服务器和身份验证目录服务器之间的连接中断或者无法打开连接,则 PTA 目录服务器会将请求发送到指定的下一个服务器(若有)。根据需要,可以指定多个目录服务器,以便在第一个目录服务器不可用时提供故障转移。所有身份验证目录服务器都在 nsslapd-pluginarg0 属性中设置。多个身份验证目录服务器列在 host:port 对列表中。例如:
dn: cn=Pass Through Authentication,cn=plugins,cn=config
...	
nsslapd-pluginEnabled: on
nsslapd-pluginarg0: ldap://configdir.example.com:389 config2dir.example.com:1389/o=example
...
注意
nsslapd-pluginarg0 属性设置身份验证目录服务器;额外的 nsslapd-pluginargN 属性可以为 PTA 插件设置额外的 后缀,但不设置额外的 主机

20.13.3.3. 指定一个目录服务器和多个子树

以下示例将 PTA 目录服务器配置为传递多个子树的绑定请求(使用参数默认值):
dn: cn=Pass Through Authentication,cn=plugins,cn=config
...	
nsslapd-pluginEnabled: on
nsslapd-pluginarg0: ldap://configdir.example.com/o=example
nsslapd-pluginarg1: ldap://configdir.example.com/dc=example,dc=com
...

20.13.3.4. 使用非默认值参数值

这个示例仅将非默认值(10)用于最大连接参数 maxconns 数。其他参数都被设置为默认值。但是,由于指定了一个参数,因此所有参数都必须明确定义语法。
dn: cn=Pass Through Authentication,cn=plugins,cn=config
...	
nsslapd-pluginEnabled: on
nsslapd-pluginarg0: ldap://configdir.example.com/o=example 10,5,300,3,300,1
...

20.13.3.5. 为不同的目录服务器指定不同的可选参数和子树

要为每个身份验证目录服务器指定不同的直通子树和可选参数值,请设置多个 LDAP URL/可选参数对。将 LDAP URL/可选参数对与单个空格分开,如下所示:
dn: cn=Pass Through Authentication,cn=plugins,cn=config
...
nsslapd-pluginEnabled: on
nsslapd-pluginarg0:ldap://configdir.example.com/o=example 10,15,30,3,600,0
nsslapd-pluginarg1:ldap://config2dir.example.com/dc=example,dc=com 7,7,300,3,300,1
...