nfs权限问题

配置服务器

创建需要共享的文件夹

mkdir doc_share

编辑exports文件

vim /etc/exports
/doc_share 192.168.2.131/255.255.255.0(rw,sync)

重启相关服务

/etc/init.d/portmap restart
/etc/init.d/nfs restart

设置自启动

chkconfig nfs on
chkconfig portmap on

安全设置

/etc/init.d/iptables stop
chkconfig iptables off
system-config-selinux

检查配置

[root@rac1 /]# exportfs -rv
exporting 192.168.2.131/255.255.255.0:/doc_share

试着在本机看能否加载

mount 192.168.2.131:/doc_share /mnt

[root@rac1 doc_share]# echo aa>aa.txt
[root@rac1 doc_share]# ls
aa.txt
[root@rac1 /]# cd /mnt
[root@rac1 mnt]# ls
aa.txt

客户端测试

手工mount:

mount -o nolock 192.168.2.131:/doc_share /mnt
这个时候可以看到在节点1上内容了.
[root@rac2 mnt]# cd /mnt
[root@rac2 mnt]# ls
aa.txt

自动mount:

编辑fstab文件,实现开机自动挂载
mount -t nfs IP:/目录 挂载到的目录
(此为临时挂载)
如:mount -t nfs 192.168.0.9:/doc /doc
vim /etc/fstab 添加如下内容
192.168.2.131:/doc_share /mnt nfs defaults 0 0

相关的一些命令:

showmout命令对于NFS的操作和查错有很大的帮助.

showmout

-a:这个参数是一般在NFS ERVER上使用,是用来显示已经mount上本机nfs目录的cline机器.
-e:显示指定的NFS SERVER上export出来的目录.
例如:
showmount -e 192.168.0.30

Export list for localhost:
/tmp *
/home/linux *.linux.org

/home/public (everyone)
/home/test 192.168.0.100

exportfs命令:

如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs命令来使改动立刻生效,该命令格式如下:
exportfs
[-aruv]
-a :全部mount或者unmount /etc/exports中的内容
-r :重新mount /etc/exports中分享出来的目录
-u :umount 目录
-v :在 export 的时候,将详细的信息输出到屏幕上.

具体例子:

[root @test root]# exportfs -rv
exporting
192.168.0.100:/home/test
exporting 192.168.0.*:/home/public
exporting
*.the9.com:/home/linux
exporting *:/home/public
exporting *:/tmp

reexporting 192.168.0.100:/home/test to kernel

exportfs -au 全部都卸载了

其他

今天在机器上配置NFS文件系统,在/etc/exports中加入以下信息:/testfs 10.0.0.0/8(rw)
重启NFS服务以后,在客户机通过mount -o rw -t nfs 10.214.54.29:/testfs /rd1命令将网络文件mount到本地。执行完成之后,目录是可以访问了,但无法写入。感觉有点奇怪,明明在命令中指定可以写入了。于是到网上搜索资料,发现exports目录权限中,有这么一个参数no_root_squash。其作用是:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有root的权限!。默认情况使用的是相反参数root_squash:在登入 NFS 主机使用分享之目录的使用者如果是 root,那么这个使用者的权限将被压缩成为匿名使用者,通常他的UID与GID都会变成 nobody 那个身份。
因为我的客户端是使用root登录的,自然权限被压缩为nobody了,难怪无法写入。将配置信息改为:/testfs 10.0.0.0/8(rw,no_root_squash)
据说有点不安全,但问题是解决了。

Exports文件中可以设定的参数主要有以下这些:

Ro 该主机对该共享目录有只读权限

Rw 该主机对该共享目录有读写权限

Root_squash 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户

No_root_squash 客户机用root访问该共享文件夹时,不映射root用户

All_squash 客户机上的任何用户访问该共享目录时都映射成匿名用户

Anonuid 将客户机上的用户映射成指定的本地用户ID的用户

Anongid 将客户机上的用户映射成属于指定的本地用户组ID

Sync 资料同步写入到内存与硬盘中

Async 资料会先暂存于内存中,而非直接写入硬盘

Insecure 允许从这台机器过来的非授权访问

例如可以编辑/etc/exports为:

/ user01(rw) user02(rw,no_root_squash) 表示共享服务器上的根目录(/)只有user01和user02两台主机可以访问,且有读写权限;user01主机用root用户身份访问时,将客户机的root用户映射成服务器上的匿名用户(root_squash,该参数为缺省参数),相当于在服务器使用nobody用户访问目录;user02主机用root用户身份访问该共享目录时,不映射root用户(no_root_squash),即相当于在服务器上用root身份访问该目录

/root/share/ 192.168.1.2(rw,insecure,sync,all_squash) 表示共享服务器上的/root/share/目录只有192.168.1.2主机可以访问,且有读写权限;此主机用任何身份访问时,将客户机的用户都映射成服务器上的匿名用户(all_squash),相当于在服务器上用nobody用户访问该目录(若客户机要在该共享目录上保存文件(即写操作),则服务器上的nobody用户对该目录必须有写的权限)

/home/ylw/ *.test.com (rw,insecure,sync,all_squash) 表示共享/home/ylw/目录,*.test.com域中所有的主机都可以访问该目录,且有读写权限

/home/share/ .test.com (ro,sync,all_squash,anonuid=zh3,anongid=wa4) 表示共享目录/home/share/,*.test.com域中的所有主机都可以访问,但只有只读的权限,所有用户都映射成服务器上的uid为zh3、gid为wa4的用户

设定好后可以使用以下命令启动NFS: service nfs restart


nfs权限问题
https://ajasonwang.github.io/2016/10/26/nfs-permission/
作者
Wang Jia
发布于
2016年10月26日
许可协议