20.15. 使用 PAM 进行传递身份验证

对于 Unix 和 Linux 用户,很多系统已经有身份验证机制。最常见的身份验证框架之一是 可插拔验证模块 (PAM)。由于许多网络已有可用的身份验证服务,管理员可能希望继续使用这些服务。可将 PAM 模块配置为告知目录服务器为 LDAP 客户端使用现有的身份验证存储。
PAM 在红帽目录服务器中通过身份验证使用 PAM Pass Through Auth 插件,这使得 Directory 服务器能够使 PAM 服务能够验证 LDAP 客户端。

图 20.3. PAM 传递身份验证过程

PAM 传递身份验证过程
注意
在验证用户时,PAM 通过身份验证与帐户一同工作,假设使用了适当的映射方法(ENTRY)。但是,PAM 通过身份验证不会针对全局或本地设置的密码策略验证密码,因为密码已设置并存储在 PAM 模块中,而不是存储在 Directory 服务器中。

20.15.1. PAM 直通身份验证配置选项

PAM 通过身份验证在 PAM Pass Through Auth 插件容器条目下的子条目中配置。可以有多个 PAM 通过身份验证策略,应用到不同的后缀或后缀中的不同条目。
为 PAM 可以配置几个不同的区域:
  • 由 PAM Pass Through Auth 插件控制的后缀。这涵盖了要排除的后缀,包括后缀以及如何处理缺少的后缀。
  • 配置的后缀中的单个条目,它们是身份验证配置的目标。默认情况下,后缀中的所有条目都包含在身份验证范围内,但可以配置多个不同的 PAM Through Auth 插件实例,然后将不同的插件配置应用到不同的用户。
  • PAM 属性映射。提供给目录服务器的凭据必须以某种方式映射到 LDAP 条目,然后返回到 PAM 服务中的凭据。这可以通过定义映射方法,然后(可选)用来匹配凭据的 LDAP 属性来完成。
  • 常规配置,如使用 TLS 连接、PAM 服务使用,以及是否回退到 LDAP 身份验证(如果 PAM 身份验证失败)。
注意
PAM Pass Through Auth 插件可以有多个配置实例。PAM Pass Through Auth 插件的实例可以通过使用 pamFilter 属性设置 LDAP 过滤器来搜索要用于插件的特定条目的子集。
有关您可以设置的属性列表,请参阅 Red Hat Directory Server Configuration, Command, and File Reference 中的 PAM Pass Through Auth Plug-in Attributes 部分。

20.15.1.1. 为 PAM PTA 指定目标的后缀

PAM PTA 插件默认对所有后缀应用,除非被明确排除。排除和包括后缀可以帮助对目录中的哪些区域使用 PAM 身份验证而不是 LDAP 身份验证的目标。
注意
PAM Pass Through authentication 条目的目标必须是后缀,而不是任意子树。如 第 2.1 节 “创建和维护后缀” 所述,后缀是与特定后端数据库关联的子树,如 cn=config,它与 root 后缀 dc=example,dc=com 关联,它与 用户Root 关联。
pamExcludeSuffix 属性排除一个后缀。默认情况下,只有配置子树(cn=config)会被排除。或者,PAM PTA 插件可以应用到带有 pamIncludeSuffix 属性的后缀。这两个属性都是多值。
如果设置了 include 属性,例如,则会自动排除所有其他后缀。同样,如果设置了 exclude 属性,则会自动包含所有其他后缀。
pamExcludeSuffix: cn=config
使用 pamIncludeSuffix 时,仅包含给定的后缀,所有其他后缀都会被自动排除。由于此属性是多值的,因此可以通过明确列出后缀,将多个后缀包含在 PAM 评估中。
pamIncludeSuffix: ou=Engineering,dc=example,dc=com
pamIncludeSuffix: ou=QE,dc=example,dc=com
pamMissingSuffix 属性告知服务器在指定的后缀(包括或排除)不存在时如何处理失败。如果设置为 IGNORE,如果没有后缀,则插件仅跳过该后缀并尝试下一个后缀。
pamMissingSuffix: IGNORE
pamIncludeSuffix: ou=Engineering,dc=example,dc=com
pamIncludeSuffix: ou=Not Real,dc=example,dc=com

20.15.1.2. 将不同的 PAM 直通身份验证配置应用到不同的条目

默认情况下,PAM 通过身份验证策略应用到指定的后缀中的所有条目。但是,可以在 pamFilter 属性中指定 LDAP 过滤器,该过滤器标识要通过身份验证策略应用到的后缀中的特定条目。
这可用于使用多个 PAM 通过身份验证策略应用不同的 PAM 配置或将方法映射到不同的用户类型。

20.15.1.3. 设置 PAM PTA 映射

必须有一种将 LDAP 身份连接到 PAM 身份的方法。定义的第一个操作是用来映射条目 的方法。有三个选项: DN、RDN 和 ENTRY。ENTRY 使用条目中的用户定义的属性。
可以在排序的、以空格分隔的列表形式提供多个映射方法。该插件会尝试按列出的顺序使用每个映射方法,直到身份验证成功或直至其到达列表的末尾。
例如,此映射方法首先根据列出方法的顺序映射 RDN 方法,然后是 ENTRY,然后按照列出方法的顺序进行映射:
pamIDMapMethod: RDN ENTRY DN
表 20.4 “PAM 身份验证的映射方法” 中列出了不同的映射方法。
注意
激活中的目录服务器用户帐户仅使用 ENTRY 映射方法进行验证。使用 RDN 或 DN 时,其帐户处于激活的目录服务器用户仍然可以成功绑定到服务器。

表 20.4. PAM 身份验证的映射方法

映射 描述
RDN 此方法使用绑定 DN 中最接近 RDN 的值。这个方法的映射是由目录服务器定义的。如果没有给出,这是默认映射方法。
ENTRY 此方法从绑定 DN 条目中的用户定义的属性拉取 PAM 身份的值。identity 属性在 pamIDAttr 属性中定义。例如: pamIDAttr: customPamUid
DN 此方法使用与绑定 DN 的完整可分辨名称。这个方法的映射是由目录服务器定义的。

20.15.1.4. 配置常规 PAM PTA 设置

可以为 PAM 身份验证设置三个常规配置设置:
  • 要发送到 PAM 的服务名称(pamService);这是要在 /etc/pam.d中使用的配置文件的名称
  • 是否需要安全连接(pamSecure)
  • 如果 PAM 身份验证失败,是否回退到 LDAP 身份验证(pamFallback)
pamFallback: false
pamSecure: false
pamService: ldapserver

20.15.2. 配置 PAM 透传身份验证

注意
对于可插拔验证模块(PAM)直通身份验证,可能存在多个配置实例。PAM Pass Through Authentication 的实例可以通过使用 pamFilter 属性设置 LDAP 过滤器来搜索要与插件搭配使用的特定条目。
PAM 直通身份验证通过命令行进行配置。
  1. 确保 PAM 服务已被完全配置。
  2. 从 PAM 配置文件中删除 pam_fprintd.so 模块。
    重要
    pam_fprintd.so 模块不能位于 PAM Pass Through Auth 插件配置的 pamService 属性引用的配置文件中。使用 PAM fprintd 模块会导致 Directory 服务器达到最大文件描述符限制,并可能导致 Directory 服务器进程中止。
  3. 启用 PAM Pass Through Auth 插件:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin set "PAM Pass Through Auth" --enabled on
  4. 创建 PAM Pass Through Auth 配置条目:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin pass-through-auth pam-config "Admin PAM PTA Config" add --exclude-suffix="cn=config" --id_map_method="RDN ENTRY" --id-attr="customPamUid" --filter="(manager=uid=example_user,ou=people,dc=example,dc=com pamFallback: FALSE" --secure="TRUE" --service="ldapserver"
  5. 重启实例:
    # dsctl instance_name restart

20.15.3. 在 Active Directory 中使用 PAM 传递身份验证作为后端

PAM 传递身份验证将凭据从目录服务器转发到 PAM 服务。一个选项是为目录服务器设置和配置 PAM 模块。另一个选项 - 和在某些基础架构中可能更容易地重复使用和更方便的选项 - 方法是使用系统安全服务守护进程(SSSD)来配置 PAM。由于 SSSD 可以使用各种不同的身份存储,所以可使用许多不同的服务器或服务来提供凭证,包括 Active Directory。
通过 SSSD 使用通过身份验证进行传递是一类服务链。PAM PTA 插件配置为正常。它指向要使用的给定 PAM 服务文件。此服务文件由 SSSD 管理,SSSD 被配置为与需要的任何身份提供程序连接,甚至多个供应商。

图 20.4. 使用 SSSD 进行 PAM 传递身份验证

使用 SSSD 进行 PAM 传递身份验证
使用 Active Directory 配置 PAM 传递身份验证:
  1. 将 SSSD 配置为使用 Active Directory 服务器作为其身份提供程序之一。
    此配置包括在 RHEL 系统直接与 Windows Active Directory 集成中的使用 SSSD 将 RHEL 系统直接连接到 AD 部分。
  2. 启用 PAM Pass Through Auth 插件,如下所示:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin set "PAM Pass Through Auth" --enabled on
  3. 创建 PAM Pass Through Auth 配置条目,如下所示:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com plugin pass-through-auth pam-config "AD PAM PTA Config" add --id_map_method="ENTRY" --id-attr="uid" --service="login" --include-suffix="ou=people,dc=example,dc=com" --missing-suffix="ERROR"
    这个示例使用 uid LDAP 属性作为用户名传递给 Active Directory,并只为人 OU 启用此配置。
  4. 重新启动目录服务器实例,以加载配置。
    # dsctl instance_name restart