当用户标识不匹配时,NFS4权限被拒绝(即使idmap正在工作)

我有NFS4安装与idmapd正常工作。 客户端的ls -l显示正确的用户名,即使用户ID在机器之间不同。

但是,当用户ID不匹配时,即使ls -l显示正确的用户名,我也会遇到“权限被拒绝”错误。 当用户id确实发生巧合匹配时,一切正常。

sudo sysctl -w sunrpc.nfsd_debug=1023在服务器syslog中为失败的文件访问提供以下输出:

 nfsd_dispatch: vers 4 proc 1 nfsv4 compound op #1/3: 22 (OP_PUTFH) nfsd: fh_verify(28: 00070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba) nfsv4 compound op ffff88003d0f5078 opcnt 3 #1: 22: status 0 nfsv4 compound op #2/3: 3 (OP_ACCESS) nfsd: fh_verify(28: 00070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba) nfsd: fh_verify - just checking nfsv4 compound op ffff88003d0f5078 opcnt 3 #2: 3: status 0 nfsv4 compound op #3/3: 9 (OP_GETATTR) nfsd: fh_verify(28: 00070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba) nfsd: fh_verify - just checking nfsv4 compound op ffff88003d0f5078 opcnt 3 #3: 9: status 0 nfsv4 compound returned 0 nfsd_dispatch: vers 4 proc 1 nfsv4 compound op #1/7: 22 (OP_PUTFH) nfsd: fh_verify(28: 00070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba) nfsv4 compound op ffff88003d0f5078 opcnt 7 #1: 22: status 0 nfsv4 compound op #2/7: 32 (OP_SAVEFH) nfsv4 compound op ffff88003d0f5078 opcnt 7 #2: 32: status 0 nfsv4 compound op #3/7: 18 (OP_OPEN) NFSD: nfsd4_open filename dom_file op_stateowner (null) renewing client (clientid 4f96587d/0000000e) nfsd: nfsd_lookup(fh 28: 00070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba, dom_file) nfsd: fh_verify(28: 00070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba) nfsd: fh_verify - just checking nfsd: fh_lock(28: 00070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba) locked = 0 nfsd: fh_compose(exp 08:01/22806529 srv/dom_file, ino=22809724) nfsd: fh_verify(36: 01070001 015c0001 00000000 9853d400 2a4892a5 4918a0ba) nfsd: fh_verify - just checking fh_verify: srv/dom_file permission failure, acc=804, error=13 nfsv4 compound op ffff88003d0f5078 opcnt 7 #3: 18: status 13 nfsv4 compound returned 13 

这对任何人都有用吗? 任何提示来debugging这将不胜感激。

 Server kernel: 2.6.32-40-server (Ubuntu 10.04) Client kernel: 3.2.0-27-generic (Ubuntu 12.04) 

运行3.2.0-27-generic (Ubuntu 12.04)新服务器也出现同样的问题。

谢谢。

NFSv4在客户端和服务器之间使用utf8string主体。 因此,在客户机和服务器上使用相同的用户名和nfs4域就足够了。 uid可以是不同的。 但是….如果你使用AUTH_SYS(使用默认的sec = sys进行挂载),你的RPC请求将会使用来自客户端主机的uid和gid。 在这种情况下,如果客户端和服务器上的uid不同,则会拒绝访问。 在RPCGSS_SEC的情况下,你的kerberos主体被发送,并在服务器上将使用相同的idmapd映射到本地的uid和gid。 ls -l按预期工作,因为它使用idmapd将文件所有者和组标识映射到稍后发送给客户端的主体。