簡介
網絡文件系統(NFS)是一個分布式文件系統協議,允許你通過網絡共享遠程文件夾,通過NFS的方式,將遠程文件夾掛載到本地系統上,並且操作遠程機器的文件,就像本地文件一樣方便。
NFS 協議默認是不加密的,它不像 Samba,它不提供用戶身份鑒別。服務端通過限定客戶端的 IP 地址和端口來限制訪問。
在本文中,將介紹如何在 Ubuntu 18.04 上建立 NFSV4 服務器以及如何掛載 NFS 到本地系統中
前提條件
使用一台Ubuntu 18.04 的機器作為服務端,在該服務端,我們將安裝搭建NFS服務,另外一台linux 服務器作為 NFS 客戶端,服務端和客戶端之間能夠通過局域網互相連接。
搭建 NFS 服務器
這里說明如何安裝必要軟件包,創建並導出NFS目錄,配置防火牆
安裝NFS服務器
刷新軟件索引,並且安裝NFS服務
sudo apt update
sudo apt install nfs-kernel-server
安裝完成后,NFS 服務將會自動啟動,默認在Ubuntu 18.04上NFS2 被禁用,NFS3和NFS4可以使用。
查看NFS的版本信息 + 表示支持 - 表示不支持
sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
創建文件系統
配置NFSv4 服務器,最好使用一個全局的NFS根目錄,然后在這個根目錄下掛載實際的目錄,在這個例子中,/opt/nfsv4
作為NFS 的root 根目錄。
分享兩個目錄(/var/data
和 /opt/back
),使用不同的配置,來說明如何掛載NFS,/var/data
歸屬於用戶和用戶組data
,/opt/back
歸屬於root
NFS 服務器的ip地址為192.168.174.10
- 創建導出文件系統
sudo mkdir -p /opt/nfsv4/data
sudo mkdir -p /opt/nfsv4/back
- 掛載實際的目錄
sudo mount --bind /var/data /opt/nfsv4/data
sudo mount --bind /opt/back /opt/nfsv4/back
-
持久化掛載
- 打開文件
/etc/fstab
sudo nano /etc/fstab
- 添加條目
/var/data /opt/nfsv4/data none bind 0 0 /opt/back /opt/nfsv4/back none bind 0 0
- 打開文件
-
導出文件系統
-
修改配置文件
修改/etc/exports
文件,添加文件系統導出,
這里將data
和back
導出,並且配置網絡訪問權限sudo nano /etc/exports
添加如下內容
/opt/nfsv4 192.168.174.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0) /opt/nfsv4/back 192.168.174.0/24(ro,sync,no_subtree_check) 192.168.174.20(rw,sync,no_subtree_check) /opt/nfsv4/data 192.168.174.30(rw,sync,no_subtree_check)
-
配置說明
第一行包含fsid=0
定義NFS根目錄/opt/nfs4
,網絡192.168.174.0/24
客戶端允許訪問NFS卷,crossmnt
選項是必要的,用來分享被導出目錄的子目錄
第二行表示如何針對一個文件系統,配置多個導出規則,導出目錄/opt/nfs4/back
,允許192.168.174.0/24
客戶端只讀訪問,允許192.168.174.20
客戶端讀寫訪問
第三行表示單個導出規則,導出目錄/opt/nfs4/data
,允許192.168.174.30
客戶端讀寫訪問 -
導出分享
sudo exportfs -ra
-
查看當前活躍的導出和狀態
sudo exportfs -v
輸出會包含所有分享以及他們的選項,有些選項是默認的選項,如果需要修改這些,需要在配置中顯示設置這些選項
/opt/nfsv4/back 192.168.174.20(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash) /opt/nfsv4/data 192.168.174.30(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash) /opt/nfsv4 192.168.174.0/24(rw,wdelay,crossmnt,root_squash,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash) /opt/nfsv4/back 192.168.174.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
-
配置防火牆
如果網絡上有防火牆,需要在防火牆中添加一條規則,允許流量通過NFS端口
如果使用ufw
管理防火牆,運行命令添加防火牆
sudo ufw allow from 192.168.174.0/24 to any port nfs
查看防火牆的狀態
sudo ufw status
輸出結果
To Action From
-- ------ ----
2049 ALLOW 192.168.174.0/24
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
NFS客戶端
安裝NFS客戶端
- 在Ubuntu 上安裝NFS客戶端,客戶端的軟件名稱為
nfs-common
sudo apt install nfs-common
- 在Centos 上安裝NFS客戶端,客戶端的軟件名稱為
nfs-utils
sudo yum install nfs-utils
掛載文件系統
客戶端ip為192.168.174.30
,這台機器有對/opt/nfs4/back
有只讀權限,對/opt/nfs4/data
有讀寫權限
創建兩個新目錄作為掛載點
sudo mkdir -p /opt/back
sudo mkdir -p /opt/data
使用mount
掛載文件系統
sudo mount -t nfs -o vers=4 192.168.174.10:/back /opt/back
sudo mount -t nfs -o vers=4 192.168.174.10:/data /opt/data
當掛載NFSV4 文件系統時,需要忽略NFS根目錄,不使用
/opt/nfs4/data
,而是使用/data
使用df -h
命令可以查看NFS是否掛載成功
如果想要持久化掛載,需要修改/etc/fstab
文件,將掛載信息寫入到此文件中
sudo nano /etc/fstab
添加如下內容
192.168.174.10:/back /opt/back nfs defaults,timeo=900,retrans=5,_netdev 0 0
192.168.174.10:/data /opt/data nfs defaults,timeo=900,retrans=5,_netdev 0 0
測試NFS訪問
在/opt/back
中創建文件
sudo touch /backups/test.txt
back
文件系統為只讀權限,會看到Read-only file system
的錯誤信息
以root 身份在/var/data
中中創建測試文件,依然提示Permission denied
sudo touch /var/data/test.txt
原因分析:
/var/data
歸屬於data
用戶,並且這個分享有root_squash
選項,表示會將root用戶映射成nobody
用戶和nogroup
組,導致root用戶對遠程文件夾沒有寫入權限,假如data
用戶在客戶機上存在,並且GID
和UID
和遠程服務器上的一致,則會有權限創建文件