NFS 和 all_squash 混淆

qqi*_*ihq 6 nfs uid

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

幸运的是,我想,有一个all_squash选择。它说:

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

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

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

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

$ touch test && ls -l test
-rw-rw-r-- 1 12345 12345 0 Aug 25 18:10 test
Run Code Online (Sandbox Code Playgroud)

但是,共享上已存在的文件仍具有其原始 uid 和 gid:

$ ls -l existing-file
-rw-rw-r-- 1 98765 98765 0 Aug 25 18:11 existing-file
Run Code Online (Sandbox Code Playgroud)

我没有正确理解事物吗?我原以为这all_squash会简单地压缩所有文件 uids 和 gids?如果不是这样,这能实现吗?

kof*_*ann 2

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