如何通过 OpenSSH 进行身份验证,然后仅使用一个票证服务(Kerberos TGS 主机/fqdn)进行 sudo

如何通过 OpenSSH 进行身份验证,然后仅使用一个票证服务(Kerberos TGS 主机/fqdn)进行 sudo

到目前为止,我们在所有服务器(Debian 10 到 12)上使用 OpenSSH GSSAPI 身份验证。然后我们 sudo -i,使用 ldap 身份验证(通过 sssd-ldap)。

我想摆脱 ldap 身份验证并仅依赖 GSSAPI,对于 OpenSSH 和 Sudo 都是如此。这个想法是将票证服务转发到 Openssh (host/fqdn),将其保存在凭据缓存中(通常是 /tmp/krb5...)并保留 TGS 来验证 sudo (我发现 pam_sss_gss.so 可以验证 sudo与 GSSAPI)。

问题是...OpenSSH 一旦验证了票证服务就会破坏它。

这是我的问题:

  1. 有没有办法将票证服务转发到凭证缓存内的 openssh ?它将帮助我之后验证 sudo 。
  2. 如果 1 不可能(我猜确实不可能),那么在我们所有服务器上转发 TGT 是否存在任何安全问题? (TGT 寿命为 4 小时)。我必须在服务器和防火墙上的 KDC 端口 88 之间打开一个流。
  3. 我宁愿避免在 sudoers 中使用 NOPASSWD,但如果 sudo 组的成员通过 kerberos 进行身份验证,那么将 NOPASSWD 放入该组的 sudoers 中是否存在任何安全问题?
  4. 让我知道您是否有其他想法,我将非常感激。

谢谢。

答案1

有没有办法将票证服务转发到凭证缓存内的 openssh ?它将帮助我之后验证 sudo 。

不,没有选择这样做。 (理论上这是可能的,但这不是一个实现的功能。)

但是,可以使用 PAM 获取“S4U2self”票证,其中服务使用自己的密钥表“代表”用户获取自身的票证。 (参见例如kvno -I。)

(也称为 a service ticket,而不是ticket service。)

如果 1 不可能(我猜确实不可能),那么在我们所有服务器上转发 TGT 是否存在任何安全问题? (TGT 寿命为 4 小时)。

有,与SSH代理转发非常相似。即使长期凭证无法被盗,理论上4小时的TGT可以被盗(并一直延长到其可再生寿命 - 而不仅仅是其正常寿命)。

由您决定这是否是您的案例中的一个重要问题,即服务器对某人获得 root 访问权限和读取其他用户票证的加固程度如何。

我必须在服务器和防火墙上的 KDC 端口 88 之间打开一个流。

这不应该是一个问题。 (其实我也不明白为什么不是已经开放了。)

我宁愿避免在 sudoers 中使用 NOPASSWD,但如果 sudo 组的成员通过 kerberos 进行身份验证,那么将 NOPASSWD 放入该组的 sudoers 中是否存在任何安全问题?

您正在计划的功能已经类似于 NOPASSWD - 其想法是,如果 pam_sss_gssapi 成功,它将立即从 PAM 返回,而根本不会到达“询问密码”pam_unix 模块。

但是,如果启用 NOPASSWD,它也会绕过 Kerberos 身份验证。原因是 Sudo 不会明确提示输入密码 – 它只是调用 PAM 来验证用户身份,NOPASSWD 标志实际上意味着“无 PAM 身份验证”。 (这并不意味着“无密码”;它只是标准 PAM 模块 (pam_unix) 要求输入密码。)但是如果启用 NOPASSWD,则 sudo 将永远不会调用 PAM 进行身份验证,因此会跳过 pam_unix 和 pam_sss_gss 。

Windows Kerberos 使用 PAC 转发组成员身份。您知道为什么 MIT Kerberos 中没有实现该功能吗?

MIT Kerberos 作为“原始”Kerberos 发行版,继续遵循其原始设计,其中授权(访问控制)明确不是 Kerberos 功能的一部分 - 它纯粹是一个身份验证系统。

我的意思是,Linux 中的 NSS 必须经常轮询 LDAP,以向其数据库提供有关用户和组的信息。

事实并非如此轮询任意频率的 LDAP;它仅在用户“登录”时查询 LDAP – 与 Windows 没有显着不同。

相关内容