当前位置: 首页 > news >正文

树莓派超全系列教程文档--(55)如何使用网络文件系统NFS

如何使用网络文件系统NFS

    • 网络文件系统 (NFS)
      • 设置基本 NFS 服务器
        • Portmap 锁定(可选)
      • 配置 NFS 客户端
        • 端口映射锁定(可选)
      • 配置复杂的 NFS 服务器
        • 组权限
        • DNS(可选,仅在使用 DNS 时)
        • NIS(可选,仅在使用 NIS 时)
        • 端口映射锁定(可选)
        • 软件包安装和配置
        • 重新启动服务
        • 需要考虑的安全事项
      • 故障排除

文章来源: http://raspberry.dns8844.cn/documentation

原文网址

网络文件系统 (NFS)

网络文件系统 (NFS) 允许您与同一网络上的其他计算机或设备共享位于一台联网计算机上的目录。目录所在的计算机称为 服务器,连接到该服务器的计算机或设备称为客户端。客户端通常通过 mount 共享目录,使其成为其自身目录结构的一部分。共享目录是共享资源或网络共享的一个示例。

NFS 是在 Linux/Unix 环境中创建简单 NAS(网络附加存储)的流行方法。

NFS 可能最适合更永久的网络挂载目录,例如 /home 目录或经常访问的共享资源。如果您想要一个来宾用户可以轻松连接的网络共享,Samba 更适合这项任务。在各个操作系统中都更容易获得临时挂载和分离 Samba 共享的工具。

在部署 NFS 之前,您应该熟悉:

  • Linux 文件和目录权限
  • 挂载和卸载文件系统

设置基本 NFS 服务器

使用以下命令安装所需的软件包:

$ sudo apt install nfs-kernel-server

为了便于维护,我们将所有 NFS 导出隔离在单个目录中,并使用 --bind 选项将实际目录挂载到该目录中。

假设我们要导出用户的主目录,这些目录位于 /home/users 中。首先,我们创建导出文件系统:

$ sudo mkdir -p /export/users

TIP: 如果您计划配置 LDAP/NIS 身份验证,请跳过下面的 chmod 步骤。

授予 /export/export/users 读取、写入和执行权限 ( 777 ),以便您可以从客户端访问 NFS 共享,而无需 LDAP/NIS 身份验证:

$ chmod -R 777 /export

接下来,使用以下命令挂载真正的 users 目录:

$ sudo mount --bind /home/users /export/users

为了避免每次重启后都重新输入这些内容,我们将以下行添加到 /etc/fstab

/home/users    /export/users   none    bind  0  0

有三个配置文件与 NFS 服务器相关:

. /etc/default/nfs-kernel-server
. /etc/default/nfs-common
. /etc/exports

目前 /etc/default/nfs-kernel-server 中唯一重要的选项是 NEED_SVCGSSD 。默认情况下,它设置为 "no" ,这很好,因为我们这次不激活 NFSv4 安全性。

为了自动映射 ID 名称,文件 /etc/idmapd.conf 必须存在于客户端和服务器上,并且内容相同且域名正确。此外,此文件的 Mapping 部分应包含以下行:

[Mapping]Nobody-User = nobody
Nobody-Group = nogroup

但是,请注意,客户端对 Nobody-User 和 Nobody-Group 可能有不同的要求。例如,在 RedHat 变体上,两者都是 nfsnobody 。如果您不确定,请通过以下命令检查是否存在 nobodynogroup

$ cat /etc/passwd
$ cat /etc/group

这样,服务器和客户端就不需要用户共享相同的 UID/GUID。对于使用基于 LDAP 的身份验证的用户,请在客户端的 idmapd.conf 中添加以下几行:

[Translation]Method = nsswitch

这将让 idmapd 知道查看 nsswitch.conf 以确定应在何处查找凭据信息。如果您的 LDAP 身份验证已在运行,则 nsswitch 不需要进一步解释。

要将我们的目录导出到本地网络 192.168.1.0/24 ,请将以下两行添加到 /etc/exports

/export       192.168.1.0/24(rw,fsid=0,insecure,no_subtree_check,async)
/export/users 192.168.1.0/24(rw,nohide,insecure,no_subtree_check,async)
Portmap 锁定(可选)

NFS 上的文件对网络上的任何人都开放。作为一项安全措施,您可以限制对指定客户端的访问。

将以下行添加到 /etc/hosts.deny

rpcbind mountd nfsd statd lockd rquotad : ALL

通过首先阻止所有客户端,只有 /etc/hosts.allow (下面添加)中的客户端才被允许访问服务器。

现在将以下行添加到 /etc/hosts.allow

rpcbind mountd nfsd statd lockd rquotad : <list of IPv4s>

其中 <list of IPv4s> 是服务器和所有客户端的 IP 地址列表。(这些必须是 IP 地址,因为 rpcbind 有限制,它支持主机名)。请注意,如果已经设置了 NIS,可以直接将这些地址添加到同一行。

请确保授权 IP 地址列表包含 localhost 地址( 127.0.0.1 ),因为 Ubuntu 最新版本的启动脚本使用 rpcinfo 命令来发现 NFSv3 支持,如果 localhost 无法连接,该命令将被禁用。

最后,要使更改生效,请重新启动服务:

$ sudo systemctl restart nfs-kernel-server

配置 NFS 客户端

现在您的服务器正在运行,您需要设置任何客户端以便能够访问它。首先,安装所需的软件包:

$ sudo apt install nfs-common

在客户端,我们可以使用一个命令挂载:

$ mount -t nfs -o proto=tcp,port=2049 <nfs-server-IP>:/ /mnt

您还可以指定 NFS 服务器主机名而不是其 IP 地址,但在这种情况下,您需要确保主机名可以在客户端解析为 IP。确保始终解析此 IP 的可靠方法是使用 /etc/hosts 文件。

请注意,在 NFSv4 中不需要 <nfs-server-IP>:/export ,而在 NFSv3 中则不需要。根导出 :/ 默认为使用 fsid=0 导出。

我们还可以使用以下命令挂载导出的子树:

$ mount -t nfs -o proto=tcp,port=2049 <nfs-server-IP>:/users /home/users

为确保每次重新启动时都挂载该子树,请在 /etc/fstab 中添加以下行:

<nfs-server-IP>:/ /mnt nfs auto 0 0

如果挂载后, /proc/mounts 中的条目显示为 <nfs-server-IP>:// (带有两个斜杠),则您可能需要在 /etc/fstab 中指定两个斜杠,否则 umount 可能会提示找不到挂载。

端口映射锁定(可选)

将以下行添加到 /etc/hosts.deny

rpcbind : ALL

通过首先阻止所有客户端,只有 /etc/hosts.allow (下面添加)中的客户端才被允许访问服务器。

现在将以下行添加到 /etc/hosts.allow

rpcbind : <NFS server IP address>

其中 <NFS server IP address> 是服务器的 IP 地址。

配置复杂的 NFS 服务器

NFS 用户权限基于用户 ID (UID)。客户端上任何用户的 UID 都必须与服务器上的 UID 匹配,用户才能访问。执行此操作的典型方法是:

  • 手动密码文件同步
  • 使用 LDAP
  • 使用 DNS
  • 使用 NIS

请注意,在主用户具有 root 访问权限的系统上,您必须小心:该用户可以更改系统上的 UID,以允许自己访问任何人的文件。本页假设管理团队是唯一具有 root 访问权限的组,并且他们都受到信任。其他任何内容都代表更高级的配置,这里不再赘述。

组权限

用户的文件访问权限由他们在客户端上的组成员身份决定,而不是服务器上的组成员身份。但是,有一个重要的限制:从客户端传递到服务器的组最多为 16 个,如果用户在客户端上是 16 个以上组的成员,则某些文件或目录可能会意外无法访问。

DNS(可选,仅在使用 DNS 时)

将任何客户端名称和 IP 地址添加到 /etc/hosts。(服务器的 IP 地址应该已经存在。)这样可以确保即使 DNS 发生故障,NFS 仍能正常工作。或者,如果您愿意,也可以依赖 DNS - 这取决于您。

NIS(可选,仅在使用 NIS 时)

这适用于使用 NIS 的客户端。否则,您无法使用网络组,并且应该在 /etc/exports 中指定单独的 IP 或主机名。请阅读 man netgroup 中的 BUGS 部分以获取更多信息。

首先,编辑 /etc/netgroup 并添加一行来对您的客户端进行分类(此步骤不是必需的,但是为了方便):

myclients (client1,,) (client2,,) ...

其中 myclients 是网络组名称。

接下来运行此命令重建 NIS 数据库:

$ sudo make -C /var/yp

文件名 yp 指的是黄页,即 NIS 的前身。

端口映射锁定(可选)

将以下行添加到 /etc/hosts.deny

rpcbind mountd nfsd statd lockd rquotad : ALL

通过首先阻止所有客户端,只有 /etc/hosts.allow (下面添加)中的客户端才被允许访问服务器。

考虑将以下行添加到 /etc/hosts.allow

rpcbind mountd nfsd statd lockd rquotad : <list of IPs>

其中 <list of IPs> 是服务器和所有客户端的 IP 地址列表。由于 rpcbind 中的限制,这些必须是 IP 地址。请注意,如果已经设置了 NIS,则只需将这些地址添加到同一行即可。

软件包安装和配置

安装必要的软件包:

$ sudo apt install rpcbind nfs-kernel-server

编辑 /etc/exports 并添加共享:

/home @myclients(rw,sync,no_subtree_check)
/usr/local @myclients(rw,sync,no_subtree_check)

上述示例将 /home/usr/local 共享给 myclients 网络组中的所有客户端。

/home 192.168.0.10(rw,sync,no_subtree_check) 192.168.0.11(rw,sync,no_subtree_check)
/usr/local 192.168.0.10(rw,sync,no_subtree_check) 192.168.0.11(rw,sync,no_subtree_check)

上述示例将 /home/usr/local 共享给两个具有静态 IP 地址的客户端。如果您希望允许私有网络中指定 IP 地址范围内的所有客户端访问,请考虑以下操作:

/home 192.168.0.0/255.255.255.0(rw,sync,no_subtree_check)
/usr/local 192.168.0.0/255.255.255.0(rw,sync,no_subtree_check)

此处, rw 使共享可读/写, sync 要求服务器仅在任何更改刷新到磁盘后才回复请求。这是最安全的选项;async 速度更快,但很危险。如果您正在考虑其他选项,强烈建议您阅读 man exports

设置 /etc/exports 后,导出共享:

$ sudo exportfs -ra

每当修改 /etc/exports 时,您都需要运行此命令。

重新启动服务

重新启动 rpcbind 和 NFS 以使更改生效:

$ sudo systemctl restart rpcbind
$ sudo systemctl restart nfs-kernel-server
需要考虑的安全事项

除了上面讨论的 UID 问题之外,还应注意,攻击者可能会伪装成允许映射共享的机器,这允许他们创建任意 UID 来访问您的文件。一个潜在的解决方案是 IPSec。您可以将所有域成员设置为仅通过 IPSec 相互通信,这将有效地验证您的客户端是否是它所说的那个客户端。

IPSec 的工作原理是使用服务器的公钥加密发往服务器的流量,然后服务器发回使用客户端的公钥加密的所有回复。流量使用相应的私钥解密。如果客户端没有它应该拥有的密钥,它就无法发送或接收数据。

IPSec 的替代方案是物理上独立的网络。这需要单独的网络交换机和单独的以太网卡,以及该网络的物理安全性。

故障排除

只有在您成功登录并且您的主目录已解密后,才能在加密的主目录中安装 NFS 共享。这意味着使用 /etc/fstab 在启动时安装 NFS 共享将不起作用,因为您的主目录在安装时尚未解密。有一个简单的方法可以使用符号链接来解决这个问题:

. 创建一个备用目录来安装 NFS 共享:

$ sudo mkdir /nfs
$ sudo mkdir /nfs/music

. 编辑 /etc/fstab 以将 NFS 共享挂载到该目录中:

nfsServer:music    /nfs/music    nfs    auto    0 0

. 在您的 home 中创建一个符号链接,指向实际的挂载位置。例如,在这种情况下,首先删除已经存在的 Music 目录:

$ rmdir /home/user/Music
$ ln -s /nfs/music/ /home/user/Music

上一篇 – 树莓派超全系列教程文档–(54)如何使用rsync在计算机之间同步文件夹
下一篇 – 树莓派超全系列教程文档–(56)如何使用Samba共享文件夹

相关文章:

  • Symbol as Points: Panoptic Symbol Spotting via Point-based Representation
  • 【Redis】Redis 的常见客户端汇总
  • 《Sora模型中Transformer如何颠覆U-Net》
  • SpringBoot3项目架构设计与模块解析
  • 制作官网水平导航栏
  • Grafana-ECharts应用讲解(玫瑰图示例)
  • 计算机组成原理(计算篇)
  • minimatch 详解:功能、语法与应用场景
  • quickbi-突出显示指定行
  • STL——栈和队列和优先队列
  • 【计组】真题 2015 大题
  • SELinux是什么以及如何编写SELinux策略
  • 【YOLO 系列】基于YOLO的飞机表面缺陷智能检测系统【python源码+Pyqt5界面+数据集+训练代码】
  • USB-C/HDMI 2.0 2:1 SW,支持4K60HZ
  • Vue3实现拖拽改变元素大小
  • 2025年ESWA SCI1区TOP,元组引导差分进化算法TLDE+黑箱优化,深度解析+性能实测
  • 蒙特卡罗模拟: 高级应用的思路和实例
  • LeetCode | 滑动窗口的原理及真题解析
  • 驱动:字符驱动操控硬件
  • Nginx部署vue项目, 无法直接访问其他路径的解决方案
  • 郑州便宜网站建设/网站推广公司电话
  • 端午节ppt模板免费下载/云优化软件
  • 中建八局第一建设有限公司税号/搜索引擎营销seo
  • 好姑娘高清免费观看/上海搜索引擎优化1
  • wordpress超级主题/全能优化大师
  • 怎么做卡商网站/软文广告