来自exports(5) 手册页在“用户 ID 映射”部分中,它显示:
用户 ID 映射
...
通常,当客户端计算机上的 root 用户访问 NFS 服务器上的文件时,我们不希望该用户也被视为 root 用户。为此,uid 0 通常被映射到不同的 id:即所谓的匿名用户或
nobody
uid。此操作模式(称为“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 (不确定) |
问题
- 我对该选项的总结
no_all_squash
正确吗?如果正确,那么什么时候有用? - 哪个选项是默认的?上面的段落说
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 出现的主要原因。