第17章网络文件系统(NFS)
NFS(网络文件系统)的存在是为了允许主机在远程系统上安装分区并像使用本地文件系统一样使用它们。这允许在中央位置组织文件,同时提供允许授权用户连续访问文件的功能。
当前正在使用两个版本的NFS。已有数年的NFS版本2(NFSv2)受到各种操作系统的广泛支持。NFS版本3(NFSv3)具有更多功能,包括可变文件句柄大小和更好的错误报告。Red Hat Linux支持NFSv2和NFSv3,并且在与支持它的服务器连接时默认使用NFSv3。
本章将重点讨论NFS版本2,尽管所讨论的许多概念也适用于版本3。此外,将仅提供基本的NFS概念和补充信息。有关NFS的客户端或服务器机器的配置和操作的具体说明,请参阅本章网络文件系统(NFS) 中正式版Red Hat Linux定制指南。
方法
Linux使用内核级支持和连续运行的守护进程的组合来提供NFS文件共享,但是,必须在Linux内核中启用NFS支持才能起作用。NFS使用 远程过程调用(RPC)在客户端和服务器之间路由请求,这意味着 必须在适当的运行级别启用和激活端口映射服务,才能进行NFS通信。使用portmap,各种其他过程可确保允许特定的NFS连接,并且可以继续进行而不会出现错误:
-
rpc.mountd —运行中的进程,该进程从NFS客户端接收安装请求,并检查其是否与当前导出的文件系统匹配。
-
rpc.nfsd-实现NFS服务的用户级部分的过程。它与Linux内核一起使用,可以满足NFS客户端的动态需求,例如为NFS客户端提供使用的其他服务器线程。
-
rpc.lockd —现代内核不需要的守护程序。NFS文件锁定现在由内核完成。它是nfs-utils软件包中附带的,用于较早版本的内核(默认情况下不包含此功能)的用户。
-
rpc.statd-实现 网络状态监视器(NSM) RPC协议。当重新启动NFS服务器而不会使其正常停机时,这将提供重新启动通知。
-
rpc.rquotad —一个RPC服务器,为远程用户提供用户配额信息。
NFS服务并非所有这些程序都是必需的。唯一必须启用的服务是rpc.mountd, rpc.nfsd和portmap。其他守护程序提供其他功能,仅在服务器环境需要它们时才应使用。
NFS版本2使用用户数据报协议(UDP)在客户端和服务器之间提供无状态网络连接。NFS版本3可以使用通过IP运行的UDP或TCP。无状态UDP连接最大程度地减少了网络流量,因为在授权客户端访问共享卷之后,NFS服务器会向客户端发送cookie。该cookie是存储在服务器端的随机值,并与来自客户端的RPC请求一起传递。可以重新启动NFS服务器,而不会影响客户端,并且cookie将保持不变。
NFS仅在客户端系统尝试挂载远程文件系统时执行身份验证。为了限制访问,NFS服务器首先使用TCP包装器。TCP包装程序读取/etc/hosts.allow 和/etc/hosts.deny文件,以确定是否应允许或禁止特定客户端访问NFS服务器。有关使用TCP包装器配置访问控制的更多信息,请参见第8章。
在允许客户机经过TCP包装程序之后,NFS服务器将参考其配置文件/ etc / exports,以确定客户机是否具有足够的特权来挂载任何导出的文件系统。授予访问权限后,所有文件和目录操作都将使用远程过程调用发送到服务器。
警告 | |
---|---|
NFS安装特权专门授予客户端,而不是用户。如果您授予客户端计算机对导出的文件系统的访问权限,则该计算机的任何用户都将有权访问数据。 配置/ etc / exports文件时,在授予远程主机读写权限(rw)时要格外小心。 |
NFS和端口图
NFS依靠远程过程调用(RPC)起作用。 需要portmap才能将RPC请求映射到正确的服务。RPC进程在启动时会通知portmap,显示正在监视的端口号以及期望使用的RPC程序号。然后,客户端系统使用特定的RPC程序号与服务器上的端口映射联系 。然后,portmap将客户端重定向到正确的端口号,以与其预期的服务进行通信。
由于基于RPC的服务依赖于portmap来与传入的客户端请求建立所有连接,因此 portmap必须在任何这些服务启动之前可用。如果由于某种原因,portmap 服务意外退出,请重新启动portmap并在启动时运行所有服务。
该端口映射服务可以与主机访问文件(使用文件/etc/hosts.allow和 /etc/hosts.deny中哪些远程系统允许使用基于RPC的服务,你的机器)来控制。有关更多信息,请参见第8章。端口映射的访问控制规则将影响所有基于RPC的服务。或者,您可以指定每个NFS RPC守护程序受特定访问控制规则的影响。rpc.mountd和rpc.statd的手册页 包含有关这些规则的精确语法的信息。
端口图状态
由于portmap在RPC服务和用于与之通信的端口号之间进行协调,因此在进行故障排除时,能够使用portmap获取当前RPC服务的图片非常有用。的 rpcinfo将命令显示与它的端口号,RPC程序编号,版本和IP协议类型(TCP或UDP)的每个基于RPC的服务。
要确保为portmap启用了正确的基于NFS RPC的服务 ,rpcinfo -p可能有用:
![]() |
的-p选项探测指定主机或默认的端口映射,如果没有特定的主机列出为localhost。其他选项可从 rpcinfo手册页获得。
从上面的输出中,可以看到各种NFS服务正在运行。如果其中一个NFS服务无法正确启动,则 portmap将无法将来自该服务的客户端的RPC请求映射到正确的端口。在许多情况下,以root身份重新启动NFS(/ sbin / service nfs restart)将导致这些服务正确向portmap注册 并开始工作。