Linux 下的 NFS 快速配置教程与安全策略
在 Linux 下实现文件共享有多种方式,NFS 就是其中之一。网络文件系统(NFS)协议是由 Sun MicroSystem
在 20 世纪 80 年代为了提供对共享文件的远程访问而设计和实现的。该协议采用 Client/Server 模型,通过
使用 Sun 开发的远程过程调用协议(RPC Protocol)来实现运行在一台计算机上的程序来调用在另一台远程
机器上运行的子程序,并且,它提供的外部数据表示(XDR)可以使得数据在不同平台上的计算机上进行交
换。该协议可以在 TCP 协议或者是 UDP 协议上运行,而在此基础上,NFS 在数据的传送过程中需要 RPC
命令得到确认,而且在需要的时候将会重传。1、NFS 原理
NFS 比较复杂,包括很多组件,通过特殊的协议进行交互。不同的组件在操作系统当中都使用不同的配置
文件以及状态文件。下图说明了 NFS 的主要组件及配置文件。
图 网络文件系统原理示意图
NFS 分为服务器和客户机两部分,每个主机都有自己的内核级服务:外部数据表示(XDR,eXternal Data
Representation)、远程过程调用(RPC,Remote Procedure Call)、I/O 监控程序和锁监控程序。每个主机
还有自己的用户级服务。内核级服务和用户级服务都依赖于主机的功能:NFS 客户机或者是 NFS 服务器。
当然,还要依赖于每个主机使用的不同功能的配置文件(如果是服务器,则用的是/etc/exports 配置文件,
如果是客户机,则用的是/etc/fstab 配置文件)。如果一台主机既是服务器又是客户机,那么它需要运行两
个部分的服务。
在服务器端,portmap、 mountd、 nfsd 三个监控程序将在后台运行。portmap 监控程序用来注册基于 rpc
的服务。当一个 RPC 的监控程序启动的时候,它告诉 portmap 监控程序它在哪一个端口进行侦听,并且
它在进行什么样的 RPC 服务。当一个客户机向服务器提出一个 RPC 请求,那么它就会和 portmap 监控程
序取得联系以确定 RPC 消息应该发往的端口号。而 Mountd 监控程序的功能是来读取服务器端的
/etc/exportfs 文件并且创建一个将服务器的本地文件系统导出的主机和网络列表,因而客户机的挂接
(mount)请求都被定位到 mountd 监控程序(daemon)。当验证了服务器确实具有挂接所请求的文件系统的权
限以后,mountd 为请求的挂接点返回一个文件句柄。而 nfsd 监控程序则被服务器用来处理客户机端发过
来的请求,由于服务器需要同时处理多个客户机的请求,所以在缺省情况下,在 Linux 当中将会自动启动
八个 nfsd 线程。当然,如果 NFS 服务器特别忙的时候,系统有可能根据实际情况启动三十个线程。2、