如何在 NFS 中设置正确的所有权?

如何在 NFS 中设置正确的所有权?

我有一台带有 NFS 服务器的服务器(Ubuntu 20.04)。我想为每个用户共享 /home/user。但是在客户端(Ubuntu 18.04)上,ID 通常与服务器上的 ID 不同,从而导致所有权问题。

/etc/exports 如下所示

/home/user2 10.4.200.2(rw,sync,all_squash,anonuid=1002,anongid=1002)
/home/user3 10.4.200.3(rw,sync,all_squash,anonuid=1003,anongid=1003)
...

$ id user2
uid=1002(user2) gid=1002(user2) groups=1002(user2)
$ id user3
uid=1003(user3) gid=1003(user3) groups=1003(user3)

在客户端上,id 例如

$ id user2
uid=1001(user2) gid=1001(user2) groups=1001(user2)

在 fstab 中,我添加了以下行

10.4.200.2:/home/user2 /home/user2/server nfs rw 0 0

挂载文件夹(mount -a)后,所有权不匹配

$ ls -l | grep server
drwxr-xr-x 32    1002    1002    4096 sept.  3 11:32 server
$ cd server/
$ touch foo
touch: cannot touch 'foo': Permission denied

答案1

(此答案已在现实生活中得到测试和验证)

使用多个不同用户访问 NFS 共享 / NFS 挂载所有权问题 / NFS 挂载共享文件 / NFS 挂载访问权限问题

假设在网络中的某台机器上有一个包含数据文件的文件服务目录
NFS
很难向几个不同的用户授予访问权限。
我找到了一种方法:
统一并使用传统 Unix 方式进行群组访问

解决方案

a) 我在主机/服务器上为要共享的文件创建默认所有者。
例如:
用户 доступ uid = 1002,组 доступ gid 1003。

b) 我们假设 NFS 对每个人都运行良好。
任何用户都有权访问 r+w。
问题:

不幸的是,一个用户不能编辑(=覆盖)其他用户的文件。

主意:

创建一个公共组。
它将成为任何用户创建的所有文件的默认组
(例如:доступ,gid 1003)。
这是基于 Unix 中通过 gid 和 uid 授予访问权限的理念。

c) 在 /etc/login.defs 中将所有用户机器的 UMASK 从 022 更改为 002

UMASK 002

确保所有现有的要共享的文件都属于组 доступ
(提示:对于现有文件和目录,使用带有选项“exec”chgrp as sudo 的“find”命令来调整它们全部)。

d) 更改所有用户的默认组成员身份。
将默认成员身份设置为 доступ gid 1003。

略微匿名的示例

主机 /etc/exports 文件示例:

/srv/alle-daten 192.168.075.0/255.255.255.0(rw,no_root_squash,nohide,no_subtree_check,all_squash,anonuid=1002,anongid=1003)

(示例 ID 与示例默认用户相关,需要匹配!使用空格时要小心,即使它看起来很奇怪 - 这里不允许)

/etc/fstab 中客户端挂载的示例:

192.168.075.111:/srv/alle-daten/ /mnt/network-alle-data-nfs nfs nofail,timeo=600,_netdev,用户,rw 0 0

我花了好几年才找到这个解决方案。它兼容为相同用户和相同文件并行安装 SMB。

在实际生活中,它对我很有用。
如果我忘记提及重要的配置细节,请告诉我。

讨论

解决方案可能定义过度。请注意,导出的手册页(man exports)解释了任何用户到一个通用 uid/gid 的正确映射:

默认情况下,exportfs 会选择 65534 的 uid 和 gid 来进行压缩访问。这些值也可以通过 anonuid 和 anongid 选项覆盖。最后,您可以通过指定 all_squash 选项将所有用户请求映射到匿名 uid。

并进一步

all_squash:将所有 uid 和 gid 映射到匿名用户。

实际上我们确实将它们映射为:对于我们的默认用户 доступ ,其 uid = 1002,组 доступ gid 1003!

所以可能存在更简单的解决方案。
总有改进的空间。

欢迎提出建设性意见。

相关内容