1、第第2626章章 网络硬盘网络硬盘NFSNFSNFS是网络文件系统(是网络文件系统(Network File System)的简称,)的简称,用于在计算机间共享文件系统。通过用于在计算机间共享文件系统。通过NFS可以让远程主机的可以让远程主机的文件系统看起来就像是在本地一样。这个由文件系统看起来就像是在本地一样。这个由Sun公司于公司于1985年推出的协议产品如今已被广泛采用,几乎(这个词甚至可年推出的协议产品如今已被广泛采用,几乎(这个词甚至可以舍去)所有的以舍去)所有的Linux发行版都支持发行版都支持NFSNFS同样基于服务器同样基于服务器-客户机架构,本章将着重讨论客户机架构,本章将着
2、重讨论NFS服务器的安装和配置。服务器的安装和配置。NFS只能用于只能用于UNIX类主机间的类主机间的文件共享,文件共享,Windows客户机应该使用客户机应该使用Samba获得文件服务,获得文件服务,参考参考25章获得相关资料。章获得相关资料。26.1 26.1 快速上手:搭建一个快速上手:搭建一个NFSNFS服务器服务器按照惯例,本节帮助读者快速搭建一个按照惯例,本节帮助读者快速搭建一个NFS服务器,这服务器,这个个NFS服务器实现最基本的功能:向外界不加限制地导出一服务器实现最基本的功能:向外界不加限制地导出一个目录。这里暂时不考虑安全方面的因素,稍后会详细介绍个目录。这里暂时不考虑安全
3、方面的因素,稍后会详细介绍和和NFS配置相关的完整信息。配置相关的完整信息。26.1.1 26.1.1 安装安装NFSNFS服务器服务器所有的主流所有的主流Linux发行版都在软件包管理系统中附带了发行版都在软件包管理系统中附带了NFS服务器套件,用户所要做的只是安装而已。以服务器套件,用户所要做的只是安装而已。以Ubuntu Linux为例,只要简单地在为例,只要简单地在Shell终端执行下面这条命令,就终端执行下面这条命令,就可以完成安装可以完成安装NFS服务器需要的一切步骤:服务器需要的一切步骤:$sudo apt-get install nfs-common nfs-kernel-se
4、rver 正在读取软件包列表正在读取软件包列表.完成完成正在分析软件包的依赖关系树正在分析软件包的依赖关系树 读取状态信息读取状态信息.完成完成 将会安装下列额外的软件包:将会安装下列额外的软件包:libevent1 libgssglue1 libnfsidmap2 librpcsecgss3 portmap26.1.2 26.1.2 简易配置简易配置完成完成NFS服务器的安装后,还需要对其进行相关设置,服务器的安装后,还需要对其进行相关设置,以确定哪些文件应该被共享。通过修改以确定哪些文件应该被共享。通过修改/etc/exports文件来实文件来实现服务器的配置。用熟悉的文本编辑器打开现服务
5、器的配置。用熟悉的文本编辑器打开/etc/exports文件文件(需要有(需要有root权限),在末尾添加下面这一行:权限),在末尾添加下面这一行:/srv/nfs_share*(rw)26.1.3 26.1.3 测试测试NFSNFS服务器服务器作为测试,下面通过作为测试,下面通过mount命令在另一台主机上挂载这命令在另一台主机上挂载这个文件系统,如果读者一时找不到其它个文件系统,如果读者一时找不到其它Linux主机可供测试主机可供测试,那么可以直接在本地完成实验。在服务器的主机名(或者,那么可以直接在本地完成实验。在服务器的主机名(或者IP地址)和导出目录之间用冒号连接,地址)和导出目录之
6、间用冒号连接,-o选项指定了使用可选项指定了使用可读写方式挂载:读写方式挂载:$sudo mount-o rw localhost:/srv/nfs_share/mnt/nfs/26.2 NFS26.2 NFS基础基础通过简单的实践,读者已经大概了解了让通过简单的实践,读者已经大概了解了让NFS服务器工服务器工作起来的基本步骤。作起来的基本步骤。NFS协议非常简单,但遗憾的是,简单协议非常简单,但遗憾的是,简单往往意味着对管理员更大的挑战。往往意味着对管理员更大的挑战。NFS服务器的配置文件从服务器的配置文件从来不会像来不会像Apache那样长篇大论,很多事情必须自己考虑清那样长篇大论,很多事
7、情必须自己考虑清楚。特别是在安全性方面,不要指望楚。特别是在安全性方面,不要指望NFS像像Apache那样自动那样自动给出一个给出一个“完美完美”的方案。通过本节及以后各节的学习,读的方案。通过本节及以后各节的学习,读者会逐步发现,者会逐步发现,“快速上手快速上手”环节中使用的环节中使用的NFS配置是存在配置是存在很多问题的,尽管它看上去似乎工作得不错。很多问题的,尽管它看上去似乎工作得不错。26.2.1 26.2.1 关于关于NFSNFS协议的版本协议的版本目前被大量部署和使用的是第目前被大量部署和使用的是第3版的版的NFS协议,这个协协议,这个协议在上世纪议在上世纪90年代初期被开发。在第
8、年代初期被开发。在第2版的基础上,版的基础上,NFSv3加入了异步写操作功能,从而有效提高了读写磁盘的速度。加入了异步写操作功能,从而有效提高了读写磁盘的速度。第第3版的版的NFS完全兼容第完全兼容第2版。版。NFS协议非常稳定,以至于十多年之后才有了第协议非常稳定,以至于十多年之后才有了第4版的版的开发。这个版本的开发。这个版本的NFS提供了一些非常诱人的新特性,例如提供了一些非常诱人的新特性,例如:提供上锁(提供上锁(lock)和安装()和安装(mount)协议;)协议;有状态操作;有状态操作;很强的安全措施;很强的安全措施;同时支持同时支持UNIX和和Windows客户机;客户机;支持支
9、持Unicode编码的文件名;编码的文件名;更高的性能;更高的性能;26.2.2 RPC26.2.2 RPC:NFSNFS的传输协议的传输协议NFS使用使用RPC作为自己的传输协议。作为自己的传输协议。Sun的的RPC(Remote Procedure Call,远程过程调用)协议提供了一种与,远程过程调用)协议提供了一种与系统无关的方法,用于实现网络进程间的通信。这个协议既系统无关的方法,用于实现网络进程间的通信。这个协议既可以使用可以使用UDP,也可以使用,也可以使用TCP作为下层的传输协议。作为下层的传输协议。最初的最初的NFS使用使用UDP协议。这个协议非常简单,并且在协议。这个协议非
10、常简单,并且在上世纪上世纪80年代那样的网络环境下被证明是最高效的。然而随年代那样的网络环境下被证明是最高效的。然而随着时间的推移,着时间的推移,UDP缺乏拥塞控制算法的特点(或者说缺点缺乏拥塞控制算法的特点(或者说缺点?)在大型网络上逐渐暴露出性能上的劣势。于是人们转而?)在大型网络上逐渐暴露出性能上的劣势。于是人们转而把目光投向了把目光投向了TCP,幸运的是,随着快速,幸运的是,随着快速CPU和智能化网络和智能化网络控制器的普及,已经没有什么理由再去选择控制器的普及,已经没有什么理由再去选择UDP作为作为RPC的的下层协议了。下层协议了。TCP因此成为了目前因此成为了目前NFS通信的最好选
11、择。通信的最好选择。现在,所有的现在,所有的Linux发行版都能够同时支持发行版都能够同时支持TCP和和UDP作为作为NFS的传输协议,具体选择哪一种完全取决于客户机(的传输协议,具体选择哪一种完全取决于客户机(通过在安装时指定安装选项)。通过在安装时指定安装选项)。26.2.3 26.2.3 无状态的无状态的NFSNFSNFSv3的服务器是的服务器是“无状态无状态”的,这意味着服务器并不的,这意味着服务器并不知道知道也不想知道也不想知道哪些机器正在使用某个特定的文件哪些机器正在使用某个特定的文件,或者某个文件系统已经被哪些机器挂载了。在客户机成功,或者某个文件系统已经被哪些机器挂载了。在客户
12、机成功地同地同NFS服务器建立连接后,会获得一个秘密的服务器建立连接后,会获得一个秘密的cookie,客,客户机通过这个户机通过这个cookie取得访问服务器上资源的权力。从这种取得访问服务器上资源的权力。从这种意义上,意义上,NFS服务器好像一个慷慨的主人,把客人领进餐厅服务器好像一个慷慨的主人,把客人领进餐厅然后对他说:然后对他说:“想吃什么就随便拿吧想吃什么就随便拿吧”,随后就走开了。,随后就走开了。这样的设计很有好处。如果这样的设计很有好处。如果NFS服务器崩溃了,那么客服务器崩溃了,那么客户机只要简单地等待服务器恢复正常,然后就像什么都没发户机只要简单地等待服务器恢复正常,然后就像什
13、么都没发生过一样继续工作,这其中不会丢失任何信息。当然,无状生过一样继续工作,这其中不会丢失任何信息。当然,无状态的态的NFS不能支持类似于文件上锁这样的功能,因为这需要不能支持类似于文件上锁这样的功能,因为这需要系统提供客户机的相关信息。这也正是系统提供客户机的相关信息。这也正是NFSv4决定实现决定实现“有有状态操作状态操作”的一个原因。的一个原因。26.3 NFS26.3 NFS配置配置这一节主要介绍这一节主要介绍NFS服务器的配置和管理。和其他服务器的配置和管理。和其他Linux服务一样,服务一样,NFS使用一个配置文件来完成配置工作。使用一个配置文件来完成配置工作。对于管理员来说,这
14、个配置文件几乎就是对于管理员来说,这个配置文件几乎就是NFS的全部,对此的全部,对此将首先进行讨论。随后在将首先进行讨论。随后在26.3.2节将介绍节将介绍NFS的启动脚本,的启动脚本,这一节的内容兼顾了各种不同的主流发行版。这一节的内容兼顾了各种不同的主流发行版。26.3.1 26.3.1 理解配置文件理解配置文件NFS服务器的配置文件是服务器的配置文件是/etc/exports,这在所有的发行,这在所有的发行版上都是一样的。之所以选择这个名字,是因为客户机的挂版上都是一样的。之所以选择这个名字,是因为客户机的挂载对于载对于NFS服务器而言,是服务器而言,是“导出(导出(export)”了一
15、个文件了一个文件系统。当系统。当NFS服务器安装完成后,这个文件应该是服务器安装完成后,这个文件应该是“空白空白”,或者包含了一些指导用户设置的注释。在,或者包含了一些指导用户设置的注释。在Ubuntu中,这中,这个文件看起来像这个样子:个文件看起来像这个样子:#/etc/exports:the access control list for filesystems which may be exported#to NFS clients.See exports(5).#Example for NFSv2 and NFSv3:#/srv/homes hostname1(rw,sync)host
16、name2(ro,sync)#Example for NFSv4:#/srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt)#/srv/nfs4/homes gss/krb5i(rw,sync)26.3.1 26.3.1 理解配置文件理解配置文件选项含义ro以只读方式导出rw=list以可读写方式导出(默认选项)。如果指定了list,那么rw只对在list中出现的主机有效,其他主机必须以只读方式安装noaccess阻止访问这个目录及其子目录wdelay为合并多次更新而延迟写入磁盘no_wdelay尽可能快地把数据写入磁盘sync在数据写入磁盘后响应客户机请求(同
17、步模式)async在数据写入磁盘前响应客户机请求(非同步模式)subtree_check验证每个被请求的文件都在导出的目录树中no_subtree_check只验证涉及被导出的文件系统的文件请求26.3.2 26.3.2 启动和停止服务启动和停止服务NFS需要两个不同的守护进程来处理客户机请求:需要两个不同的守护进程来处理客户机请求:mountd响应安装请求,而响应安装请求,而nfsd则响应实际的文件服务。正如则响应实际的文件服务。正如25.2.2节已经提到的,节已经提到的,NFS运行在运行在Sun的的RPC协议上,因此另协议上,因此另一个守护进程也是必须的,一个守护进程也是必须的,portm
18、ap服务用于把服务用于把RPC服务映服务映射到射到TCP或者或者UDP端口。事实上,所有将端口。事实上,所有将RPC协议作为下层协议作为下层传输协议的应用程序都需要传输协议的应用程序都需要portmap守护进程。守护进程。不要太过担心这些守护进程是否需要手工启动,安装不要太过担心这些守护进程是否需要手工启动,安装完完NFS服务器后,系统会自动把它们设置为随系统启动。服务器后,系统会自动把它们设置为随系统启动。26.3.2 26.3.2 启动和停止服务启动和停止服务Linux发行版启动脚本的路径Debian和Ubuntu/etc/init.d/nfs-kernel-server/etc/init
19、.d/nfs-commonRedHat和Fedora/etc/rc.d/init.d/nfsSUSE/etc/init.d/nfsboot26.4 26.4 使用使用SUSESUSE的的YaST2YaST2配置配置NFSNFS服务器服务器用户也可以选择使用图形化管理工具配置用户也可以选择使用图形化管理工具配置NFS。图形化。图形化工具对初学者总是充满吸引力,它可以提供更直观的配置选工具对初学者总是充满吸引力,它可以提供更直观的配置选项、更漂亮的界面,同时也提供了更繁琐的操作步骤。项、更漂亮的界面,同时也提供了更繁琐的操作步骤。SUSE的集成管理工具的集成管理工具YaST2在大多数时候能够帮助管
20、理员在大多数时候能够帮助管理员绕开对配置文件的修改。这里借绕开对配置文件的修改。这里借NFS服务器简要介绍一下使服务器简要介绍一下使用用YaST2配置系统服务的过程。配置系统服务的过程。YaST2可以通过可以通过“K菜单菜单”|“计算机计算机”|“管理员设置管理员设置”命令打开,为此需要提供管理员(命令打开,为此需要提供管理员(root)口令。)口令。YaST2的主的主界面分为两部分,左侧显示了界面分为两部分,左侧显示了9个不同的模块。个不同的模块。26.4 26.4 使用使用SUSESUSE的的YaST2YaST2配置配置NFSNFS服务器服务器26.5 26.5 安全性方面的几点建议安全性
21、方面的几点建议NFS在设计初期并没有着重考虑安全性的问题在设计初期并没有着重考虑安全性的问题当发当发现现NFS的配置如此简单的时候就应该意识到这一点。的确,的配置如此简单的时候就应该意识到这一点。的确,在实际使用过程中,在实际使用过程中,NFS协议带来很多安全隐患,这些安全协议带来很多安全隐患,这些安全问题有时候会让人们怀疑随之带来的简便性是否值得。但不问题有时候会让人们怀疑随之带来的简便性是否值得。但不管怎么样,有了问题就必须尝试去解决,系统管理员总不能管怎么样,有了问题就必须尝试去解决,系统管理员总不能把自己的脑袋埋在沙堆里吧。把自己的脑袋埋在沙堆里吧。26.5.1 26.5.1 充满风险
22、的充满风险的NFSNFSNFS通过通过exports文件导出文件系统,同时指定哪些主文件导出文件系统,同时指定哪些主机可以访问这些资源。看起来这样的做法没有什么问题:如机可以访问这些资源。看起来这样的做法没有什么问题:如果管理员能够把果管理员能够把exports文件设置得足够文件设置得足够“精细精细”的话,就可的话,就可以保证只有可信赖的主机拥有访问权限。然而遗憾的是,这以保证只有可信赖的主机拥有访问权限。然而遗憾的是,这种想法只是一厢情愿。种想法只是一厢情愿。NFS服务器是根据客户机的报告,而服务器是根据客户机的报告,而不是它自己的判断来确定连接来自哪里。在不是它自己的判断来确定连接来自哪里
23、。在26.3.1节的例子节的例子中,如果客户机撒谎说自己是中,如果客户机撒谎说自己是datastore,那么,那么NFS服务器就服务器就相信它是相信它是datastore,并授予它对,并授予它对/srv/nfs_share的写权限。的写权限。26.5.2 26.5.2 使用防火墙使用防火墙对于上面提到的第一种情况,最好的解决方法就是对于上面提到的第一种情况,最好的解决方法就是“交给交给Linux去解决去解决”。所有的。所有的Linux发行版本都包含了一个包发行版本都包含了一个包过滤防火墙,通过设置防火墙只允许特定的主机连接过滤防火墙,通过设置防火墙只允许特定的主机连接NFS端端口,可以有效地过
24、滤来自其他主机的连接请求。防火墙从源口,可以有效地过滤来自其他主机的连接请求。防火墙从源头上断绝了头上断绝了NFS相信陌生人的机会,关于防火墙的设置,请相信陌生人的机会,关于防火墙的设置,请参考第参考第28章。章。使用防火墙并不是说可以不必关心使用防火墙并不是说可以不必关心exports文件了。相文件了。相反,仍然应该认真设置反,仍然应该认真设置exports中的可信赖主机列表,确保文中的可信赖主机列表,确保文件系统只导出给内部有限的几台主机。在件系统只导出给内部有限的几台主机。在exports中设置太多中设置太多“信任信任”的主机会让入侵出现之后的调查变得异常艰难,并的主机会让入侵出现之后的
25、调查变得异常艰难,并且这种设置本身包含了巨大的安全隐患。且这种设置本身包含了巨大的安全隐患。26.5.3 26.5.3 压制压制rootroot和匿名映射和匿名映射允许允许root用户在用户在NFS文件系统上随便运行是很危险的。文件系统上随便运行是很危险的。NFS通过通过UID来判断用户的身份,如果来判断用户的身份,如果root用户登录进来,用户登录进来,那么这个那么这个UID为为0的超级用户就拥有对其中所有文件和目录的超级用户就拥有对其中所有文件和目录的完整权限,管理员精心设置的权限控制就失效了。的完整权限,管理员精心设置的权限控制就失效了。在默认情况下,在默认情况下,Linux的的NFS服
26、务器截获所有来自服务器截获所有来自root用户(用户(UID=0)的请求,将其转换为好像是来自另一个普通)的请求,将其转换为好像是来自另一个普通用户。这种行为被称作用户。这种行为被称作“压制压制root(squashing root)”。Linux定义了一个特殊的用户定义了一个特殊的用户nobody(与其对应的组是(与其对应的组是nogroup)来完成这种转换。这个用户没有任何特殊权限,)来完成这种转换。这个用户没有任何特殊权限,在大部分情况下,在大部分情况下,nobody用户必须遵循文件权限中针对用户必须遵循文件权限中针对“其他人其他人”的设置(参考的设置(参考6.5节)。节)。26.5.4
27、 26.5.4 使用特权端口使用特权端口NFS客户机可以选择使用任意一个端口来连接客户机可以选择使用任意一个端口来连接NFS服务服务器,除非服务器在导出文件系统时指定了器,除非服务器在导出文件系统时指定了secure选项。这个选项。这个选项要求客户机必须使用特权端口(端口号小于选项要求客户机必须使用特权端口(端口号小于1024)连接)连接NFS服务器。尽管在服务器。尽管在PC机上,使用特权端口并不能显著提机上,使用特权端口并不能显著提高安全性。高安全性。与之相反的一个选项是与之相反的一个选项是“insecure”,告诉服务器可以,告诉服务器可以接受来自非特权端口(端口号大于接受来自非特权端口(
28、端口号大于/等于等于1024)的连接。在)的连接。在默认情况下,默认情况下,Linux客户机都会使用一个特权端口来连接客户机都会使用一个特权端口来连接NFS服务器,因此一般不用考虑客户机的设置。服务器,因此一般不用考虑客户机的设置。26.6 26.6 监视监视NFSNFS的状态:的状态:nfsstatnfsstatnfsstat命令可以显示当前命令可以显示当前NFS的各项统计信息。带的各项统计信息。带“-s”选项的选项的nfsstat命令显示命令显示NFS服务器的相关信息:服务器的相关信息:$nfsstat-sServer rpc stats:calls badcalls badauth ba
29、dclnt xdrcall62 0 0 0 0 Server nfs v3:null getattr setattr lookup access readlink 2 3%31 59%3 5%3 5%7 13%0 0%read write create mkdir symlink mknod 0 0%0 0%1 1%0 0%0 0%0 0%remove rmdir rename link readdir readdirplus 0 0%0 0%0 0%0 0%0 0%1 1%fsstat fsinfo pathconf commit 0 0%3 5%1 1%0 0%26.7 26.7 小结小结
30、所有的主流所有的主流Linux发行版都在安装源中包含了发行版都在安装源中包含了NFS服务服务器。器。NFS使用使用RPC作为传输协议。后者由作为传输协议。后者由Sun公司开发,提公司开发,提供了一种与系统无关的通讯方法。供了一种与系统无关的通讯方法。NFSv3是一种无状态的服务。是一种无状态的服务。NFS服务器通过服务器通过/etc/exports文件确定导出的文件系统。文件确定导出的文件系统。可以(也应该)指定可以(也应该)指定NFS服务器向哪些主机导出目录。服务器向哪些主机导出目录。不同的不同的Linux发行版常常使用不同的发行版常常使用不同的NFS启动脚本。启动脚本。NFS服务器根据客户机报告确定客户机的身份。服务器根据客户机报告确定客户机的身份。应该使用防火墙、压制应该使用防火墙、压制root、匿名映射等方法增强、匿名映射等方法增强NFS服务器的安全性。服务器的安全性。nfsstat命令显示命令显示NFS的各项统计信息。的各项统计信息。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。