如何在 Ubuntu 20-04 上安裝和配置 NFS 服務器?

公衆號:運維漫談 

編輯:漫談君 

來源鏈接:https://www.wljslmz.cn/1406.html

NFS 或網絡文件系統是一種分佈式文件系統協議,允許您通過網絡共享目錄,使用 NFS,您可以在系統上掛載遠程目錄並像處理本地文件一樣使用遠程計算機上的文件。

默認情況下,NFS 協議未加密,不提供用戶身份驗證,對服務器的訪問受到客戶端 IP 地址或主機名的限制。

本文介紹瞭如何在 Ubuntu 20.04 上設置 NFSv4 服務器。我們還將向您展示如何在客戶端計算機上安裝 NFS 文件系統。

先決條件

我們將使用兩臺機器,一臺運行 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