到目前为止,我们在所有服务器(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 一旦验证了票证服务就会破坏它。
这是我的问题:
- 有没有办法将票证服务转发到凭证缓存内的 openssh ?它将帮助我之后验证 sudo 。
- 如果 1 不可能(我猜确实不可能),那么在我们所有服务器上转发 TGT 是否存在任何安全问题?(TGT 寿命为 4 小时)。我必须在服务器和防火墙上的 KDC 端口 88 之间打开一个流。
- 我宁愿避免在 sudoers 中使用 NOPASSWD,但如果 sudo 组的成员通过 kerberos 进行身份验证,那么将 NOPASSWD 放入该组的 sudoers 中是否存在任何安全问题?
- 让我知道您是否有其他想法,我将非常感激。
谢谢。
不,没有选择这样做。(理论上这是可能的,但这不是一个实现的功能。)
但是,可以使用 PAM 获取“S4U2self”票证,其中服务使用自己的密钥表“代表”用户获取自身的票证。(参见例如
kvno -I
。)(也称为 a
service ticket
,而不是ticket service
。)有,与SSH代理转发非常相似。尽管长期凭证无法被盗,但理论上 4 小时 TGT也可能被盗(并一直延长至其可更新生命周期,而不仅仅是其正常生命周期)。
由您决定这是否是您的案例中的一个重要问题,即服务器对某人获得 root 访问权限和读取其他用户票证的加固程度如何。
这不应该是一个问题。(事实上,我不明白为什么还没有开放。)
您正在计划的功能已经类似于 NOPASSWD - 其想法是,如果 pam_sss_gssapi 成功,它将立即从 PAM 返回,而根本不会到达“询问密码”pam_unix 模块。
但是,如果启用 NOPASSWD,它也会绕过 Kerberos 身份验证。原因是 Sudo 不会显式提示输入密码 – 它只调用 PAM 来验证用户身份,而 NOPASSWD 标志实际上意味着“无 PAM 身份验证”。(这并不意味着“无密码”;它只是标准 PAM 模块 (pam_unix) 要求输入密码。)但是如果启用 NOPASSWD,则 sudo 将永远不会调用 PAM 进行身份验证,因此会跳过 pam_unix 和 pam_sss_gss 。
MIT Kerberos 作为“原始”Kerberos 发行版,继续遵循其原始设计,其中授权(访问控制)明确不是 Kerberos 功能的一部分 - 它纯粹是一个身份验证系统。
它不会以任何频率轮询LDAP;它仅在用户“登录”时查询 LDAP – 与 Windows 没有显着不同。
非常感谢您的回答。
事实上,我认为配置 PAM 以使用 S4U2self 就能达到目的。我会尝试一下。
实际上,我们只将 TGS 转发到服务器,而不是 TGT。因此,无需在端口 88 上打开服务器和 KDC 之间的流(登录后,sudo 将通过 sssd 使用 ldap 密码进行身份验证),但如果我实现 S4U2self,则必须打开该流。
最后一件事我不明白...Windows Kerberos 使用 PAC 转发组成员资格。您知道为什么 MIT Kerberos 中没有实现该功能吗?我的意思是,Linux 中的 NSS 必须经常轮询 LDAP,以向其数据库提供有关用户和组的信息。从 PAC 获取它们会更好,不是吗?