我有一个在 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。