[VPS] Ubuntu Server 安裝 NFS 服務共享主機資料夾

本篇文章更新時間:2021/07/17
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


這服務原本也是我打算串連眾多主機的選擇,不過缺點說在前面:如果網路有問題,主機會 Hang 住,導致存取卡著。

用在搭配 HAProxy 架構中可以有選擇性的只處理使用者上傳的檔案,程式原始碼倒不用這樣跟進。

進入正題,這服務要處理好,總共要設定兩台搭配,假設兩台的配置如下:

  • Server 192.168.0.1 提供檔案源的主機
  • Client 192.168.0.2 掛載檔案源使用的主機

如標題所述這兩台都是 Ubuntu Server (當前測試版本 20.04 LTS 版本)。但其實這服務不限制使用特定版本作業系統,關鍵是遵守這服務的協議設計就能把檔案共享串連使用。

本文筆記當下使用的是 NFS v4,查詢 Server 使用狀態的指令為 nfsstat –s

安裝 NFS Server

apt install nfs-kernel-server nfs-common -y

建立或指定要共享的資料夾,假設是 /home/server/share

這邊要注意,很多教學會懶得解釋就建議把目錄設定為777權限全開的狀態,這其實不是好現象。 無限期推動網頁服務目錄權限勿設777

這目錄的使用權限設定還會跟你要使用的服務有一個關係存在,沒有絕對值。

有目錄後,編輯 /etc/exports 檔案,描述共享的資料夾設定

/home/server/share    192.168.0.2(rw,sync,subtree_check,no_root_squash)

指定只開分享給 Client 這台主機,並賦予讀寫、磁碟同步與不壓縮 root 權限等設定。細節權限介紹部分可以參考鳥哥的文章

設定與存擋後, exportfs -ra 重新整理這份檔案設定。

service nfs-kernel-server restart

重新啟動服務完成 Server 的設定!

安裝 NFS Client

apt install nfs-common -y

裝好後指定要掛上 Server 端的目錄路徑 /home/client/share_from_server,目錄名稱可以看需求隨意。

mount 指令先測試是否沒問題:

mount -t nfs 192.168.0.1:/home/server/share /home/client/share_from_server -o nolock

去 Server 那台主機的 /home/server/share 目錄裡新增檔案,再回到 Client 上看看有沒有同步檔案出現了。

沒問題的話,通常沒意外都會希望重開機也會自動掛載使用,所以編輯 /etc/fstab 這份檔案,補上下列:

192.168.0.1:/home/server/share /home/client/share_from_server nfs rw,async,hard,intr,noexec 0 0

重開機後,檢查有無掛載正確的方式可以輸入指令 df -h 確認。

延伸安全性管理

如果主機是 1~65535 的外對內 TCP Ports 預設關閉的話,NFS 服務要正確還需要額外的設定,讓這服務開起的 Ports 能固定。

確認當前使用的 Ports 端口指令: rpcinfo -p | awk '{print $3" "$4}' | sort -k2n | uniq

由於這軟體服務已改版多次,網路上有不少的教學已經無效,目前參考這篇討論 Which ports do I need to open in the firewall to use NFS? 中調整 /etc/default/nfs-kernel-server 這份設定檔案中,註解原本這段 RPCMOUNTDOPTS=--manage-gids 新增這段
RPCMOUNTDOPTS="--port 33333"

再來是修改 /etc/sysctl.conf 這檔案,最下方新增

fs.nfs.nlm_udpport=38073
fs.nfs.nlm_tcpport=38747

重啟服務後,能把使用的 TCP Ports 固定在 111, 2049, 33333, 38747。

在 Server 的主機上可以這樣下防火牆規則:

iptables -I INPUT -p tcp --match multiport --dports 111,2049,33333,38747 -s 192.168.0.2 -j ACCEPT

另外檢查 mount 的過程也可以確認呼叫哪些 Ports 端口: mount -a -vv

上述指定固定 Ports 的端口也要注意是否有被其他服務佔用,沒有才能使用,免得有衝突發生。

參考資料:


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon