NFS 和 all_squash 混淆

NFS 和 all_squash 混淆

对于一些临时的数据迁移任务,我需要设置一个 NFS 服务器。两台机器上的 UID 不匹配,所以我需要以某种方式避免权限问题。

幸运的是,我认为有一个all_squash选项。它说:

所有南瓜:将所有 uid 和 gid 映射到匿名用户。适用于 NFS 导出的公共 FTP 目录、新闻假脱机目录等。相反的选项是 no_all_squash,这是默认设置。

为了映射到我想要的用户和组,我还指定anonuid=12345anongid=15101982

anonuid 和 anongid:这些选项明确设置了匿名帐户的 uid 和 gid。此选项主要用于 PC/NFS 客户端,您可能希望所有请求都来自同一个用户。例如,请考虑下面示例部分中 /home/joe 的导出条目,它将所有请求映射到 uid 150(据称是用户 joe 的 uid)。

在上创建文件客户连接到 NFS 共享,并且正如预期的那样,我看到以下行为(uid/gid 已更改为12345):

$ touch test && ls -l test
-rw-rw-r-- 1 12345 12345 0 Aug 25 18:10 test

然而,共享中已存在的文件仍然具有其原始的 uid 和 gid:

$ ls -l existing-file
-rw-rw-r-- 1 98765 98765 0 Aug 25 18:11 existing-file

我理解的是否不正确?我以为这样all_squash只会压缩所有文件的 uid 和 gid?如果不是这样,这能实现吗?

答案1

NFS 协议在创建新文件时使用基于 RPC 的凭据。通过设置 all_squash+anonuid,您可以更改与该特定客户端关联的凭据。换句话说,它只会影响用户请求的权限检查以及新创建的文件和目录的所有权。现有文件的所有权不受影响。

相关内容