NO_ALL_SQUASH 选项在 NFS 导出中起什么作用?

NO_ALL_SQUASH 选项在 NFS 导出中起什么作用?

来自exports(5) 手册页在“用户 ID 映射”部分中,它显示:

用户 ID 映射

...

通常,当客户端计算机上的 root 用户访问 NFS 服务器上的文件时,我们不希望该用户也被视为 root 用户。为此,uid 0 通常被映射到不同的 id:即所谓的匿名用户或nobodyuid。此操作模式(称为“root squashing”)是默认模式,可以使用 关闭no_root_squash

...

以下是映射选项的完整列表:

根南瓜
将请求从 uid/gid 0 映射到匿名 uid/gid。请注意,这不适用于可能同样敏感的任何其他 uid 或 gid,例如用户bin或组staff
禁止root权限
关闭 root 压缩。此选项主要用于无盘客户端。
全部_南瓜
将所有 uid 和 gid 映射到匿名用户。适用于 NFS 导出的公共 FTP 目录、新闻假脱机目录等。相反的选项是no_all_squash,这是默认设置。

...

我在下表中总结了 UID 映射选项(假定1000为非特权用户的 UID,并且65534为匿名 UID):

选项 客户端 UID 服务器 UID
根南瓜 0 65534
根南瓜 1000 1000
禁止root权限 0 0
禁止root权限 1000 1000
全部_南瓜 0 65534
全部_南瓜 1000 65534
禁止所有南瓜 0 0(不确定)
禁止所有南瓜 1000 65534 (不确定)

问题

  1. 我对该选项的总结no_all_squash正确吗?如果正确,那么什么时候有用?
  2. 哪个选项是默认的?上面的段落说root_squash,而no_all_squash在选项解释中声称自己是默认的。

先感谢您!

答案1

在虚拟环境中设置了一对 NFS 服务器和客户端后,我发现以下结果:

选项 客户端 UID 服务器 UID
根南瓜 0 65534
根南瓜 1000 1000
禁止root权限 0 0
禁止root权限 1000 1000
全部_南瓜 0 65534
全部_南瓜 1000 65534
禁止所有南瓜 0 65534
禁止所有南瓜 1000 1000

换句话说,no_all_squash选项的表现与root_squash选项相同。这回答了问题 1,同时也解释了问题 2。

答案2

Root squash/no root squash 与您将看到的执行读取/写入的客户端 ID 无关,只与是否允许 root 介入并进行更改有关,无论其是否包含在权限集中。Root squash 将阻止本地 root 更改文件的所有权。

通常,除非出于紧急的安全原因将文件绑定到特定用户,否则不会进行 root squash。root 被认为受到保护,而用户被认为没有 root 访问权限。如果共享上的数据需要在共享级别进行维护,那么 root squash 可能是理想的选择。

答案3

通常的方法是允许机器之间的根映射。此外,旧的 NFS 遗留方法使用 NIS 来同步 NIS 域中的用户 ID,以实现此目的:否则具有不同 ID 的相同用户会相互混淆。

压缩用于某些罕见的情况,一方面,你想允许某些客户端访问 NFS,而这些客户端不是你的另一方面,如果他们使用 id 0,您也不希望他们拥有完全访问权限。通常,NFS 是在单个组织网络中配置的,其中所有机器都由一个工程师团队管理。

至于全/无压缩/无压缩 - 结局很简单:当您想要为文件系统树应用一些复杂的 ACL 时,您必须使用能够正确处理 ACL 的 NFSv4,因为 NFSv<=3 根本就不具备此功能,无论是否压缩(后者只会使 NFSv<=3 访问模型变得繁琐,但不完整)。最后一部分毕竟是 NFSv4 出现的主要原因。

相关内容