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
答案1
我来猜一下。如果你在 NFS 服务器上解析 UID '0' 或 '500',你会得到什么?它们是本地帐户吗?
我建议这样做的原因是,NFSv4 在设计上引用域内的帐户名称,并试图避免以前版本的 NFS 中的“本地身份验证”问题。因此,它使用 idmapd(它转换在 NFS 数据包中传递的帐户名称)将用户名转换为 UID/GID。
正如您正确判断的那样,这看起来就是这里出现的问题 - 所以我的问题是,您使用什么身份验证域,当您查询它时,您是否得到了 UID 0 和 500 的答案?
我曾见过类似的情况,例如,服务器查看的 LDAP(即 Active Directory)目录的分支与客户端不同。由于无法解析 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 身份验证或类似身份验证,但从经验来看,这不是一件容易的事情。(尽管有一些相当方便的优势)。我链接的那条消息(线索)意味着此错误消息在更高版本的内核中不再弹出。
答案2
看来您正在使用 NFSv3,它仅通过网络发送数字用户和组标识符。
为了使 idmapd 工作,您将需要使用 NFSv4,它发送 idmapper 理解的 user@domain 标识符并映射到本地帐户(因此您不需要在服务器和客户端上使用相同的 uid/gid)。
尝试使用 -t 选项挂载该共享:
mount -t nfs4 server:/path /mountpoint
答案3
请检查以下解决方案是否来自gentoo 论坛帮你:
1. On the NFS server, /etc/hostname did not contain the FQDN, just the local hostname.
2. This particular client had an unconfigured /etc/idmapd.conf. It had Domain = localdomain instead of Domain = FQDN-minus-hostname.
对于您的设置,这看起来像第二个选项。
谷歌搜索确切的错误信息“nss_getpwnam:名称‘0’未映射到域”,会给你很多结果,这些结果可能对你也有帮助(只是指出了最有希望的)