我正在尝试在我的 ubuntu 16.04 上安装 Open edx devstack。为此,nfsd 客户端需要在我的 ubuntu 上运行。我使用命令安装了它:
sudo apt-get update
sudo apt-get install nfs-common
但是当我使用下面的命令时,
sudo nfsd status or sudo nfsd start
它给出错误:
sudo: nfsd: command not found.
告诉我如何在我的 ubuntu 上安装 nfs 客户端,以便安装 open edx devstack?
答案1
我认为这个链接对你有用。
在本指南中,我们将介绍如何配置 NFS 挂载。
先决条件
在本教程中,我们将使用两台服务器:一台将与另一台共享其部分文件系统。要继续,您将需要:
1. 两台 Ubuntu 16.04 服务器,每台服务器都有一个具有权限和私有网络的非 root 用户sudo
(如果可用)。
要获得设置具有这些权限的用户的帮助,请按照我们的“使用 Ubuntu 16.04 进行初始服务器设置”指南进行操作。
有关设置私人网络的帮助,请参阅如何设置和使用 DigitalOcean 私人网络。
在整个教程中,我们将共享其目录的服务器称为主机,将挂载这些目录的服务器称为客户端。为了保持它们的一致性,我们将使用以下 IP 地址作为主机和客户端值的替代:
主机:203.0.113.0 客户端:203.0.113.256
您应该用您自己的主机和客户端 IP 地址替换这些值。
第 1 步 - 下载并安装组件
我们将首先在每台服务器上安装必要的组件。
在主机上
在主机服务器上,我们将安装nfs 内核服务器包,这将允许我们共享目录。由于这是我们在此会话中使用 apt 执行的第一个操作,因此我们将在安装之前刷新本地包索引:
sudo apt-get update
sudo apt-get install nfs-kernel-server
安装这些包后,切换到客户端服务器。
在客户端
在客户端服务器上,我们需要安装一个名为 nfs-common 的软件包,它提供 NFS 功能,但不包含不需要的服务器组件。同样,我们将在安装之前刷新本地软件包索引,以确保我们拥有最新的信息:
sudo apt-get update
sudo apt-get install nfs-common
现在两个服务器都有必要的包,我们可以开始配置它们了。
第 2 步 - 在主机上创建共享目录
我们将共享两个具有不同配置设置的独立目录,以说明针对超级用户访问配置 NFS 挂载的两种主要方法。
超级用户可以在其系统上的任何地方执行任何操作。但是,NFS 挂载的目录不是挂载它们的系统的一部分,因此默认情况下,NFS 服务器拒绝执行需要超级用户权限的操作。此默认限制意味着客户端上的超级用户无法以 root 身份写入文件、重新分配所有权或在 NFS 挂载上执行任何其他超级用户任务。
然而,有时,客户端系统上有受信任的用户,他们需要能够在挂载的文件系统上执行这些操作,但不需要主机上的超级用户访问权限。可以配置 NFS 服务器以允许这样做,尽管这会带来风险,因为这样的用户可能会获得对整个主机系统的 root 访问权限。
示例 1:导出通用安装座
在第一个示例中,我们将创建一个通用的 NFS 挂载,该挂载使用默认的 NFS 行为,使客户端计算机上具有 root 权限的用户难以使用这些客户端超级用户权限与主机交互。您可以使用类似的东西来存储使用内容管理系统上传的文件,或为用户创建空间以轻松共享项目文件。
首先,创建一个名为nfs
:
host$ sudo mkdir /var/nfs/general -p
由于我们使用 sudo 创建它,因此该目录在主机上由 root 拥有。
host$ ls -la /var/nfs/general
输出
4 drwxr-xr-x 2 root root 4096 7月 25 15:26
作为一项安全措施,NFS 会将客户端上的任何 root 操作转换为 nobody:nogroup 凭据。因此,我们需要更改目录所有权以匹配这些凭据。
host$ sudo chown nobody:nogroup /var/nfs/general
此目录现在可以导出了。
示例 2:导出主目录
在我们的第二个示例中,目标是使存储在主机上的用户主目录可在客户端服务器上使用,同时允许这些客户端服务器的受信任管理员获得方便地管理用户所需的访问权限。
为此,我们将导出/home
目录。由于它已经存在,我们不需要创建它。我们也不会更改权限。如果我们这样做,这会给主机上有主目录的任何人带来各种问题。
第 3 步 - 在主机服务器上配置 NFS 导出
接下来,我们将深入研究 NFS 配置文件来设置这些资源的共享。
/etc/exports
使用 root 权限在文本编辑器中打开该文件:
host$ sudo nano /etc/exports
该文件有注释,显示了每个配置行的一般结构。语法基本上是:
/etc/exports
directory_to_share client(share_option1,...,share_optionN)
我们需要为计划共享的每个目录创建一行。由于我们的示例客户端的 IP 为 203.0.113.256,因此我们的行将如下所示。请务必更改 IP 以匹配您的客户端:
/etc/exports
/var/nfs/general 203.0.113.256(rw,sync,no_subtree_check)
/home 203.0.113.256(rw,sync,no_root_squash,no_subtree_check)
我们对两个目录使用相同的配置选项,除了 no_root_squash。让我们看看每个选项的含义。
读写:此选项授予客户端计算机对该卷的读取和写入访问权限。
同步:此选项强制 NFS 在回复之前将更改写入磁盘。由于回复反映了远程卷的实际状态,因此可实现更稳定、更一致的环境。但是,它也会降低文件操作的速度。
不检查子树:此选项可防止子树检查,即主机必须针对每个请求检查文件是否仍在导出树中的过程。如果在客户端打开文件时重命名该文件,则会导致很多问题。在几乎所有情况下,最好禁用子树检查。
禁止root权限:默认情况下,NFS 会将来自 root 用户的请求远程转换为服务器上的非特权用户。这是作为安全功能设计的,以防止客户端上的 root 帐户以 root 身份使用主机的文件系统。no_root_squash 会针对某些共享禁用此行为。完成更改后,保存并关闭文件。然后,要使共享可供您配置的客户端使用,请使用以下命令重新启动 NFS 服务器:
host$ sudo systemctl restart nfs-kernel-server
不过,在实际使用新共享之前,你需要确保防火墙规则允许访问共享的流量
第4步 - 调整主机上的防火墙
首先,让我们检查防火墙状态以查看它是否已启用,如果已启用,请查看当前允许的内容:
sudo ufw status
输出
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
在我们的系统上,只允许 SSH 流量,因此我们需要为 NFS 流量添加规则。
对于许多应用程序,您可以使用 sudo ufw app list 并按名称启用它们,但 nfs 不是其中之一。由于 ufw 还会检查 /etc/services 以查找服务的端口和协议,因此我们仍然可以按名称添加 NFS。最佳实践建议您启用最严格的规则,该规则仍将允许您要允许的流量,因此我们将具体说明,而不是从任何地方启用流量。
使用以下命令在主机上打开端口 2049,确保替换客户端的 IP 地址:
host$ sudo ufw allow from 203.0.113.256 to any port nfs
您可以通过输入以下内容来验证更改:
host$ sudo ufw status
您应该在输出中看到允许来自端口 2049 的流量:
输出
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
2049 ALLOW 203.0.113.256
OpenSSH (v6) ALLOW Anywhere (v6)
这确认 UFW 只允许来自我们客户端机器的端口 2049 上的 NFS 流量。
第 5 步 - 在客户端上创建挂载点
现在主机服务器已配置并提供其共享,我们将准备我们的客户端。
为了使远程共享在客户端上可用,我们需要将主机目录挂载在空的客户端目录上。
注意:如果挂载点中有文件和目录,则一旦挂载 NFS 共享,它们就会被隐藏。如果挂载在已存在的目录中,请确保该目录为空。
我们将为我们的坐骑创建两个目录:
client$ sudo mkdir -p /nfs/general
client$ sudo mkdir -p /nfs/home
第 6 步 - 在客户端上安装目录
现在我们有地方放置远程共享,并且我们已经打开了防火墙,我们可以通过寻址主机服务器来挂载共享,在本指南中是 203.0.113.0,如下所示:
client$ sudo mount 203.0.113.0:/var/nfs/general /nfs/general
client$ sudo mount 203.0.113.0:/home /nfs/home
这些命令应该将主机上的共享安装到客户端计算机上。您可以通过多种方式再次检查它们是否已成功安装。您可以使用普通mount
或findmnt
命令进行检查,但df -h
会为您提供更人性化的输出,说明 nfs 共享的磁盘使用情况如何以不同的方式显示:
client$ df -h
输出
Filesystem Size Used Avail Use% Mounted on
udev 238M 0 238M 0% /dev
tmpfs 49M 628K 49M 2% /run
/dev/vda1 20G 1.2G 18G 7% /
tmpfs 245M 0 245M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 245M 0 245M 0% /sys/fs/cgroup
tmpfs 49M 0 49M 0% /run/user/0
203.0.113.0:/home 20G 1.2G 18G 7% /nfs/home
203.0.113.0:/var/nfs/general 20G 1.2G 18G 7% /nfs/general
我们挂载的两个共享都显示在底部。由于它们是从同一文件系统挂载的,因此它们显示相同的磁盘使用情况。要查看每个挂载点下实际使用的空间量,请使用磁盘使用情况命令 du 和挂载路径。该-s
标志将提供使用情况摘要,而不是显示每个文件的使用情况。将-h
打印人类可读的输出。
例如:
du -sh /nfs/home
输出
36K /nfs/home
这表明整个主目录的内容仅使用了 20K 的可用空间。
第 7 步 - 测试 NFS 访问
接下来,让我们通过向每个共享写入一些内容来测试对共享的访问。
示例 1:通用共享
首先,将测试文件写入共享/var/nfs/general
。
client$ sudo touch /nfs/general/general.test
然后,检查其所有权:
client$ ls -l /nfs/general/general.test
输出
-rw-r--r-- 1 nobody nogroup 0 Aug 1 13:31 /nfs/general/general.test
由于我们挂载了此卷,但没有改变 NFS 的默认行为,并通过命令以客户端计算机的 root 用户身份创建了文件sudo
,因此文件的所有权默认为 nobody:nogroup。客户端超级用户将无法在此 NFS 挂载共享上执行典型的管理操作,例如更改文件的所有者或为用户组创建新目录。
示例 2:主目录共享
要比较通用共享和主目录共享的权限,请以相同的方式创建文件主目录:
client$ sudo touch /nfs/home/home.test
然后查看文件的所有权:
client$ ls -l /nfs/home/home.test
输出
-rw-r--r-- 1 root root 0 Aug 1 13:32 /nfs/home/home.test
我们home.test
通过命令以 root 身份创建sudo
,与创建文件的方式完全相同general.test
。但是,在这种情况下,它归 root 所有,因为我们no_root_squash
在此挂载上指定选项时覆盖了默认行为。这允许客户端计算机上的 root 用户充当 root,并使用户帐户的管理更加方便。同时,这意味着我们不必授予这些用户在主机上的 root 访问权限。
第8步 - 在启动时安装远程NFS目录
我们可以通过将远程 NFS 共享添加到/etc/fstab
客户端上的文件中,在启动时自动挂载它们。
使用 root 权限在文本编辑器中打开此文件:
client$ sudo nano /etc/fstab
在文件底部,我们将为每个共享添加一行。它们看起来如下:
/etc/fstab
. . .
203.0.113.0:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
203.0.113.0:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
注意:有关我们在此处指定的选项的更多信息,可在手册页中找到,该手册页描述了
fstab
使用 mannfs
命令进行 NFS 挂载。
客户端服务器将在启动时自动挂载远程分区,尽管建立连接和共享可用可能需要一些时间。
第 9 步 - 卸载 NFS 远程共享
如果您不再希望远程目录挂载在您的系统上,您可以通过移出共享的目录结构并卸载来卸载它,如下所示:
client$ cd ~
client$ sudo umount /nfs/home
client$ sudo umount /nfs/general
这将删除远程共享,只留下可访问的本地存储:
client$ df -h
输出
Filesystem Size Used Avail Use% Mounted on
/dev/vda 59G 1.3G 55G 3% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 2.0G 12K 2.0G 1% /dev
tmpfs 396M 320K 396M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 2.0G 0 2.0G 0% /run/shm
none 100M 0 100M 0% /run/user
如果您还想防止它们在下次重新启动时重新挂载,请编辑/etc/fstab
并删除该行,或通过在行首放置 # 符号将其注释掉。您还可以通过删除该auto
选项来防止自动挂载,这将允许您手动挂载它。