nfs4 id->用户客户端不工作

nfs4 id->用户客户端不工作

情况是 nfs4 服务器和客户端使用 rpc.idmapd 来映射 ID。客户端上的 ID 映射适用于服务器提供的现有文件。

在服务器上:

[root@server ~]# id user1
uid=500(user1) gid=502(user1) groups=502(user1)
[root@server ~]# ls -l /mnt/san/temp
total 0
-rw-r--r-- 1 user1 user1 0 Aug 27 11:46 test1
[root@server ~]# ls -ln /mnt/san/temp
total 0
-rw-r--r-- 1 500 502 0 Aug 27 11:46 test1

在客户端上:

[user1@client ~]$ id user1
uid=504(user1) gid=506(user1) groups=506(user1)
[user1@client ~]$ ls -l /mnt/san/temp
total 0
-rw-r--r-- 1 user1 user1 0 Aug 27 11:46 test1
[user1@client ~]$ ls -ln /mnt/san/temp
total 0
-rw-r--r-- 1 504 506 0 Aug 27 11:46 test1

那就好了。

但是从客户端创建文件:

[user1@client ~]$ touch /mnt/san/temp/test2
[user1@client ~]$ ls -l /mnt/san/temp
total 0
-rw-r--r-- 1 user1 user1 0 Aug 27 11:46 test1
-rw-rw-r-- 1 user2 user2 0 Aug 27 11:49 test2
[user1@client ~]$ ls -ln /mnt/san/temp
total 0
-rw-r--r-- 1 504 506 0 Aug 27 11:46 test1
-rw-rw-r-- 1 505 507 0 Aug 27 11:49 test2

此时它似乎还没有在客户端进行 id->name 映射。

两个系统都是 CentOS 5.x。顺便说一下,文件 /proc/net/rpc/nfs4.nametoid/content 和 /proc/net/rpc/nfs4.idtoname/content 在客户端上是空的,但在服务器上有条目。

我在客户端上查看了 rpc.idmapd 的日志记录,/var/log/messages 显示它正用于名称到 id 的映射,例如:8 月 27 日 11:49:27 fw01 rpc.idmapd[11773]: 客户端 23:(用户) 名称“user2@localdomain”->id“505”我期望在客户端创建文件时发生相应的 id->name 查找。

同步 ID 和使用 nfsv3 的简单解决方案实际上不是一个选择(并不简单!)。

编辑:

对困惑感到抱歉:

[user1@client ~]$ getent passwd 504 505
user1:x:504:506::...
user2:x:505:507::...
[user1@client ~]$ getent group 506 507
user1:x:506:
user2:x:507:

[root@server ~]# getent passwd 504 505
user2:x:504:506::...
[root@server ~]# getent group 506 507
user2:x:506:

也就是说,似乎发生的情况是,在客户端上创建文件时,user1(uid 504/gid 506)在服务器上创建之前没有进行转换。它在服务器上被创建为 504/506。这在服务器上是 user2/user2,因此此后返回给客户端的是错误的。

答案1

我也遇到了同样的问题,花了一些时间研究答案。看来 rpc.idmapd 不支持 ID 到名称的映射,因此无法更改文件系统。不过,我看到有人提到,如果使用 Kerberos 身份验证进行挂载,这可能会起作用(http://permalink.gmane.org/gmane.linux.nfsv4/11363)。我还没有亲自尝试过,因为 Kerberos 似乎设置起来有点麻烦。为了简单起见,我目前只打算同步 UID。

相关内容