首页 > 代码库 > 我知我见:nfs共享

我知我见:nfs共享

目录

1.NFS基础 1

1.1文件系统类型 1

1.2nfs协议 1

2.配置nfs 1

2.1说明 1

2.2服务器端 1

2.2.1安装rpcbindnfs-utils 1

2.2.2编辑配置文件 1

2.2.3启动rpcbindnfs,并设为开机自启 2

2.2.4设置防火墙,允许访问nfs 2

2.2.5创建共享目录和测试文件 2

2.3客户端配置 3

2.3.1查看服务器共享目录 3

2.3.2挂载目录并确认 3

2.3.3测试能否读写 3

3.其它 4

3.1实现客户端可读可写 4

3.2配置允许访问客户端 4

3.2.1地址或域名 4

3.2.2权限 4

4.遇到的错误 5

4.1启动顺序 5

4.2防火墙问题 5

4.3异常 6

 

1.NFS基础

1.1文件系统类型

NFS(network Filesystem)                             //网络文件系统,网络存储空间

本地文件系统:EXT3/4、SAWPNTFS                   //本地磁盘

伪文件系统:/proc、/sys                              //内存空间

/proc:

关机以后就没有这个目录,点击开机,系统被加载在内存,系统自带有些程序也会加载到内存中,就会有一个proc,内容都是内存中的内容,当关机后内存中的东西全部丢失,可以动态的查看内存信息。调优,就调这两个,比如说缓存,能否禁ping,设置后都不用重启。

1.2nfs协议

1)NFS共享协议,1980年由sun公司开发,依赖于RPC(远程过程调用)映射机制,在RHEL6系统中由rpcbind提供。rpc为一些不固定端口的服务,提供端口注册的服务,NFS的端口是随机的,RPC有固定端口111

2)起来端口时和RPC打声招呼,我起来的端口3323,客户端访问过来就问服务器的RPC,你知道nfs的端口时多少吗?然后RPC就把3323给返回去。类似于酒店提供的前台登记注册服务。

3)存取位于远程磁盘中的文档数据,对应用程序是透明的,就好像访问本地的文件一样。

2.配置nfs

2.1说明

此配置是需要共享192.168.11.139的/share目录,只允许192.168.11.140访问,并且有读写权限。

2.2服务器端

2.2.1安装rpcbindnfs-utils

[root@localhost share]# rpm -qa rpcbind                         //确保rpcbind已安装

技术分享

 

[root@beifangjid ~]# yum -y install nfs-utils                       //安装nfs-utils

2.2.2编辑配置文件

[root@localhost share]# vim /etc/exports                        //编辑主配置文件

/share           192.168.11.140(rw,no_root_squash)

技术分享

 

2.2.3启动rpcbindnfs,并设为开机自启

[root@localhost share]# service rpcbind restart                   //重启rpcbind服务

[root@localhost share]# service nfs start                        //启动nfs服务

[root@localhost /]# chkconfig rpcbind on                       //将rpcbind设为开机自启

[root@localhost /]# chkconfig nfs on                           //设置nfs开机自启

2.2.4设置防火墙,允许访问nfs

[root@localhost ~]# rpcinfo -p 192.168.11.139                   //查询所用到的端口

技术分享

 

[root@localhost share]# vim /etc/sysconfig/iptables            //修改配置,将端口放行

-A INPUT -p tcp -m multiport --dport 111,875,2049,53699,59801,37608,52588 -j ACCEPT

-A INPUT -p udp -m multiport --dport 111,875,2049,35654,32808,51114,56592 -j ACCEPT

2.2.5创建共享目录和测试文件

[root@localhost share]# mkdir /share                        //创建共享目录/share

[root@localhost share]# echo aaa > zhang.txt                 //创建测试文件zhang.txt

[root@localhost share]# mkdir /share

[root@localhost share]# echo aaa > zhang.txt

2.3客户端配置

2.3.1查看服务器共享目录

[root@localhost ~]# showmount -e 192.168.11.139

技术分享

 

2.3.2挂载目录并确认

[root@localhost ~]# mkdir zhang

[root@localhost ~]# mount 192.168.11.139:/share /root/zhang/

[root@localhost zhang]# mount | grep share

技术分享

 

注意:

挂载过来其实是个映射关系,做操作都是在服务器上做的。获得的权限都是服务器的权限。也可以理解为windows上的快捷方式,只不过是链接额服务器上的文件。客户端使用root登录系统,访问服务器的NFS,则会以root的身份访问NFS共享。但是NFS为了安全考虑,默认会将root用户降权为普通匿名账户。如果客户端系统使用tom登录,访问服务器的NFS,则会以tom身份访问NFS共享。所以不需要用户名。比如以张三普通用户访问的话,就看对方的目录权限设 置,要是777的话,张三就有权限读写。相当于调用你当前客户端的用户名来访问服务器端,服务器端不一定有对应的用户名。这时候就是看目录的权限,如果777,那就可以,任何人都可以。即使以root用户访问,但是你进入到common里边就降级了。降为nfsnobady用户了。

[root@localhost zhang]# ls

[root@localhost zhang]# cat zhang.txt

技术分享

 

2.3.3测试能否读写

[root@localhost zhang]# echo bbb > t.txt

[root@localhost zhang]# ls

技术分享

 

3.其它

3.1实现客户端可读可写

1)export本身已经设置好了,括弧里边是rw权限

2)修改目录本身的权限777,这样所有用户就都可读可写了

3)若是只想仅让root可写,修改exports在括弧里边加no_root_squash

3.2配置允许访问客户端

配置文件/etc/exports

3.2.1地址或域名

IP地址:192.168.11.140                          //单个ip可以访问

网段地址:192.168.11.0/24 或 192.168.11.*         //某个网段可以访问

所有主机:*                                    //所有主机均可访问

单个域:*.tarena.com                            //单个域可以访问

主机名:pc140.haha.com                          //主机名

3.2.2权限

rw、ro                                         //可读可写、只读

sync、async                                     //同步写、异步写

no_root_squash                                  //保留来自客户端的root权限

all_squash                                       //客户端权限都降为nfsnobody

sync、async                                     //同步写,异步写

root_squash                                     //客户端使用root用户访问时,将

                                                root用户映射为nobody用户

all_squash                                    //不管登录NFS主机的用户是什

                                          么都会被重新设定为匿名用户

注意:1)异步写,写文件的时候,先写到缓存,一点一点的放到缓存,然后缓存写到硬盘里边,这个会快一些。你只会关心自己传完了没有,不会考虑到底接收了没有。

2)可以使用man exports 搜索example,并且查看配置参考。以下是参考。

       # sample /etc/exports file

       /               master(rw) trusty(rw,no_root_squash)

       /projects       proj*.local.domain(rw)

       /usr            *.local.domain(ro) @trusted(rw)

       /home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)

       /pub            *(ro,insecure,all_squash)

       /srv/www        -sync,rw server @trusted @external(ro)

       /foo            2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)

/share            192.168.0.0/24(ro)              //i网段(权限)

/abc             192.168.0.1(rw) 192.168.0.2(ro)    //ip地址(权限) ip地址(权限)

/dvd             *(ro)                          //所有都是ro权限

/qq              *.example.com                  //主机名

/share           *(rw,no_root_squash

注意:降权后为nfsnobady用户

[root@localhost /]# cat /etc/passwd | grep nfs

技术分享

 

查看默认权限

技术分享

 

4.遇到的错误

4.1启动顺序

启动失败,得先启动rpcbind,rpcbind默认应该安装,没有的话安装上就好了

技术分享

 

技术分享

 

4.2防火墙问题

查看的时候老是报错,说没有路由,我Ping了一下,结果能通。然后我查看配置文件的时候发现,只允许192.168.1.192访问。所以我在想是不是这个原因,修改过来之后,还是不行。

技术分享

 

[root@localhost ~]# rpcinfo -p 192.168.11.139

防火墙的问题,放行下边的端口,或者停用防火墙就可以了

技术分享

 

 

技术分享

 

技术分享

 

4.3异常

我将exports文件中的()里边加了no_root_squash然后,重启服务后,在客户端访问就出现了问题,只要一进去挂载目录,就像死机那样的感觉,然后只能关机,关机的时候也不顺利,很久才关的机。关机之后可以了。

技术分享

 

4.4挂不上

技术分享

 

搞半天原来是自己的ip写错了

但网友说是需要加insecure在括号中,为的也是解决这个问题,说是有大于1024端口的话需要加,但是我不加也可以挂上

5.案例

5.1属主和属组降权为nobody

   公司下沙服务器空间不够用了,从华东基地共享过来的一个磁盘,刚开始把传不过去东西,然后把原始目录权限设置成了777,就可以了。

但是挂上去之后权限就变成了nobody。

技术分享

 

这个是因为默认权限设置里有一项root_squash,打开这一项,当客户端用root访问该共享目录时,就会将root用户映射成nobody用户。开始以为这会有什么问题,但是做了软链接之后发现可以正常访问。

技术分享

 

 


本文出自 “庭中有奇树” 博客,请务必保留此出处http://zhangdl.blog.51cto.com/11050780/1881875

我知我见:nfs共享