在 Ubuntu 上对 Kerberos 化的 NFSv4 主机进行 root 访问

在 Ubuntu 上对 Kerberos 化的 NFSv4 主机进行 root 访问

我有一个在 Ubuntu 下为普通用户运行良好的 Kerberos 版 NFSv4 设置,但我无法让它为 root 运行。

对于大多数系统,我不想允许 root 访问,但我有几个服务器,必须通过 NFS 对该文件服务器进行 root 访问。

我知道给定客户端上的 root 使用客户端的机器身份,而不是普通的 kerberos 主体。

我无法弄清楚的是:如何将给定的机器身份与服务器上的 root 访问权限等同起来?这在 AIX 和 Solaris 下似乎可行(服务器的导出文件中有 root=),但在 linux 下则不行。

我意识到我可以只对需要它的主机允许“sys”身份验证,并对所有其他主机保留 krb5,但我想了解如何在完全 Kerberos 化的环境中执行此操作。

谢谢,

核受体

PS 我正在使用 no_root_squash。

答案1

好吧,这里有一个可行的解决方案。这不是唯一的解决方案,但在我看来,这是最干净的解决方案。

在服务器的 idmapd.conf 文件中提供静态映射,将客户端的机器凭据与服务器上的 root 帐户等同起来。

您还必须告诉 idmapd 首先检查静态映射。我的服务器配置中的相关代码片段是:

[Translation]
GSS-Methods = static,nsswitch

[Static]
nfs/[email protected] = root

需要注意的是,nfs 客户端将通过 /etc/krb5.keytab 查找密钥(至少)按照以下顺序:

它取第一个并使用它。这是您必须在服务器上的 idmapd.conf 文件的 Static 部分中使用的名称。

核受体

答案2

我可以按照 @nrb 回答中针对运行 svcgssd 的 NFS 服务器的建议来做到这一点,但如果您的 NFS 服务器使用 gssproxy 而不是 svcgssd,则 idmapd 似乎会被忽略。在这种情况下,我发现的唯一解决方案是auth_to_local_names在 krb5.conf 中使用指令:

[realms]
    DOMAIN.COM = {
        auth_to_local_names = {
            host$ = root
        }
        ...
    }

我的 KDC 是 Samba 4 AD。Debian 11。

相关内容