NFS是sun公司开发的网络文件系统,可实现在异构网络上共享和装配远程文件系统。

NFS工作原理简介

NFS并不是单独存在的,它和另外2个模块共同存在。包括NFS在内,这三个模块分别是NFS,RPC,PORTMAP。
NFS只负责将数据通过以文件系统的方式共享出去,并进行登录管理和权限管理,并不负责数据的传输,而数据的传输则有RPC来完成。试想远程客户端在进行链接的时候需要知道哪个端口可用,以便将可用的端口用于NFS数据传输(NFS的数据传输方式有端口来完成),而负责维护可用端口与远程主机的映射关系则是有PORTMAP的完成的。

RPC:远程过程调用协议,RPC跨越了传输层和应用层
portmap进程的主要功能是把RPC程序号转化为Internet的端口号。
portmap进程一般使用TCP/UDP的111端口
想要深入了解RPC:见

在Linux Kernel 2.6.32中,portmap已经被rpcbind代替了,仔细查看安装信息就会发现,执行命令yum install portmap时安装的就是rpcbind.

工作流程:

(1)客户端向NFS服务器提交RPC请求,并明确访问NFS服务,并告知其具体的读写操作。

(2)RPC查找端口映射表,并根据客户端请求,返回相应的结果。

(3)客户端获取指定的NFS服务器端口后,将直接与NFS进程进行读写操作。

nfs 默认端口号是多少_nfs 默认端口号是多少

NFS服务器配置

安装

#yum install -y nfs*
服务器配置
#man exports
#vim /etc/exports

/tmp/share  192.168.173.0/24(rw,sync,root_squash)

【NFS共享的常用参数】

  • ro 只读访问
  • rw 读写访问
  • sync 同步写入硬盘
  • async 暂存内存
  • secure NFS通过1024以下的安全TCP/IP端口发送
  • insecure NFS通过1024以上的端口发送
  • wdelay 多个用户对共享目录进行写操作时,则按组写入数据(默认)
  • no_wdelay 多个用户对共享目录进行写操作时,则立即写入数据
  • hide 不共享其子目录
  • no_hide 共享其子目录
  • subtree_check 强制NFS检查父目录的权限
  • no_subtree_check 不检查父目录权限
  • all_squash 任何访问者,都转为 匿名yong
  • root_squash root用户访问此目录, 映射成如anonymous用户一样的权限(默认)
  • no_root_squash root用户访问此目录,具有root操作权限
  • anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID
  • anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID

如果修改了/etc/exports文件后不需要重新激活nfs,只要重新扫描一次/etc/exports文件,并且重新将设定加载即可:

#exportfs -rv

  1. -a:全部挂载(或卸载)/etc/exports文件内的设定。
  2. -r:重新挂载/etc/exports中的设置,此外同步更新/etc/exports及/var/lib/nfs/xtab中的内容。
  3. -u:卸载某一目录。
  4. -v:在export时将共享的目录显示在屏幕上。

重启NFS服务

#service nfs restart
#chkconfig nfs on

ps:/var/lib/nfs/etab里面可以查看每个目录的分享权

NFS客户端配置(Autofs)

服务器分享目录:/tmp/share
客户端挂载目录:/tmp/share
1.手动挂载

#mkdir /tmp/test
#mount -t nfs 192.168.173.140:/tmp/share /tmp/test

2.直接的自动挂载
mount是用来挂载文件系统的,可以在系统启动的时候挂载也可以在系统启动后挂载。对于本地固定设备,如硬盘可以使用mount挂载;而光盘、软盘、NFS、SMB等文件系统具有动态性,即需要的时候才有必要挂载。光驱和软盘我们一般知道什么时候需要挂载,但NFS和SMB共享等就不一定知道了,即我们一般不能及时知道NFS共享和SMB什么时候可以挂载。而autofs服务就提供这种功能,好像windows中的光驱自动打开功能,能够及时挂载动态加载的文件系统。免去我们手动载在麻烦。要实现光驱,软盘等的动态自动挂载,需要进行相关的配置。

autofs 能够自动挂载卸载nfs和文件系统,并且在空闲的时候能够关闭nfs连接,降低系统负载。

#yum install -y autofs
#service autofs stop
首先修改全局的配置文件
#vim /etc/auto.master

/-  /etc/auto.nfs

#vim /etc/auto.nfs

/tmp/test   192.168.173.140:/tmp/share

#service autofs restart

这里的/tmp/test,必须是存在的。

nfs 默认端口号是多少_iptables_02

3.间接自动挂载

#yum install -y autofs
#service autofs stop
#vim /etc/auto.master

/tmp/test   /etc/auto.nfs --timeout=60

/tmp/share是要挂载的本地目录,我们在向NFS服务器发送请求信号时,一定要在这个目录下面进行操作,否则是无效的。
/etc/auto.nfs: 是一个配置 NFS服务器共享文件的路径,及本地在/mnt/nfs目录中要与远程共享文件挂载的目录及权限,在auto.nfs文件中还要详细说明。
–timeout=60:指NFS客户端在多久没有向NFS服务器请求数据时断开挂载连接。

#vim /etc/auto.nfs

server  192.168.173.140:/tmp/share

#service autofs restart

server : 它是一个本地目录,我们不需要创建它,用于挂载远程共享文件192.168.20.6:/public,在我们想要使用远程共享文件/public时,只要在本地目录/mnt/nfs下键入:cd server 系统就会自动挂载到远程共享目录:192.168.20.6:/public,我们就可以正常使用里面的共享文件了 ,在到达超时时间时就会自动卸载。

nfs 默认端口号是多少_autofs_03

NFS安全配置

1.iptables
NFS启动时会随机启动多个端口并向RPC注册,这样如果使用iptables对NFS端口进行限制就会有点麻烦,可以更改配置文件固定NFS服务相关端口。

#rpcinfo –p #查看本地rpc进程
#vim /etc/sysconfig/nfs #NFS相关端口的配置文件
打开对应端口(也可以自己修改)

RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662

然后编写iptables的规则
如:

#iptables -A INPUT -s 192.168.173.0/24 -p tcp –dport 111 -j ACCEPT
#iptables -A INPUT -s 192.168.1.173.0/24 -p udp –dport 111 -j ACCEPT
#iptables -A INPUT -s 192.168.1.173.0/24 -p tcp –dport 2049 -j ACCEPT
#iptables -A INPUT -s 192.168.1.173.0/24 -p udp –dport 2049 -j ACCEPT
保存
#service iptables save
#service ipatbles restart

2.selinux

nfs 默认端口号是多少_iptables_04


可根据需要自己打开,如:

#setsebool -P samba_share_nfs on