tunyk avatar

怎樣在Ubuntu 20系統安裝和配置NFS伺服器

🕖 by tunyk

如何在Ubuntu 20.04上設置NFSv4伺服器。 我們還將向您展示如何在用戶端電腦上掛載NFS文件系統。

NFS或網路檔案系統是一種分散式檔案系統協定,使您可以通過網路共享目錄。 使用NFS,您可以在系統上掛載遠端目錄,並像使用本地檔一樣使用遠端電腦上的檔。

默認情況下,NFS協定未加密,並且不提供使用者身份驗證。 對伺服器的訪問受用戶端IP位址或主機名的限制。

先決條件

我們將使用兩台計算機,其中一台運行Ubuntu 20.04(將充當NFS伺服器),另一台運行將在其上安裝共用的任何其他Linux發行版。 伺服器和客戶端應該能夠透過專用網路相互通信。 您可以使用公共IP位址並將伺服器防火牆配置為僅允許來自受信任源的埠上的流量。 2049

本範例中的機器具有以下IP:

1
2
NFS Server IP: 192.168.33.10
NFS Clients IPs: From the 192.168.33.0/24 range

設置NFS伺服器

第一步是設置NFS伺服器。 我們將安裝必要的套件,創建和導出NFS目錄,並配置防火牆。

安裝NFS伺服器

NFS伺服器套件提供運行NFS內核伺服器所需的用戶空間支援。 要安裝該套件,請執行:

1
2
sudo apt update
sudo apt install nfs-kernel-server

安裝完成後,NFS服務將自動啟動。

在Ubuntu 20.04上,NFS版本2被禁用。 版本3和版本4已啟用。 您可以透過執行以下指令來驗證 :cat

1
2
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伺服器使用全域根目錄,並且導出的目錄是相對於此目錄的。 您可以使用綁定安裝將共用安裝點連結到要匯出的目錄。

在此範例中,我們將目錄設置為NFS根目錄。 為了更好地說明如何配置NFS掛載,我們將共用兩個具有不同配置設置的目錄(和)。 在使用者擁有的,並且它的擁有者。 /srv/nfs4``/var/www``/opt/backups``/var/www/``www-data``/opt/backups``root

首先建立根目錄與共享安裝點:

1
2
sudo mkdir -p /srv/nfs4/backups
sudo mkdir -p /srv/nfs4/www

將目錄繫結安裝到共享安裝點:

1
2
sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www

要使繫結安裝在重新啟動後永久存在,請開啟檔案:/etc/fstab

1
sudo nano /etc/fstab

并添加以下几行:

/etc/ fstab

1
2
/opt/backups /srv/nfs4/backups  none   bind   0   0
/var/www     /srv/nfs4/www      none   bind   0   0

导出文件系统

下一步是将要导出的文件系统以及允许访问这些共享的客户端添加到文件中。/etc/exports

导出文件系统的每一行具有以下格式:

1
export host(options)

哪里是导出目录,是可以访问导出的主机名或IP地址/范围,并且是主机选项。export``host``options

打开文件并添加以下行:/etc/exports

1
2
3
4
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)

第一行包含该选项,该选项定义了NFS根目录()。仅允许子网中的客户端访问此NFS卷。该选项是必需的,以共享目录,是一个导出目录的子目录。fsid=0``/srv/nfs4``192.168.33.0/24``crossmnt

第二行显示了如何为一个文件系统指定多个导出规则。允许对整个范围进行读访问,并且仅对IP地址进行读和写访问。该选项告诉NFS在回复之前将更改写入磁盘。192.168.33.0/24``192.168.33.3``sync

最后一行是不言自明的。有关所有可用选项的更多信息,请在终端中输入。man exports

保存文件并导出共享:

1
sudo exportfs -ar

每次修改文件时,都需要运行上面的命令。如果有任何错误或警告,它们将显示在终端上。/etc/exports

要查看当前活动的出口及其状态,请使用:

1
sudo exportfs -v

输出将包括所有份额及其选项。如您所见,还有一些我们尚未在文件中定义的选项。这些是默认选项,如果要更改它们,则需要显式设置这些选项。/etc/exports

1
2
3
4
5
6
/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上,預設情況下處於啟用狀態。 這是有關NFS安全性的最重要的選擇之一。 它防止客戶端連線的根使用者從具有由映射根所安裝的股根特權和至/ / 。 root_squash``UID``GID``nobody``nogroup``UID``GID

為了使用戶端電腦上的用戶能夠訪問,NFS希望用戶端的使用者和組ID與伺服器上的使用者和組ID匹配。 另一種選擇是使用NFSv4 idmapping功能,該功能將使用者和組ID轉換為名稱,反之亦然。

就是這樣。 至此,您已經在Ubuntu伺服器上設置了NFS伺服器。 現在,您可以轉到下一步並配置客戶端,然後連接到NFS伺服器。

防火牆配置

如果要在受防火牆保護的遠端Ubuntu伺服器上安裝Jenkins,則 需要在NFS埠上啟用流量:

1
sudo ufw allow from 192.168.33.0/24 to any port nfs

驗證變更:

1
sudo ufw status

輸出應顯示允許連接埠上的流量:2049

1
2
3
4
5
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 updatesudo 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

為安裝點建立兩個新目錄:

1
sudo mkdir -p /backupssudo mkdir -p /srv/www

您可以在所需的任何位置建立目錄。

使用以下命令掛載匯出的檔案系統:mount

1
2
sudo mount -t nfs -o vers=4 192.168.33.10:/backups /backupssudo mount -t nfs -o vers=4 192.168.33.10:/www /srv/www复制复制
192.168.33.10`NFS伺服器的IP在哪裡。 您也可以使用主機名代替IP位址,但是用戶端計算機需要解析該主機名。 通常,這是通過將主機名映射到檔中的IP來完成的。 `/etc/hosts

掛載NFSv4文件系統時,請忽略NFS根目錄。 使用,而不是。 /backups``/srv/nfs4/backups

使用mount或命令驗證是否成功安裝遠端檔案系統:df

1
df -h

该命令将打印所有已挂载的文件系统。最后两行是已安装的共享:

1
2
3
4
5
6
7
8
9
10
11
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

1
2
3
sudo nano /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

挂载远程文件系统的另一种选择是使用该工具或创建一个systemd单元。autofs

测试NFS访问

让我们通过 在每个共享上创建一个新文件来测试对共享的访问。

首先,尝试使用以下 命令在目录中创建测试文件:/backups``touch

1
sudo touch /backups/test.txt

该文件系统导出为只读和期望,你会看到一个错误信息:/backup``Permission denied

1
touch: cannot touch ‘/backups/test’: Permission denied

接下来,尝试使用以下 命令将测试文件创建为根目录:/srv/www``sudo

1
sudo touch /srv/www/test.txt

同样,您将看到消息。Permission denied

1
touch: cannot touch ‘/srv/www’: Permission denied

如果你还记得,该 目录是拥有 由用户,而且这个比例有选择一套root用户的映射用户和组不具有写权限到远程共享。/var/www``www-data``root_squash``nobody``nogroup

假设你有一个客户机上使用具有相同和作为远程服务器(如果,例如,你应该是这样的安装nginx的 在两台机器上),你可以尝试创建一个文件作为用户:www-data``UID``GID``www-data

1
sudo -u www-data touch /srv/www/test.txt

该命令将不显示任何输出,表示文件已成功创建。

要验证它列出目录中的文件,请执行以下操作:/srv/www

1
ls -la /srv/www

输出应显示新创建的文件:

1
2
3
4
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

1
sudo umount /backups

如果在檔中定義了掛載點,請確保刪除該行或通過在該行的開頭添加註釋掉它。 /etc/fstab``#

結論

我們已經向您展示了如何設置NFS伺服器以及如何在用戶端電腦上掛載遠端檔案系統。 如果要在生產中實現NFS並共用敏感數據,則啟用kerberos身份驗證是一個好主意。

作為NFS的替代方法,可以使用SSHFS透過SSH連接安裝遠端目錄。 SSHFS預設情況下是加密的,並且更易於配置和使用。

💘 相关文章

写一条评论

Based on Golang + fastHTTP + sdb | go1.16.4 Processed in 1ms