• 1. 第8章 NFS服务器
    • 2. 目录8.1 NFS服务器简介 8.1.1 网络磁盘驱动器NFS 8.1.2 NFS运行原理 8.1.3 NFS技术细节 8.1.4 NFS的版本 8.1.5 NFS的安全性 8.1.6 NFS的优点 8.2 NFS服务器的安装与配置 8.2.1 NFS服务器的安装 8.2.2 NFS服务器的启动与停止 8.2.3 开机时启动NFS服务器 8.2.4 NFS服务器的配置文件 8.3 NFS服务器配置实例
    • 3. 8.1 NFS服务器简介8.1.1 网络磁盘驱动器NFS NFS(Network File System)服务主要实现Linux和Linux之间通信与资源共享!利用NFS服务我们可以在客户端主机访问服务端主机的资源,以提高资源的使用率、节省磁盘空间。
    • 4. 8.1 NFS服务器简介8.1.2 NFS运行原理 NFS是一种分布式文件系统(Distributed File System),其主要功能是让网络上的UNIX主机可以共享目录及文件。它的原理是在客户端上,通过网络将远程主机共享的文件系统利用安装(mount)的方式加入本机的文件系统,此后的操作就像在本机操作一样。
    • 5. 8.1 NFS服务器简介8.1.3 NFS技术细节 与大多数基于网络的服务一样,NFS也使用了客户端和服务器实例,也就是说它有自己的客户端组件和服务器端组件 ,如图所示
    • 6. 8.1 NFS服务器简介8.1.3 NFS技术细节 /usrman()服务器A/mntman()(源)(挂载目标)客户机BNFS映射
    • 7. 8.1.3 NFS技术细节 例如在客户机B上,要把NFS服务器A上的/usr/man挂载到客户机B的/mnt/man,只要使用命令: mount machine_name:/usr/man /mnt/man 就可以挂载过来。使用该命令不仅可以挂载目录,也可以挂载一个文件。但是,在挂载之后只能对文件进行读或写操作,而不能在远程计算机上移动或删除此文件或目录。另外,在挂载目录/usr后,不能再挂载/usr下面的目录,否则会发生错误。8.1 NFS服务器简介
    • 8. 8.1 NFS服务器简介8.1.4 NFS的版本 目前NFS的版本有几种:NFSv2、NFSv3和NFSv4。而NFSv3增加了一些功能,如错误报告功能(在Red Hat LINUX 9中同时使用NFSv2和NFSv3,并以NFSv3为默认版本);NFSv4是最新的标准,如果需要利用前沿的新特性以及不考虑向后的兼容性的新部署时,就可以考虑使用NFSv4。
    • 9. 8.1 NFS服务器简介8.1.5 NFS的安全性 NFS并不是一个很安全的共享磁盘的方法,使NFS系统更安全的步骤与让其它系统更安全的步骤并没有什么不同,唯一的方法是管理员必须要有信任客户端系统上用户、及其root用户的能力。如果同时是客户端和服务器两个系统上的root用户,就不太需要担心这一点。在这种情况下重要的是确保非root用户不能变成root用户,这也就是管理员所需要注意的地方! 如果处于不能完全信任访问共享磁盘用户的这种环境下,那就需要花时间来努力找出可选的共享资源的方式(比如只读共享磁盘)。
    • 10. 8.1 NFS服务器简介8.1.6 NFS的优点 本地工作站使用更少的磁盘空间,因为数据通常可以存放在一台计算机上而且可以通过网络访问。 用户不必在每个网络的计算机中都有一个home目录。home目录可以放在NFS服务器上并且在网络上处处可用。 提供透明的文件访问及文件传送。 用户可以直接获取远程文件和数据,而不必了解其细节。 在网络上真正实现分布式处理。 扩充新的资源或软件时不需要改变现有的工作环境。 高性能,可灵活配置。
    • 11. 8.2 NFS服务器的安装与配置8.2.1 NFS服务器的安装 目前几乎所有的Linux发行版本都默认安装了NFS服务,Red Hat Enterprise Linux 5也不例外。使用默认方式安装完毕后,NFS服务就已经被安装在系统中了。如果要启动NFS服务,必须至少具备以下两个软件包。 nfs-utils软件包 // 为NFS服务的主要套件,提供rpc.nfsd和rpc.mounted两个守护进程与其它相关文档、执行文件的套件。 portmap软件包 //该软件包借助RPC服务的帮助,负责端口影射工作以保证NFS服务的正常运行。
    • 12. 8.2 NFS服务器的安装与配置8.2.1 NFS服务器的安装 在Red Hat Enterprise Linux 5的终端窗口中用“rpm –qa|grep nfs-utils”和“rpm –qa|grep portmap”命令分别查询系统中是否安装了nfs-utils和portmap软件包,如图所示。
    • 13. 从图中可以看到,系统已经安装了nfs-utils和portmap软件包。如果当前系统中没有安装NFS使用的软件包,则可以通过Red Hat Enterprise Linux 5的安装光盘进行安装。将第三张安装光盘放入光驱,加载光驱,在光盘的/Server目录下查找NFS服务及portmap服务的RPM软件包nfs-utils-1.0.9-16.e15.i386.rpm和portmap-4.0-65.2.2.1.i386.rpm。由于portmap软件包中的portmap服务为NFS和NIS等提供RPC服务支持,因此根据依赖性应先安装portmap软件包,安装命令为:rpm –ivh /media/cdrom/Server/portmap-4.0.-65.2.2.1.i386.rpm8.2 NFS服务器的安装与配置8.2.1 NFS服务器的安装
    • 14. 8.2 NFS服务器的安装与配置8.2.1 NFS服务器的安装 nfs-utils软件包中提供了NFS服务程序和相应的维护工具,安装NFS服务的命令如下: rpm –ivh /media/cdrom/Server/nfs-utils-1.0.9-16.e15.i386.rpm
    • 15. 8.2 NFS服务器的安装与配置8.2.2 NFS服务器的启动与停止 1. 启动NFS服务器 先用service命令启动portmap,然后再启动NFS,如图所示。
    • 16. 8.2 NFS服务器的安装与配置8.2.2 NFS服务器的启动与停止 2. 重新启动NFS服务器 在停止或重启NFS服务的时候,portmap服务可以不停止,如图所示。
    • 17. 8.2 NFS服务器的安装与配置8.2.2 NFS服务器的启动与停止 注意:在没有对NFS的配置文件/etc/exports(默认内容为空)进行配置之前,重启或停止NFS服务时会出现“关闭NFS服务失败”的现象,当正确配置后,该问题就会自动解决。
    • 18. 8.2 NFS服务器的安装与配置8.2.2 NFS服务器的启动与停止 停止NFS服务器 使用“service nfs stop”命令停止NFS服务, 如图所示。
    • 19. 8.2 NFS服务器的安装与配置8.2.2 NFS服务器的启动与停止 4. 查看目前NFS服务器状态 使用service nfs status命令查看NFS服务器的当前状态,如图所示
    • 20. 8.2 NFS服务器的安装与配置8.2.3 开机时启动NFS服务器 在终端窗口中输入“ntsysv”,然后在出现的画面中,利用上下方向键将光标移到菜单中的“nfs”项目,然后按空格键进行选择,最后用Tab键将光标移到“确定”按钮并按“Enter”键完成设置,如图所示。
    • 21. 8.2 NFS服务器的安装与配置8.2.3 开机时启动NFS服务器
    • 22. 8.2 NFS服务器的安装与配置8.2.4 NFS服务器的配置文件 NFS的配置都集中在/etc/exports文件中,它是共享资源的访问控制列表,不仅可以在此新建共享资源,同时也能对访问共享资源的客户端进行权限管理。 在/etc/exports文件中每一条记录都代表一个共享资源以及访问权限设置,它的格式如下: 共享目录 客户端(访问权限,选项,用户ID对应)
    • 23. 8.2 NFS服务器的安装与配置8.2.4 NFS服务器的配置文件 1. 共享目录 在指定共享目录时要把握一个原则:使用绝对路径。 2. 客户端 指定允许连接此NFS服务器的客户端,可以使用的客户端的表示方式有很多,包括: 单一主机:主机名、别名或IP地址,如果指定超过一个以上的主机,则必须以空格加以分割。 群组:可以使用“@群组名称”的格式来指定允许连接NFS服务器的群组,如@WORKGROUP。 万用字符:可以使用“*”或“?”来指定允许连接NFS服务器的客户端。 网络节点:如果要指定IP网络节点的客户端,那么可以使用符合CIDR格式的表示法,如192.168.0.0/24或192.168.0.0/255.255.255.0。
    • 24. 8.2 NFS服务器的安装与配置8.2.4 NFS服务器的配置文件 3. 访问权限 NFS客户端的访问权限分为以下两类: rw //可以读写 ro //只读 4. 选项 async //数据先暂存于内存当中,不直接写入硬盘。 sync //数据同步写入到内存与硬盘当中。 5. 用户ID对应 通常用户都会希望在访问NFS服务器上的共享资源时,也可以享有在本机一样的权限,但这很容易造成安全上的漏洞。比如在客户端主机的root用户如果连接到NFS服务器后,仍具有root的权限,可能造成的影响可想而知。 因此为了避免以上的问题,可使用“用户ID对应”的方式。即将原本高权限的账号对应到一般的账号,如将uid0(root)对应到anonymous或nobody。 root_squash //将uid0和gid0对应到anonymous使用的id。 no_root_squash //停用root_squash功能。 all_squash //将所有uid和gid对应到anonymous使用的id。 no_all_squash //停用all_squash功能。 注意:如果不设置用户ID对应,则缺省值为root_squash。 在设置/etc/exports文件前需特别注意“空格”的使用。因为在配置文件中,除了分开共享目录和共享主机,以及分割多台共享主机外,其余的情形下都不可使用空格。 例如,/home client1 client2(rw) /home client1 client2 (rw) 第一个范例中,客户端client1和client2可以读取并写入/home目录,但第二个范例却表示客户端client1和client2只可以读取/home目录内容(即客户端的默认权限),而其它的客户端对/home目录享有读写权限。
    • 25. 8.3 NFS服务器配置实例8.3.1 本地回环测试1 配置NFS服务器(IP地址为127.0.0.1),发布的共享目录为/home/bgl,只允许以本机作为客户机挂载访问,对共享目录具有读写权限,进行用户ID映射。用vi编辑器打开NFS服务器(IP:202.207.50.79)的/etc/exports文件,如图所示。
    • 26. 8.3 NFS服务器配置实例8.3.1 本地回环测试1 。 如图所示允许客户端(IP:127.0.0.1)对/home/bgl文件夹下的内容进行读写操作,且数据同步写入到内存与硬盘当中。由于这里没有设置用户ID对应,所以按缺省值root_squash来设置生效,即将root账户映射到anonymous上。
    • 27. 8.3 NFS服务器配置实例8.3.1 本地回环测试1 在NFS服务器上建立共享目录/home/bgl以及测试文件,效果如图所示。
    • 28. 8.3 NFS服务器配置实例8.3.1 本地回环测试1 重新启动NFS服务器,如图所示。用exportfs指令检查NFS服务器配置是否正确,如图所示
    • 29. 8.3 NFS服务器配置实例8.3.1 本地回环测试1 用exportfs指令检查NFS服务器配置是否正确,如图所示
    • 30. 8.3 NFS服务器配置实例8.3.1 本地回环测试1 以本机作为NFS服务器的客户机进行测试。 在客户端如果要查看NFS服务器上的共享资源,可以使用NFS软件包中的“showmount -e”指令查看,在图所示的例子中,NFS服务器发布的共享目录是/home/bgl。
    • 31. 8.3 NFS服务器配置实例8.3.1 本地回环测试1 如果用showmount -e指令无法显示共享信息,则需要关闭NFS服务器端的防火墙或者开启NFS服务的相应端口,然后再从客户端用showmount -e命令检查就没有问题了。 在客户端创建挂载目录/baigl,其初始内容为空,如图所示。
    • 32. 8.3 NFS服务器配置实例8.3.1 本地回环测试1 然后用mount命令将NFS服务器下的共享目录/home/bgl挂载到客户端的/baigl目录下,效果如图所示。注意,挂载之前,要先从挂载目录/baigl中退出来,否则会看不到效果。
    • 33. 8.3 NFS服务器配置实例8.3.1 本地回环测试1 当然,挂载成功后,也可以通过图形方式访问共享目录,从图中看到,发布的共享目录/home/bgl下的全部内容,均已成功挂载到了指定目录/baigl下了。
    • 34. 8.3 NFS服务器配置实例8.3.1 本地回环测试1 在这里可以进行浏览,复制等基本操作,但如果要执行删除文件或创建目录等写操作,则是不允许的,如图所示
    • 35. 8.3 NFS服务器配置实例8.3.2 本地回环测试2 在前一个例子的基础上,给客户端添加写权限。 我们在8.3.1小节中设置的NFS服务器发布的共享目录信息如图所示。 从图中可以看出,NFS服务器允许客户端127.0.0.1访问共享目录/home/bgl,并具有写权限,但在实际测试中却无法进行写操作,原因在于NFS服务器默认采用了root_squash的用户ID对应方式,即将root用户映射成了anonymous,权限降低了。
    • 36. 8.3 NFS服务器配置实例8.3.2 本地回环测试2 查看NFS服务器发布的共享目录信息,如图所示。/home/bgl的权限信息为rwxr-xr-x,即只有所有者root具有读、写和执行的权限,而其它用户只具有读与执行的权限,不具有写权限。所以造成了从客户端访问NFS服务器时,anonymous用户无法写的结果。
    • 37. 8.3 NFS服务器配置实例8.3.2 本地回环测试2 如果给客户端添加写权限,可以采用两种方式: 一是修改NFS服务器发布的共享目录(/home/bgl)权限,由原来的755(rwxr-xr-x)改为777(rwxrwxrwx),这样一来,anonymous用户也可以在客户端执行写操作了。 是更常见的做法,不进行用户ID映射。即将NFS主配置文件中的用户ID对应参数设置成no_root_squash,也就是当以root身份登录NFS服务器时,不进行权限的降低,仍具有root用户的权限,这样就可以执行写操作了。 面我们就以第二种方法为例来测试一下。 首先打开NFS服务器的主配置文件/etc/exports,对内容做如下修改,如图所示。 从图中可以看出,只增加了用户ID对应参数no_root_squash,其余内容未做改动。
    • 38. 8.3 NFS服务器配置实例8.3.2 本地回环测试2 然后用exportfs -rv指令检查主配置文件/etc/exports是否存在语法错误,如图所示。
    • 39. 8.3 NFS服务器配置实例8.3.2 本地回环测试2 没有问题的话就可以在客户端测试了。在客户端先用“showmount -e”指令查看NFS服务器发布的共享目录信息,如图所示。
    • 40. 8.3 NFS服务器配置实例8.3.2 本地回环测试2 用mount指令将NFS服务器发布的共享目录/home/bgl挂载到指定目录/baigl下,由于之前已经挂载过,且一直没有卸载,所以再次挂载会出现上图所示的问题。正确的做法是先用umount指令将/baigl目录卸载,然后重新挂载,效果如图所示。
    • 41. 8.3 NFS服务器配置实例8.3.2 本地回环测试2 在客户端挂载成功后,进入/baigl目录中,进行写权限的测试,这次就没有问题了,效果如图所示。
    • 42. 8.3 NFS服务器配置实例8.3.2 本地回环测试2 当然,通过图形方式也可以进行写权限的测试,如图所示
    • 43. 8.3 NFS服务器配置实例8.3.3 通过指定客户机测试 配置NFS服务器,要求发布的共享目录为/home/bgl,允许两个指定的客户机访问NFS服务器,其它机器不允许访问;其中一台客户机进行用户ID映射,另一台机器不设置用户ID映射。 对NFS服务器的主配置文件/etc/exports做如下修改,加入如图所示的一行发布信息。
    • 44. 8.3 NFS服务器配置实例8.3.3 通过指定客户机测试 这行信息表示发布NFS服务器的共享目录为/home/bgl,允许客户端172.30.36.201和172.30.36.202访问。客户端172.30.36.201对共享目录具有写权限,数据同步写入到内存与硬盘当中,并将root账户映射到anonymous上。客户端172.30.36.202对共享目录具有写权限,数据同步写入到内存与硬盘当中,不进行用户ID对应的设置。然后用exportfs -rv指令检查主配置文件/etc/exports是否存在语法错误,如图所示
    • 45. 8.3 NFS服务器配置实例8.3.3 通过指定客户机测试 从上图中可以看出,NFS服务器发布的共享目录/home/bgl允许3个客户端访问,分别是本机(127.0.0.1),172.30.36.201和172.30.36.202。 下面就可以在客户端测试了。首先从客户端172.30.36.201进行测试。 先用“ping”命令测试一下客户机与NFS服务器(202.207.50.79)的网络是否畅通,然后再用“showmount -e”指令查看NFS服务器发布的共享目录信息,如图所示。
    • 46. 8.3 NFS服务器配置实例8.3.3 通过指定客户机测试 下面就可以进行挂载了,先在客户机(172.30.36.201)上创建挂载目录/201,然后用mount命令将NFS服务器发布的共享目录/home/bgl挂载到指令目录/201中,如图所示。 在图中的例子中,成功挂载后,用cd命令进入到挂载目录/201下,可以看到与NFS服务器发布目录/home/bgl下的内容是一致的。如果要在该目录进行写操作,是不允许的。因为客户机172.30.36.201进行了用户ID映射,只具有anonymous的权限,效果如图所示。
    • 47. 8.3 NFS服务器配置实例8.3.3 通过指定客户机测试 下面从客户端172.30.36.202进行测试。 和前面一样,先用ping命令和showmount命令测试NFS服务器,如图所示。
    • 48. 8.3 NFS服务器配置实例8.3.3 通过指定客户机测试 然后创建挂载目录,进行挂载,如图所示
    • 49. 8.3 NFS服务器配置实例8.3.3 通过指定客户机测试 挂载成功后,进入到挂载目录/202中,用mkdir命令创建子目录,进行写权限的测试,如上图所示。可以看到客户机2(172.30.36.202)是可以进行写操作的,因为NFS服务器对客户机172.30.36.202没有进行用户ID映射,即仍为root身份。 如果想将客户机2(172.30.36.202)的权限设置成只读,有两种方法:一是将NFS服务器的主配置文件(/etc/exports)中客户机172.30.36.202读写参数由原来的rw换成ro,那么客户机自然也就不具有写权限了;另外也可以给客户机172.30.36.202设置用户ID对应参数,即root_squash,使其降级为anonymous用户,取消写权限。 注意:如果从客户端挂载不上,则需要先关闭客户端的防火墙,然后再次挂载,就可以了。