![Linux cifs 共享允许与已安装/屏蔽的 uid 不同的用户执行 cp -p](https://linux22.com/image/765669/Linux%20cifs%20%E5%85%B1%E4%BA%AB%E5%85%81%E8%AE%B8%E4%B8%8E%E5%B7%B2%E5%AE%89%E8%A3%85%2F%E5%B1%8F%E8%94%BD%E7%9A%84%20uid%20%E4%B8%8D%E5%90%8C%E7%9A%84%E7%94%A8%E6%88%B7%E6%89%A7%E8%A1%8C%20cp%20-p.png)
我有一个特定的 Linux 服务器,它在晚上运行多个批处理作业,创建文件并将它们复制到 NAS 上的各个位置,以前使用 NFS 安装,但最近使用 CIFS 安装。
原因是我们的新 NAS 不支持以适合我们的方式同时将文件系统作为 nfs 和 cifs 共享(多协议共享)。因此,我改为将共享挂载为 cifs 共享,并使用 .smbcredentials 文件中的 Windows 凭据。
此共享历史悠久,许多系统(Linux 服务器和 Windows 服务器)都访问此共享。但是,它们都有自己的服务器,因此当我将共享作为 cifs 安装到其中一个 Linux 服务器上时,我只需将 fstab 中的 uid 和 gid 设置/屏蔽为其各自的服务用户,一切就都很好了。
然而,在我首先提到的服务器上,有多个系统以各自的用户身份在同一台服务器上运行。因此,我需要在 fstab 中屏蔽 uid/gid,使其看起来像一个用户,但仍允许其他用户执行操作。
这基本上有效,但 cp -p 无效,它保留了文件的时间戳。我似乎无法让它工作。
有什么我可以尝试的建议吗?我当然已经用尽全力在 Google 上搜索,尝试了从这里到月球的一切...
另外我当然也试图让开发团队转移到他们自己的服务器,但这不会很快发生。
答案1
有时,我们需要使用 posix 扩展属性 (ACL) 来让多个用户通过未向我们的中央目录服务进行身份验证的 CIFS 服务器访问一组文件。因此,例如,您可以尝试在 SMB 服务器上使用 setfacl,将权限映射到文件/文件夹,这将为 Linux 客户端上的用户提供正确的访问权限。如果您尝试这样做,请不要忘记也设置默认 ACL(这模仿了 CIFS 上的继承概念,尽管并不完美)。
如果用户自己开始摆弄权限,很快就会变得一团糟。但我认为你的问题可能可以通过这种方式解决。