NFS服务器上出现以下错误,请您告诉我如何解决这个问题?
细节:
系统:CentOS 6.4 版,NFS:nfs-utils-1.2.3-36
# cat /etc/idmapd.conf
[General]
Domain = domain.com
[Mapping]
Nobody-User = nobody
Nobody-Group = nobody
[Translation]
Method = nsswitch
Sep 3 08:25:28 snode1 rpc.idmapd[1382]: nss_getpwnam: name '0' does not map into domain 'domain.com'
Sep 3 08:25:29 snode1 rpc.idmapd[1382]: nss_getpwnam: name '500' does not map into domain 'domain.com'
编辑:2013 年 9 月 3 日 10:41
请注意,我使用的是 NFSv4,这些错误仅出现在 NFS 服务器上(不是 NFS 客户端)。
服务器:
# cat /etc/sysconfig/nfs
MOUNTD_NFS_V2="no"
MOUNTD_NFS_V3="no"
...
RPCNFSDARGS="-N 2 -N 3"
客户:
# cat /etc/fstab
server:/ /data nfs4 defaults,hard,intr,timeo=15,_netdev,noatime,nodiratime,nosuid 0 0
编辑:2014 年 6 月 11 日星期三 14:52:50 BST
# getent passwd "0" | cut -d: -f1
root
# getent passwd "500" | cut -d: -f1
user1
-
# grep "^passwd" /etc/nsswitch.conf
passwd: files
我来猜一猜。如果你在 NFS 服务器上解析 UID '0' 或 '500',你会得到什么?他们是本地帐户吗?
我建议的原因是,NFSv4 在设计上引用了域中的帐户名,并试图避免以前版本的 NFS 中的“本地身份验证”事情。因此,它使用 idmapd 来翻译帐户名称 - 在 NFS 数据包中传递 - 将用户名翻译为 UID/GID。
正如您正确确定的那样,这似乎是这里的问题 - 所以我的问题是,您使用的是什么身份验证域,当您查询它时,您是否得到 UID 0 和 500 的答案?
例如,与客户端相比,服务器正在查看 LDAP(嗯,活动目录)目录的错误分支时,我看到了类似的情况。因为它无法解析 UID/用户名的关系,所以它破坏了,并将这些用户翻译为“nobody”。
您已经通过 nsswitch 配置了分辨率 - nsswitch 对“passwd”说了什么?(主要在服务器上,因为这就是问题似乎存在的地方)。
编辑:好的,所以根据您的“密码”,您将“文件”作为本地数据库 - 例如
/etc/passwd
. 这意味着您正在通过本地帐户映射 UID/GID。您不应该在 NFSv4 中使用 UID - 它应该是用户名。但是,谷歌搜索给了我: http ://www.spinics.net/lists/linux-nfs/msg38598.html
因此,下一个问题是 - 您是否使用“sys”身份验证?我根据您的 fstab 猜测您的身份,此时 - 这似乎是预期的行为 - 您的客户正在使用“sys”,因此传递了 UID/GID。idmapd 抱怨是因为他们不是有效用户(他们是 UID)。
如果在您的客户端上,您“触摸”一个文件为 UID 500 或 0,那么它在客户端和服务器上会是什么样子(ls -l 获取用户名,ls -ln 获取 uid)?如果它工作正常,这似乎是 NFSv3 Auth sys 和 NFSv4 之间向后兼容的产物,并且这些消息是无害的。
您可以考虑升级到 Kerberos 身份验证或类似的,但从经验来看,这不是一件容易的事。(尽管有一些相当方便的优点)。我链接的那条消息(跟踪)意味着这个错误消息在以后的内核版本中停止弹出。
您似乎正在使用 NFSv3,它仅通过网络发送数字用户和组标识符。
为了使 idmapd 工作,您需要使用 NFSv4,它发送 idmapper 理解的 user@domain 标识符并映射到本地帐户(因此您不需要在服务器和客户端上使用相同的 uid/gid)。
尝试使用 -t 选项安装该共享:
请检查以下来自gentoo 论坛的解决方案是否对您有帮助:
对于您的设置,这看起来像第二个选项。
谷歌的确切错误消息“nss_getpwnam:名称'0'没有映射到域”为您提供了大量可能对您有帮助的结果(只是指出最有希望的)