我只是想在 NFS4 客户端和 NFS4 服务器之间“按用户名映射”,当每个给定用户名具有不同的 uid 时,无需设置 Kerberos。
情况:我的Linux机器(centos 7)访问各种NFS4服务器(运行centos 7)
- 没有可用的 Kerberos 或 NIS 或 AD
- 每个服务器都有不同的 dns 域(都与我的 linux box 的 DNS 域不同)
- 服务器和我的 linux 客户端具有不同步的 UID(每个用户名“oracle”具有不同的本地 uid)
echo N > /sys/module/nfsd/parameters/nfs4_disable_idmapping
在服务器和客户端上完成- 名称映射守护进程 rpcidmapd 在客户端和服务器上启动
- 客户端/etc/idmapd.conf为用户提供静态映射
- 安装为 nfs4(sec=sys,因为没有集中的 Kerberos/etc)可以工作
ls -l
显示“正确”的用户名和组名- 但是权限被忽略了,我必须设置 world rwx 来访问/遍历/写入文件,为什么?
背景问题:
哪一方(客户端或服务器)应该将名称映射到 id?
我的客户端上的 idmapd.conf 是否正确(例如远程 NFS4 服务器 DNS 域是 eh.loc):
[General] Verbosity = 7 [Mapping] [Translation] Method = static [Static] [email protected] = oracle [email protected] = oinstall [email protected] = dba
nfs id 映射存在很大的混淆。当字符串形式的主体(如 [email protected])必须转换为数字 id 时使用的映射,反之亦然。例如,这是在您执行ls -l时完成的。
但是,当您使用 sec=sys 挂载时,您显然会这样做,然后所有请求都使用客户端的本地 UID 和 GID 进行身份验证。IOW,客户端进程的触摸 UID 将是服务器上的文件所有者。实际上,解决这个问题 idmapd+Kerberos 组合非常棒。
好的,并不是在所有环境中都可以运行 Kerberos。您可以通过将来自这些主机的所有请求映射到单个 uid/gid 来强制执行单个 uid。