关于NFSv4服务共享目录里的文件UID和GID显示为nobody的解决方法

 

一、问题现象:

当我们使用NFSv4这个版本的NFS服务给客户端提供共享文件系统时,会产生共享文件夹下的文件的属主和属组都是nobody的现象,具体现象见下图:

关于NFSv4服务共享目录里的文件UID和GID显示为nobody的解决方法_第1张图片

二、问题原因:

造成UID和GID显示为nobody的原因是,nfsv4提供了称为rpc.idmapd 的守护进程,这个服务的配置文件是 /etc/idmapd.conf 。当收到来自客户端的加载请求时,该守护进程将处理UID 和 GID 映射,如果不对其进行配置,这个服务默认将共享目录内文件的UID和GID映射为nobody,见下图:

三、解决方法:

如果要使用idmapd服务,必须要分别在服务端和客户端的idmapd配置文件/etc/idmapd.conf中,去设置服务端和客户端主机的根域名Domain = domain.com (此处根据实际情况填写), 因为不确定这对测试环境是否有影响,所以采取在服务端端停掉这个服务,同时让NFS模块禁用idmapd服务的办法去解决问题。

四、操作步骤:

#本次环境采用vmware workstaion的虚拟机进行模拟,主机信息如下:

服务端:

主机名:NFSAP1

IP:192.168.137.132

操作系统版本:redhat6.5 x64

客户端:

主机名:TESTAP1

IP:192.168.137.142

操作系统版本:redhat6.5 x64

 

1、在服务端,安装NFS服务。

yum –y installnfs

vim  /etc/exports

/naslog192.168.137.*(rw,sync,no_root_squash)

:wq

chkconfig --level 2345 nfs on

service nfs start

2 、在服务端,新建文件/etc/modprobe.d/nfs.conf,加入让NFS模块去禁用idmapd服务的选项。 

echo "options nfsnfs4_disable_idmapping=1" > /etc/modprobe.d/nfs.conf 

3、在服务端,重启NFS服务

service nfs restart

4、在服务端,停止idmapd服务

service rpcidmapd stop

5、在客户端,把挂载共享目录信息加入到文件/etc/fstab文件中。

echo"192.168.137.132:/naslog         /naslog        nfs4    defaults       0 0" >>/etc/fstab

6、在客户端,使用mount命令自动挂载共享目录。

mount -a

7、在客户端,查看共享目录下的文件属主属组,已经不是nobody了。

关于NFSv4服务共享目录里的文件UID和GID显示为nobody的解决方法_第2张图片

五、测试:

测试当删除正在被调用的文件时,文件描述符是否被释放。

1、在客户端共享目录下,新建一个文件abc.txt,并用tail命令去动态查看。

关于NFSv4服务共享目录里的文件UID和GID显示为nobody的解决方法_第3张图片

2、删除这个abc.txt文件。

关于NFSv4服务共享目录里的文件UID和GID显示为nobody的解决方法_第4张图片

#下图中删除1.txt后,在当前目录自动产生的临时文件属主和属组不是nobody。

关于NFSv4服务共享目录里的文件UID和GID显示为nobody的解决方法_第5张图片

3、使用lsof命令查看文件句柄没有被占用。