chown 或 chgrp NFSv4 带有 idmapd 错误:参数无效

chown 或 chgrp NFSv4 带有 idmapd 错误:参数无效

我只发现 1 或 2 个关于此问题的其他帖子,没有任何解决方案,因此我针对我的情况创建了一个新的、更具体的疑问。

系统设置:运行 NFSv4 的 NFS 服务器。运行 RedHat 6 的 NFS 客户端,idmapd 在 /etc/idmapd.conf 中运行以下内容:

    [General]
    Verbosity = 7
    Domain = localdomain

    [Mapping]
    Nobody-User = nobody
    Nobody-Group = nobody

    Method = nsswitch

问题是,某些用户的 chown/chgrp 会失败,并出现“无效参数”错误,如下所示,即使该用户存在于本地主机上:

# chown oracle m
chown: changing ownership of `m': Invalid argument
# grep oracle /etc/passwd
oracle:x:54321:54321::/home/oracle:/bin/bash

# chown mysql m
# grep mysql /etc/passwd
mysql:x:496:496:MySQL server:/var/lib/mysql:/bin/bash

为什么 idmapd 无法识别某些用户,但可以识别其他用户(root、nobody,甚至非标准的 mysql 都可以)?

上面我遗漏了什么具体设置吗?我认为当域设置为 localdomain 时,一切都应该只使用本地密码/组文件等就可以工作。(是的,nsswitch.conf 将密码和组列为文件)?

提前致谢!

答案1

我只是想结束这个循环。我找到了答案。这里的问题是当 rpcidmapd 开启时,NFSv4 使用它进行映射,但这意味着 NFS 将 username@domainname 与 UID/GID 发送到服务器。

当服务器不理解这个username@domainname的时候(可能是因为服务器没有设置相同的目录或者其他原因),它不允许chown/chmod。

显然,这种默认行为是错误的。在后来的 Linux 内核中,这个问题已由内核中的 NFS 维护者修复,因此 NFSv4 默认不使用 idmapping。请参阅此处的提交: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=074b1d12fe2500d7d453902f9266e6674b30d84c

要自行修复此问题,您可以执行以下操作(特定于 RHEL):

echo "options nfs nfs4_disable_idmapping=1" >> /etc/modprobe.d/nfs.conf

希望这可以帮助。

相关内容