NFS (Network File System) 讓用戶端像操作本地分區一樣存取遠端目錄,是企業檔案共享、嵌入式開發交叉編譯的首選方案。本文涵蓋兩大應用場景、核心設定檔 /etc/exports 詳細參數、安全加固與效能權衡。
# 格式
<共享目錄> <客戶端規格>(選項列表)
# 範例
/data/project 192.168.1.0/24(rw,sync,no_root_squash,no_subtree_check)
/home *.example.com(ro,async,root_squash)
| 區塊 | 關鍵參數 | 說明 |
|---|---|---|
| 共享目錄 | 絕對路徑 | 必須用實體路徑,不可用符號連結。 |
| 客戶端規格 | 單一 IP、網段 (192.168.1.0/24)、萬用字元 (*.domain.com)、@group | 精準限制存取來源,避免全網開放。 |
| 權限與行為選項 | ro / rw | 唯讀 / 讀寫 |
| root_squash (預設) | 將客戶端 root 映射為匿名用戶 (nfsnobody),保護伺服器根權限。 | |
| no_root_squash | 保留客戶端 root 權限,極度危險,僅受信任環境使用。 | |
| all_squash | 所有用戶映射為匿名用戶,搭配 anonuid/anongid 指定 UID/GID。 | |
| sync (預設) | 資料同步寫入記憶體與磁碟,資料安全優先,效能稍低。 | |
| async | 先寫入記憶體,適時寫入磁碟,效能優先,掉電風險資料遺失。 | |
| no_subtree_check | 關閉子樹檢查,提升大目錄匯出效能,安全性略降。 | |
| secure | 限制客戶端使用保留埠 (<1024) 連線,預設開啟。 |
dnf install nfs-utils -ymkdir -p /data/share && chmod 777 /data/share/etc/exports,加入匯出規則。systemctl enable --now nfs-server rpcbindexportfs -rvfirewall-cmd --add-service=nfs --permanent && firewall-cmd --reloadmount -t nfs server:/data/share /mnt 或寫入 /etc/fstab 開機自動掛載。root_squash,防止客戶端 root 提權。sec=krb5p (Kerberos 加密) 或 VPN 隔離網路平面。/etc/hosts.allow/hosts.deny 或 firewalld 限制來源 IP。exportfs -v 確認無異常匯出。async + no_subtree_check + 客戶端掛載加 rsize=1048576,wsize=1048576。| 現象 | 可能原因 | 解決 |
|---|---|---|
| mount 掛住無回應 | 防火牆阻擋、rpcbind 未啟動 | 檢查防火牆、systemctl status rpcbind |
| Permission denied | exports 權限不符、root_squash 生效、UID/GID 不匹配 | 核對 exports、客戶端 idmapd 設定 |
| Stale file handle | 伺服器重啟、目錄重建、inode 變更 | 客戶端 umount 重掛、重啟 nfs-client.target |
NFS 部署簡單但細節決定成敗。嚴守「最小權限、root_squash、網路隔離」三原則,配合效能參數微調,即可打造安全高效的分散式檔案共享服務。