好吧,我快要放弃了,但还是想再试一次。我的问题比答案还多,任何帮助我都会非常感激。
服务器上的操作系统是 Debian Stretch,客户端上的操作系统是 Debian Sid。我有一个带有 Kerberos 服务器的 NFSv4(两个服务器都在同一台物理机器上),它导出 /home/User1 /etc/exports
。
/home/User1 gss/krb5(rw,insecure,sync,wdelay,no_subtree_check,no_root_squash)
我在 /etc/default/nfs-common 中启用了 idmap,idmapd.conf
并且
[General]
Verbosity = 5
Pipefs-Directory = /run/rpc_pipefs
Domain = MyDomain
[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup
现在,客户端有一个 User2,它与 User1 是同一个人。但是,由于某些原因,User1 和 User2 的字符串必须不同。idmapd.conf
客户端上的文件完全相同。当我Server:/home/User1
以 root 身份从客户端挂载时,Kerberos 服务器会根据机器身份验证 (/tmp/krb5ccmachine) 发出服务票证,然后我就可以挂载 /home/User1。但是,您可能已经猜到了,挂载目录的所有权完全混乱了。首先,no_root_squash 选项被完全忽略,因此即使客户端上的 root 也无法写入挂载目录。User2 甚至无法 cd 进入它。
现在,据我所知,NFS 服务器不知道客户端上的 root 是 root(为什么?不应该root@MyDomain
转换为服务器上的 root?)从我在此站点上收集到的类似问题来看,对服务器进行以下更改可以idmapd.conf
解决此问题:
[Translate]
GSS-Methods = static
[Static]
nfs/client@MYREALM = root #principal used to authenticate client
令人恼火的是,即使在恢复对 idmapd.conf 的更改并重新启动 nfs 服务器后,root 仍然拥有对挂载目录的完整权限。这种持久性从何而来?
我的主要问题是:如何挂载 /home/User1,以便 User2 成为挂载目录的所有者,并且 User2 创建的任何文件在服务器上都显示为 User1 所拥有?在 NFSv3 中,这似乎很简单,因为所有权由 uid:gid 决定。在 NFSv4 中这是否可行?