linux系统之nfs(网络文件系统)文件共享

一.nfs基本介绍

  网络文件系统(NFS)是Unix系统和网络附加存储文件管理器常用的网络文件系统,允许多个客户端通过网络共享文件访问。
  它可用于提供对共享二进制目录的访问,也可用于允许用户在同一工作组中从不同客户端访问其文件。
  NFS协议有多个版本:Linux支持版本4、版本3和版本2, 而大多数系统管理员熟悉的是NFSv3。
  默认情况下,该协议并不安全,但是更新的版本(如NFSv4)提供了对更安全的身份验证的支持,甚至可以通过kerberos进行加密。
  NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。
  在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
以下是NFS最显而易见的好处:
  1. 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
  2. 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
  3. 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。
     这可以减少整个网络上可移动介质设备的数量。
示意图:

二.nfs服务器的配置

1.概述
 #若要配置基本NFS服务器,先安装nfs-utils软件包。
  然后,编辑/etc/exports以列出希望通过网络与客户端系统共享的文件系统,并指出哪些客户端对导出具有何种访问权限。
  例如:
      /var/ftp/pub
      192.168.0.0/24(ro,sync)
      #将目录/var/ftp/pub导出至192.168.0.0/24网络上的所有主机(对目录具有只读权限)。
      /export/homes *.example.com(rw,sync)
      #将目录/export/homes导出至exmaple.com中的所有主机(对目录具有读写权限)。
   当NFS服务器运行时,每次编辑/etc/exports后,都应通过在保存更改后执行exportfs -r来确保应用这些更改。
   可以使用exportfs -v显示所有导出。
   NFSv4还导出pseudo-root(所有导出的文件系统的root)。如果客户端挂载nfs-server:/ ,这将在NFS服务器上的/下面相对于其位置挂载所有导出文件系统。
   这对于浏览从客户端的服务器导出的所有文件系统有用。仍可单独挂载文件系统。
 #默认情况下,NFS服务器将NFS客户端上的root视为用户nfsnobody。
   即,如果root尝试访问挂载的导出中的文件,服务器会将其视作用户nfsnobody访问。
   在NFS导出被无磁盘客户端用作/和root需要被视作root的情况中,这种安全措施存在隐患。
   若要禁用此保护,服务器需要将no_root_squash添加到在/etc/exports中导出设置的选项列表:/exports/root 192.168.0.1(rw,no_root_squash)
   对于NFSv4,必须在服务器上打开端口2049/TCP(对于nfsd)。
   对于NFSv3和更早版本,必须为rpcbind、rpc.mountd、lockd和rpc.rquotad打开更多端口,
   而在“随机”选择的端口上启动其中许多服务这一事实又增加了复杂性。
   此外,NFSv2和NFSv3支持UDP传输,还要求打开相应的端口
2.安装服务及配置防火墙策略
   yum install nfs-utils.x86_64 -y



     systemctl start nfs-server
     systemctl enable nfs-server.service ###开启nfs服务
     systemctl start firewalld           ###如果开启防火墙还要访问nfs,要写以下火墙策略
     firewall-cmd --permanent  --add-service=nfs       ###添加nfs服务
     firewall-cmd --permanent --add-service=rpc-bind   ###添加rpc-bind服务
     firewall-cmd --permanent --add-service=mountd     ###添加mountd
     firewall-cmd --reload               ###重载火墙策略 

3.建立一个共享目录/etc/exports对客户端访问进行设置
   mkdir /public
   chmod 777 /public/
   touch /public/test{1..3}
   vim /etc/exports
     /public *(sync) ##将/public共享给所有人并且数据同步 代表所有人,sync代表数据同步
   exportfs -rv     ##提示:对配置的文件进行刷新,一定不能重启nfs服务,那样会导致服务卡住,这是已知的bug



4.访问控制

vim /etc/exports
/public 172.25.0.0/24(sync)  ##只允许172.25.0.0/24网段的ip访问
/public *.example.com(sync)  ##只允许同一个域名的主机访问
/public 172.25.254.20(ro,sync) 172.25.254.21(rw,sync)  ##允许20主机只读访问 ,21主机读写访问
/public *(rw,sync,no_root_squash)  ##获得root权限

在另外一台虚拟机上测试:
nfs主机:*.example域名可以访问,但是没有写权限

测试:
nfs主机:172.25.254.250主机可以访问,可以写

150主机测试:
nfs主机:150主机获得roto权限

测试主机:

nfs主机:1001为用户,1001为用户组

150主机测试:

5.永久挂载NFS文件系统:
vim /etc/fstab
172.25.254.250:/public /mnt nfs defaults 0 0
rw:挂载可读写的文件系统
ro:挂载只读文件系统
vers=4:尝试只使用指定的NFS版本进行挂载。如果服务器不支持该版本,则挂载请求失败
soft:如果NFS请求超时,三次尝试后返回错误。权衡数据完整性与提高客户端响应性。(默认行为hard,将无限期地重试)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章