欢迎来到之路教程(on itroad-com)

解决方案

  1. 在客户端和父服务器上使用正确的完全限定域名 (FQDN) 更改 /etc/idmapd.conf。
    在此示例中,正确的域是“example.com”,因此应将 /etc/idmapd.conf 中的“Domain =”指令修改为:
# vi /etc/idmapd.conf
Domain = oracle.com
  1. 要使更改生效,请重新启动 rpcidmapd 服务并重新挂载 NFSv4 文件系统:
# service rpcidmapd restart
# mount -o remount /nfs/mnt/point

在 Red Hat Enterprise Linux 6 上,如果已应用上述设置并且 UID/GID 在服务器和客户端上匹配,并且用户仍被映射到 nobody:nobody,则可能需要清除 idmapd 缓存。

# nfsidmap -c
在CentOS/RHEL中,NFSv4 挂载点的所有权限显示为错误的 nobody:nobody

问题

NFSv4 挂载错误地将所有具有所有权的文件显示为“nobody:nobody”。
在客户端服务器上,挂载的 NFSv4 共享拥有列为 nobody:nobody 的所有文件和目录的所有权,而不是在 NFSv4 服务器上拥有它们的实际用户,甚至是创建新文件和目录的人。

在 /var/log/messages 中还看到以下错误:

nss_getpwnam: name ‘root@example.com’ does not map into domain 'localdomain'

根本原因

在 NFSv3 中,username 和 group_name 是从 UID/GID 值映射的,创建资源的用户的 UID/GID 保存在服务器上。
当客户端服务器访问它时,将检查 /etc/passwd 和 /etc/gpasswd 文件以查看 id 是否存在以及它将映射到哪个用户。
如果有一个用户具有相同的 uid 和 gid,那么它将映射到该用户,否则将显示数值。

在 NFSv4 中的概念是 user@domainname,如果没有集中的用户映射,那么用户将被映射到默认用户 nobody 或者 /etc/idmapd.conf 中配置的任何用户。

首先检查 /etc/imapd.conf 文件的格式错误的配置。
如果我们更改 idmapd.conf 文件,在 CentOS/RHEL 6.5 和更新版本上,清除旧映射的命令是:

# nfsidmap -c

NFSv4 利用 ID 映射来确保在导出的共享上正确设置权限。
如果客户端服务器和父服务器的域不匹配,则权限将映射到 nobody:nobody。

禁用 idmapping

默认情况下,RHEL6.3 和更新的 NFS 客户端和服务器在使用 AUTH_SYS/UNIX 身份验证风格时通过启用以下布尔语句禁用 idmapping:

NFS 客户端服务器

# echo 'Y' > /sys/module/nfs/parameters/nfs4_disable_idmapping

NFS 父服务器

# echo 'Y' > /sys/module/nfsd/parameters/nfs4_disable_idmapping

故障排除

如果上述计划不能解决问题,请执行以下诊断步骤:

  1. 可以通过编辑 /etc/sysconfig/nfs 来启用调试/详细程度:
# vi /etc/sysconfig/nfs
RPCIDMAPDARGS="-vvv"
  1. 挂载完成后,/var/log/messages 中显示以下输出,系统显示 nobody:nobody 为用户和组对目录和文件的权限:
Jan 3 00:23:18 node1 rpc.idmapd[1874]: nss_getpwnam: name ‘root@oracle.com’ does not map into domain ‘localdomain’
Jun 3 00:26:54 node1 rpc.idmapd[1874]: nss_getpwnam: name ‘root@oracle.com’ does not map into domain ‘localdomain’
  1. 收集挂载尝试的 tcpdump:
# tcpdump -s0 -i {INTERFACE} host {NFS.SERVER.IP} -w /tmp/{SR_number}-$(hostname)-$(date +”%Y-%m-%d-%H-%M-%S”).pcap &
日期:2020-09-17 00:14:08 来源:oir作者:oir