程志辉博客 - 一个伪文艺青年
贵在坚持,难在坚持,成在坚持!
程志辉

什么是NFS?

NFS是Network File System的缩写,中文称为网络文件系统,它的主要功能是通过网络(一个局域网)让不同的主机系统之间可以共享文件或目录,NFS的客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器共享的数据目录挂载到NFS客户端本地系统中(就是某一个关在点下),从客户端本地看,NFS服务器端共享目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。类似于Windows系统的网络共享,需要注意的是NFS服务只能用于Linux之间

简单点:网络文件系统(服务),为Linux客户机提供文件和目录资源共享!

NFS工作原理

前提条件:同一局域网里两台Linux主机设备均安装好了RPC以及NFS程序

实验环境

VMware 、Red Hat Enterprise Linux 6

由于NFS服务是基于Linux系统的,两台设备就能完成此次试验。所以我利用VMware软件装了一个rhel6,并通过克隆的方式生成两台rhel并命名为node1,node2。

NFS服务配置要求

某公司新购一台服务器,服务器上已安装Linux操作系统,现要求将服务器配置成NFS服务器,实现文件共享服务,公司网络的网段为192.168.42.0/24。具体共享要求如下:

1.服务器端创建目录/nfsczh1,并在其中创建文件rodir.txt,再创建目录/nfsczh2,并在其中创建文件rwdir.txt。

2.共享/nfsczh1目录,允许所有的客户端访问该目录,但只具有读取权限。

3.共享/nfsczh2目录,只允许192.168.42.0/24网段的客户端访问,并具有读写权限。

4.在客户端查看NFS服务器上发布的共享目录。

5.在客户端挂载NFS服务器上发布的/nfsczh1目录到本地的/nfslocal1目录下,并查看文件列表。

6.在客户端挂载NFS服务器上发布的/nfsczh2目录到本地的/nfslocal2目录下,并在其中创建文件wtest.file

实验操作

1.Linux主机需要修改网卡标识为eth0
2.Linux主机需要修改主机名
3.Linux主机需要关闭和禁用防火墙
4.Linux主机需要禁用Selinux

开发环境中为了安全起见是会开启防火墙的,由于防火墙策略这块知识掌握过少,为了方便本篇文章实验将直接把防火墙进行关闭。以上4步在上篇文章Linux——DHCP服务中操作过一遍,所以不进行二次演示。

经过测试,实验机器的网卡设备,主机名,禁用Selinux,禁用防火墙均已配置成功。

小技巧——一般服务配置套路

在服务开始之前需要安利一下一般服务配置的套路,感谢浩哥的总结~

1.检查服务端软件是否安装(如果没有安装,通过YUM安装)

2.查看服务软件包所生成的重要文件和目录(配置文件、服务管理脚本程序、服务主程序)

3.按需求编辑和修改服务对应配置文件

4.启动|重启服务(以下方法二选一即可)

5.客户端访问测试

6.测试成功,设置服务端对应服务功能开机自动启动

正式开始配置NFS服务

1.查看 NFS 服务相关软件是否安装

# rpm -qa | grep -E "rpcbind|nfs-utils"

经测试NFS相关的两个服务 rpcbind 以及 nfs-utils 服务在Linux设备中都默认安装了,所以我们不需要额外的去配置YUM源仓库,且不需要去安装这两项服务。也许你会看不懂上面的这条命名,那你可以尝试用下面这种配置方法实现的功能都是一样的,查询服务是否安装,区别在于简洁以及高效!

# rpm -qa | grep "rpcbind"
# rpm -qa | grep "nfs-utils"

2.查看NFS服务软件包所生成的重要文件和目录

# rpm -ql rpcbind
# rpm -ql nfs-utils

有点晕,还有一部分没有截图完,那么就记住几个重要的吧!

3.NFS服务端配置

# vim /etc/exports

敲重点!这个就是NFS服务端的配置文件了!更懵逼的是你会发现在NFS服务软件包所生成的重要文件和目录中找不到TA的身影,那么就又可以学习一个命令,来找找TA属于哪一个RPM包~

# rpm -qf /etc/exports

回到正题还是进行NFS服务端的配置吧

服务器端创建目录/nfsczh1,并在其中创建文件rodir.txt,再创建目录/nfsczh2,并在其中创建文件rwdir.txt

# mkdir /nfsczh1
# touch /nfsczh1/rodir.txt 
# mkdir /nfsczh2
# touch /nfsczh2/rwdir.txt 

共享/nfsczh1目录,允许所有的客户端访问该目录,但只具有读取权限

共享/nfsczh2目录,只允许192.168.42.0/24网段的客户端访问,并具有读写权限

打开配置文件,开搞!!!

# vim /etc/exports

打开你会发现配置文件是一个空白文件,所以在编辑器得注意命令是否敲得正确,不放心的话还是老老实实用TAB键进行代码的补齐

配置文件就两行即可满足需求。*星号/通配符,代表所有

第二行还有其他两种写法,统统都给大家列出来,方便学习

/nfsczh2    192.168.42.0/24(rw)

/nfsczh2    192.168.42.0/255.255.255.0(rw)

每一行代表着一个配置,最开始写需要共享的文件地址,紧接着空格后面写相对应的IP地址,IP地址后面括号填写其赋予的权限(r读,w写,x执行)。不知道大家通过我的描述能不能够理解,不理解的话评论区提问~

最后的最后保存退出,然后启动两个服务 rpcbind / nfs 启动有先后顺序!先启动rpcbind后启动nfs,不懂为什么就在翻到上面看看nfs的工作原理,实在不行那就直接记在脑海里吧~

# service rpcbind restart
# service nfs restart
# service rpcbind status
# service nfs status

习惯了懒惰嘛~直接给TA重启(停止->启动),rpcbind很顺利,因为实验环境中他默认是启动状态,nfs就不那么顺利了。关闭这块显示的是失败,因为实验环境中默认他是关闭的,重启得先停止,关闭状态怎么去停止呢,自然就显示失败了,不过重启环节分为停止/启动,后面启动正常那也就无所谓了~

就这样,nfs客户端的配置就结束了,很简单吧?再来学习一下几个技巧~

查看NFS相关服务进程是否运行

# ps -ef | grep rpcbind
# ps -es | grep nfsd

仔细观察一下第二列,进程号与之前我们查看服务运行状态的进程号是对应的

查看NFS相关服务端口监听信息

# rpcinfo -p

很多很多很多,脑瓜疼!!!值得注意的是第三列和第四列,代表着端口以及端口号。一般来说端口分为UDP、TCP、HTTP好像扯远了,本篇我们只需要关注前面两个,深入的话自行去啃啃网络基础知识。前面提到过,在开发环境中防火墙肯定是要用上的,只不过我太菜了嘛,直接关掉了防火墙。配置的话把相对应的端口以及端口号进行防火墙的策略配置就好。

写到这里又想到了一个小的知识点,同时也很重要,重启一下服务在运行上面的代码看看,你会发现每一次的端口号都不一样,原因肯定是为了安全。这里其实我还是有一些疑惑的,不知道RPC服务器后台到底干了什么,能够在不人工输入端口号的情况下直接与另外一台Linux服务器上的PRC服务进行匹配,或者说咋连人工的确认也没有.....

所以还有一个技巧,那就是把端口号进行固定,不让TA每次重启后都更变

vim    /etc/sysconfig/nfs

没错就是这个文件,里面每一行都用#开头代表着注释掉了,我们找找自己需要的东西然后去掉注释(删除开头的#),这么多我其实也看不懂啦~等号后面一串数字,那这行差不多就能算是一个端口以及端口号了,我们把它取消注释,然后改掉等号后面的数字(端口号),这样的话就可以固定相应的端口以及端口号了。好像有些多,那为了试验就来五个吧。

# grep -v ^# /etc/sysconfig/nfs

为了方便查看,第一时间应该想到过滤,因为文件里面都是注释行,意味着全部都不生效我们需要固定端口意味着没有注释的都是执行的(这句话好像怪怪的,你应该能懂)。那我们过滤一下把非#号开头的提出去不就行了嘛~

嗯,就来五个,第二第三个一样的端口号因为他是同一个端口啊

重启服务,然后看看进程号固定了没有?

# service rpcbind restart
# service nfs restart
# rpcinfo -p

嘻嘻嘻,成功~NFS服务的端口就这样固定了~配置文件里面还有好多,有需要的话你可以把所有端口都进行一个固定。菜鸟归菜鸟,但是谁还没有一个好奇的心呢~所以结合万能的BaiDu我们在来倒腾一下防火墙的策略吧。

启动防火墙服务,然后盘它!!!

# service iptables start
# iptables -n -L

后面一条命令是用来查看防火墙策略的,这些都是默认的策略。看不懂看不懂,清空一下吧(此时清空的命令忘记了,容我翻翻笔记)

临时清空防火墙策略

# iptables -F

现在开始正式的配置NFS相关端口,我的端口不一定跟你的一样,你得参考一下你自己的设置(主)或者在搭配NFS相关服务端口监听状况在看看

还是得上图,直观一点点嘛~分析一下,主要就是111端口,2049端口还有自己手动固定的42001-42003端口

添加 iptables 规则

# iptables -A INPUT -s 192.168.42.0/24 -p tcp --dport 111 -j ACCEPT
# iptables -A INPUT -s 192.168.42.0/24 -p udp --dport 111 -j ACCEPT
# iptables -A INPUT -s 192.168.42.0/24 -p tcp --dport 2049 -j ACCEPT
# iptables -A INPUT -s 192.168.42.0/24 -p udp --dport 2049 -j ACCEPT
# iptables -A INPUT -s 192.168.42.0/24 -p tcp --dport 42001:42003 -j ACCEPT
# iptables -A INPUT -s 192.168.42.0/24 -p tcp --dport 42001:42004 -j ACCEPT

保存规则

# service iptables save

这样看上去防火墙好像不是很难了,配置一下tcp/udp以及相对应的端口号,多个连续端口之间可以间接写-->第一个端口号:最后一个端口号。dport前面是两个杠,查看一下没什么问题就进行一个保存

4.NFS客户端配置

谢天谢地,终于到了NFS客户端的配置,只能怪自己太能折腾了

在客户端查看NFS服务器上发布的共享目录

# showmount -e 192.168.42.5

执行命令,看到自己共享的两个文件夹悬着的心终于可以放下来了~

得声明一下下!node1我们防火墙是开启的,且配置了防火墙策略,不过node2偷个懒吧,我们没有进行配置,需要配置的话还是跟上面一样,不过把上面的客户端IP地址改为服务端IP地址就好了~

如果做到这一步,你没有看到你共享的文件夹,那么就说明你NFS服务端的配置出现了问题,解决方法大致有三种:1.自己参照前面的文档反复看看。2.评论区问问我看看?3.问问别人吧再或者放弃吧,哈哈哈哈哈

客户端进行NFS挂载

在客户端挂载NFS服务器上发布的/nfsczh1目录到本地的/nfslocal1目录下,并查看文件列表

在客户端挂载NFS服务器上发布的/nfsczh2目录到本地的/nfslocal2目录下,并在其中创建文件wtest.file

挂载是将服务端的内容挂载到本地,所以创建目录是必要的

# mkdir /nfslocal1
# mkdir /nfslocal2

然后就可以开始挂载了

# mount.nfs 192.168.42.5:/nfsczh1 /nfslocal1
# mount.nfs 192.168.42.5:/nfsczh2 /nfslocal2

理解一下命令。挂载方式nfs 从哪里挂载?挂在到哪里?这样应该就不会忘记了

接着再来看看挂载好了嘛?

# df -hT

好了好了,测试一下nfslocal1是不是只能读不能写?

# ls /nfslocal1
# touch /nfslocal1/file
# echo "I am GouGe" > /nfslocal1/gouge.txt

嗯,心动的感觉,只读不能写就对了!

再来看看nfslocal2是不是能读又能写~

# ls /nfslocal2
# touch /nfslocal2/file

糟糕,是心累的感觉,分析一下分析一下为什么呢?

NFS服务配置的时候确实给的是R读W写权限哇!!其实问题在于node1共享的文件夹属性上。

NFS服务中,node2对node1本地的文件夹进行一个操作,那自然得有文件夹的权限啊,不然作为一个外来者一个匿名用户,Linux安全级别相对会高一些些,自然是不会让TA进行写的操作的,所以对node1配置一下

# ll -d /nfsczh2
# chmod o+w /nfsczh2
# ll -d /nfsczh2

这样操作一下,其他用户对文件写的操作就有了~

# touch /nfslocal2/wtest.file
# echo "I love GouGe" > rwdir.txt
# ls /nfslocal2

创建成功,如果你不放心的话,那就去node1看看呗~

总结一下

  到此关于Linux——NFS服务配置的教程就结束了,对NFS固定端口的配置进行了一个倒腾收获很多~代码还是得多敲,实验还是得反复做!最开始的初始化配置由于篇幅问题没有过多描述,可以去参考一下我写的Linux——DHCP服务。最后的最后感谢浩哥的指导。本文由程志辉原创独自编辑,难免会出现一些错误,欢迎大家在评论区指出,同时转载请留下版权!

2019年04月15日
  • wys 码盲路过。多做实验,开发一套自己的网络文件管理系统吧。
  • 程志辉 作者 回复 wys 嘿嘿 将学习到的知识运用起来~
  • 小明同学 大……大佬
  • 心静 看起来很高端的文章啊
Icefox Theme . 鄂ICP备16001608号-1