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,將無限期地重試)


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