目录
1.NFS基础 1
1.1文件系统类型 1
1.2nfs协议 1
2.配置nfs 1
2.1说明 1
2.2服务器端 1
2.2.1安装rpcbind和nfs-utils 1
2.2.2编辑配置文件 1
2.2.3启动rpcbind和nfs,并设为开机自启 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、SAWP、NTFS //本地磁盘
伪文件系统:/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安装rpcbind和nfs-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启动rpcbind和nfs,并设为开机自启
[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用户。开始以为这会有什么问题,但是做了软链接之后发现可以正常访问。