非 root 用户需要 NFS 客户端上的 chown 功能

非 root 用户需要 NFS 客户端上的 chown 功能

我正在与另一个开发客户端软件的团队合作,提供一台 NFS 服务器,但我无法控制该软件。他们的软件通过 Web 界面和服务为用户提供文件管理,并且作为存储后端,它使用底层文件系统,我们希望开始使用 NFS。

到目前为止,他们一直在针对本地文件系统进行开发,现在他们正在尝试 NFS 服务器,他们发现无法将此CAP_CHOWN功能分配给他们的程序。我还没有找到启用此功能的方法,但我也没有找到任何记录在案的无法实现此功能的原因。

显而易见的替代方案是以 root 身份运行chown操作,不管怎样,因为no_root_squash在这种情况下,将文件系统导出到他们的机器不是问题。但是他们(可以理解)不想以 root 身份运行他们的 Web 服务,所以我想一个解决办法是chown在客户端上创建一个 SUID 二进制文件,并从他们的 Web 服务中调用它。

另一种选择可能是将其应用程序的用户映射到 NFS 服务器上的 root 用户,就好像他们在客户端上以 root 身份操作一样。从安全角度来看,这似乎很奇怪,但在我看来,这有点好处。但从可维护性的角度来看,这在服务器端有点尴尬。另外,我不知道这是否可行;我只读过idmapd.conf(5)手册页,我怀疑这不是最初考虑的用例。它可能被明确禁止。

我会继续关注这个问题,如果发现什么,我会更新它,但如果有人能提出建议或能指导我如何capabilities(7)使用nfsd(8),我将不胜感激。

更新#1: 在查看 NFSv4 ACL 中是否存在需要放宽的细粒度 ACE(访问控制条目)时,我发现有一个o允许所有权的权限。这很有希望,但我仍在尝试让它发挥作用:在我的系统上,至少(Ubuntu 16.04)它在语法上被接受,但没有应用并且没有效果:

[test-nfs] nfs4_setfacl -a A::OWNER@:o testfile
[test-nfs] nfs4_getfacl testfile
A::OWNER@:tTcCy
A::GROUP@:tcy
A::EVERYONE@:tcy
[test-nfs] nfs4_setfacl -a A::OWNER@:r testfile
[test-nfs] nfs4_getfacl testfile
A::OWNER@:rtTcCy
A::GROUP@:tcy
A::EVERYONE@:tcy

我已经在客户端和服务器上尝试了一些挂载/导出选项,但尚未让它发挥作用。

更新 #2: 根据此主题,没有办法CAP_CHOWN从客户端传达到服务器,因此对 NFS 挂载没有影响。

我正在尝试确定 NFSv4 ACL 的所有权权限是否应该起作用以及我缺少什么。

更新 #3:根据上述同一主题,NFSv4 ACL 中的所有权权限无法使用 POSIX ACL 正确表示,因此需要更丰富的 ACL 集。进行这方面的开发工作,这一进程显然已停滞。

看起来我无法按原样对软件进行我想要的操作,并且需要前面提到的 SUID 解决方案,或者类似的东西,以便以 root 身份执行所有权更改操作。

我不喜欢但还是尝试了这种imapd.conf(5)方法,但这是不可能的,因为静态 ID 映射仅适用于 Kerberos 安全环境,而我没有使用这种方法。

所以,我认为,这个问题几乎没有答案。

相关内容