我只是想在 NFS4 客户端和 NFS4 服务器之间“按用户名映射”,当每个客户端对于给定的用户名都有不同的 uid 时,无需设置 Kerberos。
情况:我的 Linux 机器(centos 7)访问各种 NFS4 服务器(运行 centos 7)
- 没有可用的 Kerberos 或 NIS 或 AD
- 每个服务器都有不同的 DNS 域(都与我的 Linux 机器的 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
答案1
nfs id 映射存在很大混淆。当字符串形式主体时使用的映射,如[电子邮件保护],必须转换为数字 ID,反之亦然。这是在您执行以下操作时完成的ls -l, 例如。
但是,当您使用 sec=sys 进行挂载时(您显然会这样做),所有请求都会使用客户端的本地 UID 和 GID 进行身份验证。换句话说,客户端进程的触摸 UID 将成为服务器上的文件所有者。实际上,idmapd+Kerberos 组合非常适合解决这个问题。
好吧,并不是每个环境都可以运行 Kerberos。您可以通过将这些主机的所有请求映射到单个 uid/gid 来强制使用单个 uid。
/data 10.0.1.1(rw,all_squash,anonuid=123,anongid=456)