如何在 Ubuntu 20-04 上安裝和配置 NFS 服務器?
公衆號:運維漫談
編輯:漫談君
來源鏈接:https://www.wljslmz.cn/1406.html
NFS 或網絡文件系統是一種分佈式文件系統協議,允許您通過網絡共享目錄,使用 NFS,您可以在系統上掛載遠程目錄並像處理本地文件一樣使用遠程計算機上的文件。
默認情況下,NFS 協議未加密,不提供用戶身份驗證,對服務器的訪問受到客戶端 IP 地址或主機名的限制。
先決條件
我們將使用兩臺機器,一臺運行 Ubuntu 20.04,它將充當 NFS 服務器,另一臺運行我們將安裝共享的任何其他 Linux 發行版。服務器和客戶端應該能夠通過專用網絡相互通信。2049 您可以使用公共 IP 地址並將服務器防火牆配置爲僅允許來自受信任來源的端口上的流量。
此示例中的機器具有以下 IP:
NFS Server IP: 192.168.33.10
NFS Clients IPs: From the 192.168.33.0/24 range
設置 NFS 服務器
第一步是設置 NFS 服務器。我們將安裝必要的軟件包,創建和導出 NFS 目錄,並配置防火牆。
安裝 NFS 服務器
NFS 服務器包提供運行 NFS 內核服務器所需的用戶空間支持。要安裝軟件包,請運行:
sudo apt update
sudo apt install nfs-kernel-server
安裝完成後,NFS 服務將自動啓動。
在 Ubuntu 20.04 上,NFS 版本 2 被禁用。版本 3 和 4 已啓用。cat 您可以通過運行以下命令來驗證 :
sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
NFSv2 現在已經很老了,沒有理由啓用它。
NFS 服務器配置在 / etc/default/nfs-kernel-server 和 / etc/default/nfs-common 文件中定義。對於大多數情況,默認設置就足夠了。
創建文件系統
NFSv4 服務器使用全局根目錄,導出的目錄是相對於這個目錄的。您可以使用綁定掛載將共享掛載點鏈接到要導出的目錄。
在本例中,我們將 / srv/nfs4 目錄設置爲 NFS 根目錄。爲了更好地解釋如何配置 NFS 掛載,我們將共享兩個具有不同配置設置的目錄 (/var/www 和)。歸用戶所有 / opt/backups,歸./var/www/www-data/opt/backupsroot
首先創建根目錄和共享掛載點:
sudo mkdir -p /srv/nfs4/backups
sudo mkdir -p /srv/nfs4/www
將掛載目錄綁定到共享掛載點:
sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www
要在重新啓動後使綁定掛載永久化,請打開 / etc/fstab 文件:
sudo nano /etc/fstab
並添加以下行:
/etc/fstab
/opt/backups /srv/nfs4/backups none bind 0 0
/var/www /srv/nfs4/www none bind 0 0
導出文件系統
下一步是將要導出的文件系統和允許訪問這些共享的客戶端添加到 / etc/exports 文件中。
導出文件系統的每一行都具有以下形式:
export host(options)
export 導出目錄在哪裏,host 是可以訪問導出的主機名或 IP 地址 / 範圍,並且 options 是主機選項。
打開 / etc/exports 文件並添加以下行:
sudo nano /etc/exports
/srv/nfs4 192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0)
/srv/nfs4/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)
/srv/nfs4/www 192.168.33.20(rw,sync,no_subtree_check)
第一行包含 fsid=0 定義 NFS 根目錄 (/srv/nfs4) 的選項。192.168.33.0/24 僅允許子網中的客戶端訪問此 NFS 卷。該 crossmnt 選項是共享作爲導出目錄的子目錄的目錄所必需的。
第二行顯示瞭如何爲一個文件系統指定多個導出規則。允許對整個 192.168.33.0/24 範圍進行讀取訪問,並且只能對 192.168.33.3IP 地址進行讀取和寫入訪問。該 sync 選項告訴 NFS 在回覆之前將更改寫入磁盤。
最後一行是不言自明的。有關 man exports 終端中所有可用選項類型的更多信息。
保存文件並導出共享:
sudo exportfs -ar
每次修改 / etc/exports 文件時都需要運行上面的命令。如果有任何錯誤或警告,它們將顯示在終端上。
要查看當前活動的導出及其狀態,請使用:
sudo exportfs -v
輸出將包括所有共享及其選項。如您所見,還有一些我們沒有在 / etc/exports 文件中定義的選項。這些是默認選項,如果您想更改它們,您需要明確設置這些選項。
/srv/nfs4/backups
192.168.33.3(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/www 192.168.33.20(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4 192.168.33.0/24(rw,wdelay,crossmnt,root_squash,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/backups
192.168.33.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
在 Ubuntu 上,root_squash 默認啓用。這是有關 NFS 安全性的最重要選項之一。UID 它通過將 root 映射到 / /GID 來防止從客戶端連接的 root 用戶對掛載的共享具有 root 權限。nobodynogroup UIDGID
爲了讓客戶端機器上的用戶能夠訪問,NFS 期望客戶端的用戶和組 ID 與服務器上的用戶和組 ID 匹配。另一種選擇是使用 NFSv4 idmapping 功能,將用戶和組 ID 轉換爲名稱,反之亦然。
而已。至此,您已經在 Ubuntu 服務器上設置了 NFS 服務器。您現在可以進行下一步並配置客戶端並連接到 NFS 服務器。
防火牆配置
如果要在受防火牆保護的遠程 Ubuntu 服務器上安裝 Jenkins,則 需要在 NFS 端口上啓用流量:
sudo ufw allow from 192.168.33.0/24 to any port nfs
驗證更改:
sudo ufw status
輸出應顯示端口上的流量 2049 是允許的:
To Action From
-- ------ ----
2049 ALLOW 192.168.33.0/24
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
設置 NFS 客戶端
現在 NFS 服務器已設置並導出共享,下一步是配置客戶端並掛載遠程文件系統。
我們將專注於 Linux 系統,但您也可以 在 macOS 和 Windows 機器上安裝 NFS 共享。
安裝 NFS 客戶端
在客戶端機器上,我們只需要安裝掛載遠程 NFS 文件系統所需的工具。
在 Debian 和 Ubuntu 上安裝 NFS 客戶端
包含用於在基於 Debian 的發行版上掛載 NFS 文件系統的程序的軟件包的名稱是 nfs-common. 要安裝它,請運行:
sudo apt update
sudo apt install nfs-common
在 CentOS 和 Fedora 上安裝 NFS 客戶端
在 Red Hat 及其衍生產品上,安裝 nfs-utils 軟件包:
sudo yum install nfs-utils
掛載文件系統
我們將在具有 IP 的客戶端計算機上工作 192.168.33.20,它具有對文件系統的讀寫訪問權限以及對 / srv/nfs4/www 文件系統的只讀訪問權限 / srv/nfs4/backups。
爲掛載點創建兩個新目錄:
sudo mkdir -p /backups
sudo mkdir -p /srv/www
您可以在任何您想要的位置創建目錄。
使用以下命令掛載導出的文件系統 mount :
sudo mount -t nfs -o vers=4 192.168.33.10:/backups /backups
sudo mount -t nfs -o vers=4 192.168.33.10:/www /srv/www
192.168.33.10NFS 服務器的 IP 在哪裏。您也可以使用主機名而不是 IP 地址,但它需要能夠被客戶端機器解析。這通常通過將主機名映射到 / etc/hosts 文件中的 IP 來完成。
掛載 NFSv4 文件系統時,省略 NFS 根目錄。使用 / backups, 而不是 / srv/nfs4/backups.
df 使用 mount 或命令驗證遠程文件系統是否已成功掛載:
df -h
該命令將打印所有已安裝的文件系統。最後兩行是掛載的共享:
Filesystem Size Used Avail Use% Mounted on
udev 951M 0 951M 0% /dev
tmpfs 199M 676K 199M 1% /run
/dev/sda3 124G 2.8G 115G 3% /
tmpfs 994M 0 994M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/sda1 456M 197M 226M 47% /boot
tmpfs 199M 0 199M 0% /run/user/1000
192.168.33.10:/backups 124G 2.8G 115G 3% /backups
192.168.33.10:/www 124G 2.8G 115G 3% /srv/www
要在重新啓動時永久掛載,請打開 / etc/fstab 文件並添加以下行:
sudo nano /etc/fstab
/etc/fstab
192.168.33.10:/backups /backups nfs defaults,timeo=900,retrans=5,_netdev 0 0
192.168.33.10:/www /srv/www nfs defaults,timeo=900,retrans=5,_netdev 0 0
有關掛載 NFS 文件系統時可用選項的信息,請輸入 man nfs 您的終端。
掛載遠程文件系統的另一個選項是使用該 autofs 工具或創建一個 systemd 單元。
測試 NFS 訪問
讓我們通過在每個共享上創建一個新文件來測試對共享的訪問 。
首先,嘗試使用以下 命令在 / backups 目錄中創建一個測試文件:touch
sudo touch /backups/test.txt
文件系統以 / backup 只讀方式導出,如預期的那樣,您將看到一條 Permission denied 錯誤消息:
touch: cannot touch ‘/backups/test’: Permission denied
接下來,嘗試使用以下 命令 / srv/www 以 root 身份在目錄中創建一個測試文件:sudo
sudo touch /srv/www/test.txt
再次,您將看到 Permission denied 消息。
touch: cannot touch ‘/srv/www’: Permission denied
如果您還記得,該 / var/www 目錄歸用戶所有 ,www-data 並且此共享具有 root_squash 將根用戶映射到對遠程共享沒有寫權限的 nobody 用戶和組的選項集。nogroup
假設您 www-data 在客戶端機器上使用了與遠程服務器相同 UID 的用途 GID(例如,如果您在兩臺機器上都安裝了 nginx ,則應該是這種情況 ),您可以嘗試以 user 身份創建文件 www-data:
sudo -u www-data touch /srv/www/test.txt
該命令將不顯示任何輸出,這意味着文件已成功創建。
要驗證它列出目錄中的文件 / srv/www:
ls -la /srv/www
輸出應顯示新創建的文件:
drwxr-xr-x 3 www-data www-data 4096 Apr 10 22:18 .
drwxr-xr-x 3 root root 4096 Apr 10 22:29 ..
-rw-r--r-- 1 www-data www-data 0 Apr 10 21:58 index.html
-rw-r--r-- 1 www-data www-data 0 Apr 10 22:18 test.txt
卸載 NFS 文件系統
如果不再需要遠程 NFS 共享,您可以使用該 umount 命令將其卸載爲任何其他已安裝的文件系統。
例如,要卸載 / backup 共享,您將運行:
sudo umount /backups
如果在文件中定義了掛載點 / etc/fstab,請確保刪除該行或通過在行首添加將其註釋掉 #。
結論
我們已經向您展示瞭如何設置 NFS 服務器以及如何在客戶端計算機上安裝遠程文件系統。如果您在生產中實現 NFS 並共享敏感數據,那麼啓用 kerberos 身份驗證是一個好主意。
作爲 NFS 的替代方案,您可以使用 SSHFS 通過 SSH 連接掛載遠程目錄。SSHFS 在默認情況下是加密的,並且更易於配置和使用。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/WJx2oAQ4y1e_DPUguhQLhA