相当于NFS all_squash

相当于NFS all_squash

我有一个不寻常的要求,我需要在客户端上多次挂载相同的文件系统,但每次挂载都会根据底层目录和文件的组权限提供不同的底层数据视图。

我过去曾使用 NFS 以及 all_squash 和 anongid /etc/exports 选项实现了这一点,使特定的挂载看起来就像用户具有特定的组 ID 一样。它通过强制访问用户组来有效地过滤对底层文件系统的访问。

不幸的是,在这种情况下我无法使用它,因为文件系统将是 Amazon EFS(实际上是一个 NFS 服务器,但没有任何配置选项)。

我查看过bindfs,这提供了一个强制组选项,但这与我想要的相反,因为它强制所有文件具有特定组,而不是强制客户端具有特定组,查看文件不变。

我确实看到提到了一个叫做filterfs的东西,但它似乎已经死了很久了。

有谁知道一种方法,通过临时有效地更改用户组(不使用 sudo,因为用户是网络服务器守护进程)来获取单个用户的文件系统的过滤视图。

答案1

感谢@sourcejedi 为我指明了正确的方向。

在原始 NFS 设置中,全部南瓜用于使守护程序用户看起来有一个特定的组(由阿农吉德)。对于此示例,假设组 ID 为 601。看法因此,原始文件系统可以根据已安装的文件系统对文件/目录强制执行权限阿农吉德为 601。权限看起来像是在 NFS 安装级别评估的,与守护程序用户的实际组权限无关。另一个 NFS 使用不同的方式挂载到同一文件系统上全部南瓜设置有效地显示文件的不同视图,就好像用户具有不同的组成员身份一样。

使用绑定文件系统--映射通过稍微不同的设置可以获得相同的结果。示例配置绑定一个文件系统,使得底层文件系统中组 ID 601 的任何文件/目录在挂载的文件系统中看起来具有组 ID 599:

bindfs --map=@601/@599 --create-for-group=601 --create-for-user=600 --create-with-perms='u=rwD:g=rwD:o=' $FS_ROOT $MOUNT_ROOT/view601

现在,当在守护进程中列出文件时,$MOUNT_ROOT/view601用户会看到任何具有组 601 而不是组 599 的文件。通过为守护进程提供组 gid 599 的成员身份,可以根据安装再次有效地强制执行权限。如果不同的挂载将 gid 602 映射到 599,则同一底层文件系统中的文件将可供同一用户使用,前提是他们最初的组 602(而不是 601)现在映射到 599,从而使它们可供守护程序使用。

相关内容