13.3. 以 IdM 中的 SSSD 用户身份进行身份验证时的数据流
以 IdM 服务器或客户端中的用户身份进行身份验证涉及以下组件:
- 启动身份验证请求的服务,如 sshd 服务。
- 可插拔验证模块 (PAM) 库及其模块。
- SSSD 服务、其响应者和后端。
- 智能卡读取器(如果配置了智能卡验证)。
身份验证服务器:
- IdM 用户通过 IdM Kerberos 密钥分发中心 (KDC) 进行身份验证。
- Active Directory (AD) 用户通过 AD 域控制器 (DC) 进行身份验证。
下图是用户在尝试通过命令行上的 SSH 服务在本地登录主机期间需要进行身份验证时的简化信息流。
-
使用
ssh
命令尝试身份验证会触发libpam
库。 libpam
库引用/etc/pam.d/
目录中与请求身份验证尝试的服务对应的 PAM 文件。在本例中,libpam 库涉及通过本地主机上的 SSH 服务进行身份验证,libpam
库检查/etc/pam.d/system-auth
配置文件并发现 SSSD PAM 的pam_sss.so
条目:auth sufficient pam_sss.so
-
要确定哪些身份验证方法可用,
libpam
库会打开pam_sss
模块,并将SSS_PAM_PREAUTH
请求发送到 SSSD 服务的sssd_pam
PAM 响应者。 -
如果配置了智能卡验证,SSSD 服务会生成一个临时
p11_child
进程,以检查智能卡并从中检索证书。 -
如果为用户配置了智能卡验证,
sssd_pam
响应程序会尝试将智能卡中的证书与用户匹配。sssd_pam
响应器还搜索用户所属的组,因为组成员身份可能会影响访问控制。 -
sssd_pam
响应程序将SSS_PAM_PREAUTH
请求发送到sssd_be
后端响应程序,以查看服务器支持的身份验证方法,如密码或双因素身份验证。在 IdM 环境中,SSSD 服务使用 IPA 响应器,默认的身份验证方法是 Kerberos。在本例中,用户使用简单的 Kerberos 密码进行身份验证。 -
sssd_be
响应器生成一个临时krb5_child
进程。 -
krb5_child
进程联系 IdM 服务器上的 KDC,并检查可用的身份验证方法。 KDC 响应请求:
-
krb5_child
进程评估回复,并将结果发回到sssd_be
后端进程。 -
sssd_be
后端进程会收到结果。 -
sssd_pam
响应器会收到结果。 -
pam_sss
模块会收到结果。
-
-
如果为用户配置了密码身份验证,
pam_sss
模块将提示用户输入其密码。如果配置了智能卡验证,pam_sss
模块会提示用户输入其智能卡 PIN。 模块会发送带有用户名和密码的
SSS_PAM_AUTHENTICATE
请求,该请求经过以下操作:-
sssd_pam
响应器。 -
sssd_be
后端进程。
-
-
sssd_be
进程生成一个临时krb5_child
进程来联系 KDC。 -
krb5_child
进程尝试使用用户提供的用户名和密码从 KDC 检索 Kerberos Ticket Granting Ticket (TGT)。 -
krb5_child
进程接收身份验证尝试的结果。 krb5_child
进程:- 将 TGT 存储到凭据缓存中。
-
将身份验证结果返回到
sssd_be
后端进程。
身份验证结果从
sssd_be
进程传输到:-
sssd_pam
响应器。 -
pam_sss
模块。
-
-
pam_sss
模块使用用户 TGT 的位置设置环境变量,以便其他应用可以引用它。