给定一台 Linux 服务器和许多 Linux 客户端,我需要从服务器导出一些共享目录。我想要获得的行为非常简单:一组用户可以使用服务器上的共享空间,而不必担心 UNIX 文件权限的存在。如果我在 Windows 世界中,我只需将目录共享为 r/w,将用户添加到权限列表中,然后就大功告成了。
但是,在 Linux 世界中,我不知道如何获得这一点:
- 每个共享目录只能由由组标识的一组用户安装(用户/组/登录都通过集中式 LDAP 处理)。例如,服务器上的共享“/var/foobar”必须只能由 LDAP 组“foobar”的成员访问(读/写)。
- 只要用户属于正确的组,他们就必须能够以完全访问权限在共享上创建/修改/删除目录、文件等。
- 用户必须无法限制共享中文件/目录的权限,使共享中的其他用户无法再访问它们。无法。
要求 #3 的问题在于,许多 Linux 应用程序喜欢通过忽略 umask 和/或在接触文件后强制 chmod/chgrp 来破坏权限。著名的例子是 Nautilus 和 OpenOffice。
失败的实验:
- NFS:尝试了不同的方法,但如果我压缩,我就无法进行身份验证,如果我进行身份验证并且用户尝试使用 Nautilus 复制目录,则权限就会被搞砸。
- NFS + ACL setgid。仍然可以通过标准桌面程序执行标准操作,最终以某种方式强制 chmod 或 chgrp。
- sshfs/sftp-server:似乎没有简单的方法可以避免调用 chmod/chgrp。有一个补丁浮动允许阻止 chmod/chgrp,但它会向客户端返回错误,从而向用户发出投诉。看来我可以修补该补丁以默默忽略 chmod/chgrp,但我已出于其他原因在该服务器上使用 SFTP,而且似乎没有简单的方法可以为不同的目录定义不同的行为。
Samba 能帮上忙吗?还有其他解决方案吗?
答案1
Samba可以force group
正常force create mode
工作。
答案2
听起来您正在寻找 NFS + 用户 ID 映射,可在 NFS v4 中找到,每个用户都可挂载。不要在用户之间共享挂载,每个用户都以自己的用户身份使用 squash 挂载。