NFS 服务器上出现以下错误,请您告诉我如何解决此问题?
细节:
系统:CentOS release 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
Run Code Online (Sandbox Code Playgroud)
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'
Run Code Online (Sandbox Code Playgroud)
编辑: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"
Run Code Online (Sandbox Code Playgroud)
客户:
# cat /etc/fstab
server:/ /data nfs4 defaults,hard,intr,timeo=15,_netdev,noatime,nodiratime,nosuid 0 0
Run Code Online (Sandbox Code Playgroud)
编辑:英国夏令时 2014 年 6 月 11 日星期三 14:52:50
# getent passwd "0" | cut -d: -f1
root
# getent passwd "500" | cut -d: -f1
user1
Run Code Online (Sandbox Code Playgroud)
——
# grep "^passwd" /etc/nsswitch.conf
passwd: files
Run Code Online (Sandbox Code Playgroud)
我要猜一猜。如果您在 NFS 服务器上解析 UID '0' 或 '500',您会得到什么?他们是本地帐户吗?
我建议这样做的原因是,NFSv4 在设计上会引用域内的帐户名,并试图避免 NFS 以前版本中的“本地身份验证”。因此,它使用 idmapd,它转换帐户名称 - 在 NFS 数据包中传递 - 将用户名转换为 UID/GID。
正如您正确确定的那样,这似乎是这里出了问题 - 所以我的问题是,您使用的是什么身份验证域,以及当您查询它时,您是否得到了 UID 0 和 500 的答案?
我看到过类似的情况,例如,与客户端相比,服务器正在查看 LDAP(好吧,活动目录)目录的错误分支。因为它无法解析 UID/用户名关系,所以它崩溃了,结果将这些用户转换为“无人”。
您已经通过 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 身份验证或类似身份验证,但从经验来看,这是一项非常重要的练习。(尽管有一些相当方便的优势)。我链接的那条消息(跟踪)暗示此错误消息在更高的内核版本中不再弹出。