带有 idmap 的 NFSv4

带有 idmap 的 NFSv4

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’未映射到域”,会给你很多结果,这些结果可能对你也有帮助(只是指出了最有希望的)

相关内容