Linux 下 NFS 服务权限问题解决 Permission denied 2018-06-09 默认分类 暂无评论 823 次阅读 [TOC] ##前言 >NFS 是一种分布式文件系统,允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件。同时,NFS 协议也是开放的,基于 ONC RPC 协议的一个标准 RFC 协议。凡是实现 NFS 标准的软件(客户端或者服务端)都可以互相兼容。 使用 Linux 内置的 mount 命令就支持 NFS,仅仅运行: ```shell > mount -t nfs ${server_ip}:${server_nfs_dir} ${local_dir} ``` 即可将远程的网络目录挂载到本地,就如同操作本地文件一样。并且一般来讲 应用程序对 NFS 挂载点的访问及使用和本地目录没有区别。 ```shell 例: > mount -t nfs 10.10.2.140:/data/ABC /data/ABC ``` NFS 权限问题 假如你当前登录在客户端系统上的用户 UID 为 1000, 那么你对 NFS 文件的操作权限就对应 NFS 服务器的 UID:1000 用户的权限。 因为客户端用户对应服务端用户,变相的相当于“你在用服务器上你的身份操作NFS服务器的文件”。 因为这个原因,对于系统管理员和客户端使用人员而言, 可能对 NFS 的权限配置就省了很大的一笔功夫了。 那么问题就来了:客户端系统的用户ID和服务器的用户ID不是一一对应的,可能会出现各种异常问题,常见: ```shell > echo "abc">/data/ABC/1.txt > bash: 1.txt: Permission denied ``` ###NFS 权限问题解决思路 方案一: 对目录完全授权,各个mount客户端都可以进行读写(存在读写权限问题) 在NFS服务端执行 chmod 777 -R /data/ABC 此时对文件的读写用户都是:nobody 方案二: 使用all_squash解决权限问题,使客户端无论用什么用户链接, 都映射到NFS服务器指定用户执行。 在NFS服务端 > vi /etc/export: /opt/data 192.168.2.222(rw,anonuid=0,anongid=0,all_squash,sync) 配置如上,所有客户端用户操作 NFS 目录文件, 有服务端 uid$gid 为 0 即 root 用户的权限。 此时对文件的读写都是:root。缺陷:权限控制过于笼统,容易误操作。 方案三: 指定nfs挂载目录对应的用户,并要求nfs客户端使用同等用户ID操作, 可以做到完美的权限控制。 在NFS服务端执行(以tomcat用户举例): /etc/exports : /data/ABC *(rw,sync) useradd tomcat # uid=91(tomcat) gid=91(tomcat) groups=91(tomcat) chown tomcat:tomcat /data/ABC -R chmod 775 -R /data/ABC 在NFS客户端mount后,确保读写mount目录都是 tomcat用户 【uid=91(tomcat) gid=91(tomcat) groups=91(tomcat)】 sudo -H -u tomcat vi abc.txt 那么问题来了,客户端的tomcat用户可能uid和gid可能和服务端的不一致,该如何处理? 修改linux用户名和uid、gid 比如 1、修改用户tomcat6为tomcat 2、修改用户的uid为102修改为91. ###修改用户名 ```shell usermod -l tomcat tomcat6 groupmod -n tomcat tomcat6 ``` ###修改uid gid ```shell usermod -u 91 tomcat groupmod -g 91 tomcat ``` ###重新赋权 ```shell find / -user 102 -exec chown -h tomcat {} ; find / -group 102-exec chgrp -h tomcat {} ; ``` [参考来源 http://baijiahao.baidu.com](http://baijiahao.baidu.com/s?id=1585584419661217010&wfr=spider&for=pc "博客参考来源") 文章目录 NFS 权限问题 标签: linux 转载请注明文章来源 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭