环境背景
服务器版本:Centos6 nfsv4
客户端版本:Centos6或者Centos7 挂载版本为nfsv4
问题现象
客户端挂载时候选择nfsv4版本或者默认是nfsv4版本时,挂载后非root用户创建的文件属主为nobody,这样导致某些服务普通用户读写文件会有权限问题
如何解决
方法1:修改文件权限为777,这样的话所有用户都有读写权限,但有可能导致不安全
方法2:修改客户端挂载版本为nfsv3,此方法未测试可行性
方法3:服务端系统使用centos7,在centos7之后nfs模块/sys/module/nfsd/parameters/nfs4_disable_idmapping的值默认为Y
方法4:在服务端系统需要使用centos6,客户端挂载版本使用nfsv4时,可尝试做如下处理:
- 修改服务端模块的idmap值
echo Y > /sys/module/nfsd/parameters/nfs4_disable_idmapping
- 增加文件/etc/modprobe.d/nfs.conf,添加如下内容
options nfs nfs4_disable_idmapping=1 options nfsd nfs4_disable_idmapping=1
- 第三步:重启rpcbind,nfs服务
方法5:尝试在客户端和服务端创建相同的用户/组,并且分配相同的uid和gid
方法6:配置idmapd服务,配置文件/etc/idmapd.conf,还未测试可行性
关于此问题说明
因为nfsv4使用idmapd来映射客户端和服务端用户名,如果客户端与服务端文件属主不一致或者服务端无此用户那么就会映射成nobody。最后centos7上的服务端idmapd模块默认是关闭的,所以影响范围应该只有centos6的nfsv4服务端上。