12.3. 以 IdM 中的 SSSD 用户身份进行身份验证时的数据流

以 IdM 服务器或客户端中的用户身份进行身份验证涉及以下组件:

  • 启动身份验证请求的服务,如 sshd 服务。
  • 可插拔验证模块 (PAM) 库及其模块。
  • SSSD 服务、其响应者和后端。
  • 智能卡读取器(如果配置了智能卡验证)。
  • 身份验证服务器:

    • IdM 用户通过 IdM Kerberos 密钥分发中心 (KDC) 进行身份验证。
    • Active Directory (AD) 用户通过 AD 域控制器 (DC) 进行身份验证。

下图是用户在尝试通过命令行上的 SSH 服务在本地登录主机期间需要进行身份验证时的简化信息流。

A diagram with numbered arrows representing the flow of information between an IdM client and an IdM server or AD Domain Controller during an authentication attempt. The following numbered list describes each step in the process.

  1. 使用 ssh 命令尝试身份验证会触发 libpam 库。
  2. libpam 库引用 /etc/pam.d/ 目录中与请求身份验证尝试的服务对应的 PAM 文件。在本例中,libpam 库涉及通过本地主机上的 SSH 服务进行身份验证,libpam 库检查 /etc/pam.d/system-auth 配置文件并发现 SSSD PAM 的 pam_sss.so 条目:

    auth    sufficient    pam_sss.so
  3. 要确定哪些身份验证方法可用,libpam 库会打开 pam_sss 模块,并将 SSS_PAM_PREAUTH 请求发送到 SSSD 服务的 sssd_pam PAM 响应者。
  4. 如果配置了智能卡验证,SSSD 服务会生成一个临时 p11_child 进程,以检查智能卡并从中检索证书。
  5. 如果为用户配置了智能卡验证,sssd_pam 响应程序会尝试将智能卡中的证书与用户匹配。sssd_pam 响应器还搜索用户所属的组,因为组成员身份可能会影响访问控制。
  6. sssd_pam 响应程序将 SSS_PAM_PREAUTH 请求发送到 sssd_be 后端响应程序,以查看服务器支持的身份验证方法,如密码或双因素身份验证。在 IdM 环境中,SSSD 服务使用 IPA 响应器,默认的身份验证方法是 Kerberos。在本例中,用户使用简单的 Kerberos 密码进行身份验证。
  7. sssd_be 响应器生成一个临时 krb5_child 进程。
  8. krb5_child 进程联系 IdM 服务器上的 KDC,并检查可用的身份验证方法。
  9. KDC 响应请求:

    1. krb5_child 进程评估回复,并将结果发回到 sssd_be 后端进程。
    2. sssd_be 后端进程会收到结果。
    3. sssd_pam 响应器会收到结果。
    4. pam_sss 模块会收到结果。
  10. 如果为用户配置了密码身份验证,pam_sss 模块将提示用户输入其密码。如果配置了智能卡验证,pam_sss 模块会提示用户输入其智能卡 PIN。
  11. 模块会发送带有用户名和密码的 SSS_PAM_AUTHENTICATE 请求,该请求经过以下操作:

    1. sssd_pam 响应器。
    2. sssd_be 后端进程。
  12. sssd_be 进程生成一个临时 krb5_child 进程来联系 KDC。
  13. krb5_child 进程尝试使用用户提供的用户名和密码从 KDC 检索 Kerberos Ticket Granting Ticket (TGT)。
  14. krb5_child 进程接收身份验证尝试的结果。
  15. krb5_child 进程:

    1. 将 TGT 存储到凭据缓存中。
    2. 将身份验证结果返回到 sssd_be 后端进程。
  16. 身份验证结果从 sssd_be 进程传输到:

    1. sssd_pam 响应器。
    2. pam_sss 模块。
  17. pam_sss 模块使用用户 TGT 的位置设置环境变量,以便其他应用可以引用它。