ipa ubuntu 客户端上未更新 Kerberos 凭据

ipa ubuntu 客户端上未更新 Kerberos 凭据

当我使用 ssh 登录到我的 freeipa 客户端时,我获得了 Kerberos 凭据(klist)。但是,在它们过期后,我不再获得凭据(klist 为空)。这导致没有主目录,因为用户没有 nfs 的权限。我可以使用 kinit 获取新凭据。重新启动 sssd 并使用 ssh 再次登录,也会获得新票证。使用 sudo 也可以获得票证。

我甚至不知道哪个进程负责请求票证,所以我不知道从哪里开始调试这个问题。我有 Ubuntu 20.04 并使用 freeipa-client 包来安装客户端。

任何帮助,将不胜感激。

答案1

如果您使用 ssh 公钥进行身份验证,则您仅向 ssh 守护程序进行身份验证,而不是向系统进行身份验证。SSH 守护程序会声称它已执行身份验证,然后将您登录到 shell。虽然此过程可能利用 PAM 堆栈来设置您的登录会话,但它不会通过 PAM 堆栈处理身份验证。

我可能对您说得很明显,但只有使用请求它的软件才能获得 Kerberos 票证。在典型的系统中,如果应用程序使用的 PAM 配置堆栈中定义了或 ,则将通过 PAMauth阶段请求此类票证。当此类应用程序(例如)跳过阶段时,不会调用任何负责身份验证的 PAM 模块,因此无法通过这种方式获得 Kerberos 票证。pam_ssspam_krb5authsshdauth

当 Kerberos 客户端尝试请求初始票证授予票证 (TGT) 时,它和 Kerberos KDC 会交换所谓的“预认证方法”列表。实际上,这些方法用于根据 KDC 对您的客户端进行认证。如果 KDC 接受客户端选择的一种方法,则该方法将执行实际的认证过程。没有使用 SSH 密钥对进行认证的 Kerberos 预认证方法,因此您无法使用 SSH 密钥对获取 TGT。所有基于密码的标准预认证方法都是围绕 Kerberos 客户端和 Kerberos KDC 构建的,它们都知道用户主体的长期密钥(密码),即使它们不通过网络传递它。目前有一种方法不依赖密码,这就是所谓的 PKINIT 方法,它依赖于使用公钥证书基础结构完成认证。

你能做什么?你可能想扭转局面,改用智能卡进行身份验证。Kerberos 支持智能卡身份验证作为“pkinit”预身份验证方法。除此之外,SSH 守护进程能够处理来自智能卡的证书,类似于 SSH 密钥对的情况。

如果您使用 PKINIT 身份验证,则有两种方法:要么在您的工作站上使用 PKINIT 获取 Kerberos TGT,然后使用您本地的 Kerberos 票证登录到其他计算机上的 SSH 守护程序,要么使用您的智能卡证书作为 SSH 密钥登录到 SSH 守护程序,然后使用智能卡转发直接在主机上请求 Kerberos 票证。在前一种情况下,您的原始 TGT 不会自动转发到 SSH 主机,除非您请求票证委派。在后一种情况下,您仍然需要请求 TGT。

无论使用哪种方法,你都可以从中受益https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/managing_certificates_in_idm/index

如果您不想或不能使用智能卡,那么唯一的方法就是直接使用 Kerberos 登录,而不用考虑 SSH 密钥对身份验证。

相关内容