在部署过程中、文件的读写权限是比教容易出错
本博文按以下 6 个方面展开、但重点放在文件权限上、
● 原理
● /etc/exports
● 文件权限
● Server/Client 配置
● 2 个常用命令
● Troubleshoting
● 经验建议
㈠ 原理
所谓一图胜千言、有图有真相
Rocky 便随大流啦、放 2 张图片
值得注意的是、启动 NFS 之前、portmap 要先启动
㈡ /etc/exports
NFS 的部署其实很简单、分 3 步走战略:配置/etc/exports → 启动 portmap → 启动 NFS
那么、万里长征第一步:配置 /etc/exports
这个配置文件很简单、每一行最前面是要共享出来的目录
然后、是这个目录可以依照不同的权限共享给不同的主机
比如:
/tmp/rokcy 192.168.1.0/24(ro) *.fjnu.edu.com(rw,sync)
格式说明:小括号()是设置权限参数的位置、主机名与小括号是连在一起
主机名的设置主要有几个方式:
● 可以使用完整的 IP 或者 网段、例如:192.168.1.110 或 192.168.1.0/24
● 可以使用主机名称、不过这个名称要在/etc/hosts 或 DNS 里能找到、对于主机名支持通配符的使用、如* 或 ?
权限方面的常见参数有:
rw :读写;
ro :只读;
sync :同步模式,内存中数据时时写入磁盘;
async :不同步,把内存中数据定期写入磁盘中;
no_root_squash :加上这个选项后,root用户就会对共享的目录拥有至高的权限控制,就像是对本机的目录操作一样。不安全,不建议使用;
root_squash :和上面的选项对应,root用户对共享目录的权限不高,只有普通用户的权限,即限制了root;
all_squash :不管使用NFS的用户是谁,他的身份都会被限定成为一个指定的普通用户身份;
anonuid/anongid :要和root_squash 以及 all_squash一同使用,用于指定使用NFS的用户限定后的uid和gid,前提是本机的/etc/passwd中存在这个uid和gid
㈢ 文件权限
对于一个文件的写入权限、需要满足:
(1)使用者账号,亦即 UID 的相关身份
(2)NFS 服务器允许有写入的权限
(3)文件系统确实具有 w 的权限
㈣ 2 个命令
① 在Client端使用:
showmount -e IP或主机名
查看可挂载的目录
② 在Server端使用:
重新配置/etc/exports后可用:
exportfs -avr
㈤ Troubleshoting
① 用户或客户端身份权限不符
- [root@linux ~]# mount -t nfs localhost:/home/test /home/nfs
- mount: localhost:/home/test failed, reason given by server: Permission denied
[root@linux ~]# mount -t nfs localhost:/home/test /home/nfs
mount: localhost:/home/test failed, reason given by server: Permission denied
解决方案:
如果确定您的 IP 没有错误,那么请通知服务器端, 请管理员将你的 IP 加入 /etc/exports
② 服务器或客户端某些服务未启动:
- [root@linux ~]# mount -t nfs localhost:/home/test /home/nfs
- mount: RPC: Port mapper failure - RPC: Unable to receive
- [root@linux ~]# mount -t nfs localhost:/home/test /home/nfs
- mount: RPC: Program not registered
[root@linux ~]# mount -t nfs localhost:/home/test /home/nfs
mount: RPC: Port mapper failure - RPC: Unable to receive
[root@linux ~]# mount -t nfs localhost:/home/test /home/nfs
mount: RPC: Program not registered
解决方案:
要嘛就是 portmap 忘记开,要嘛就是服务器端的 nfs 忘记开!解决的方法就是去启动这两个咚咚啦!
③ 被防火墙档掉了:
这个也很容易忘记了!那就是重新设定一下您的防火墙,这包含了两部份,包括 iptables 与 TCP_Wrappers !
因为我们启动了 portmap ,这个东西有两个数据需要分享出来,一个是 port 111 需要提供出去,
因此您的 iptables 规则当中,需要开放这个 port 喔
㈥ 经验建议
如果 NFS 在高速环境下运行的话、建议加上:
mount -t nfs -o nosuid,noexec,nodev,rw,bg,soft,rsize=32768,wsize=32768