我基本上想要做的是能够在 Samba 共享上的 Windows 上为某些目录设置 SGID(setgid)。 提醒:在设置了 SGID 的目录中创建的文件和目录将继承父目录的主要组。
环境
我有一个环境,其中有几十个组需要访问他们所属项目的相关文件。由于项目组的成员和组本身经常发生变化,我希望尽可能将权限设置委托给组长。虽然管理组成员很容易(GOSa 特权委托很好地解决了这个问题),但我在文件权限方面却遇到了困难。
注意:组和其他类似层次结构的数量很大,因此为每个组或层次结构创建不同的共享是不可行的(Windows 中可能的挂载点数量有限,不幸的是使用 UNC 路径也不可能)。
共享中的文件夹如下所示:
/共享根目录 +-- 层次 1 +-- 层次结构 2 | ... +-- 层次结构 20 +-- 项目 +-- 项目 A | +-- 方向A | +-- 文件 +-- 项目 B +-- ... +-- 项目 Z
Samba ACL 群组控制
samba () 的优秀功能acl group control
允许我允许拥有目录或文件的主要组的成员编辑其权限(与常规的:所有者、根用户和 smb.conf 中的“管理员用户”不同)。
因此,当我有这样的文件夹时(来自的 POSIX ACL getfacl
):
# 文件:项目 A # 所有者:root # 组:proj-a-adm # 标志:-s- 用户::rwx 组::rwx 组:域\040用户:rx 组:项目-a:rwx 掩码::rwx 其他:: - - 默认值:用户::rwx 默认:组::rwx 默认值:组:域\040用户:rx 默认:group:proj-a:rwx 默认值:掩码::rwx 默认:其他::---
组内的成员proj-a-adm
可以编辑此目录(以及在该目录内创建的所有目录和文件)的权限,而proj-a
组内的成员可以自己修改文件,但不能更改这些文件的权限。Domain Users
只能读取其中的文件。
问题
当创建新项目时,root
用户需要chmod g+s projects/project\ AA
在命令行上运行。
在创建新项目后,我可以使用 Windows 文件权限窗口编辑文件和文件夹的权限,但创建新项目文件夹需要在 shell 中运行命令,这相当黑客式的。
答案1
A) 编写一个小型 Web 表单和一个小脚本,为一个项目创建一个组和一个目录。
B) 编写一个小型 Windows 批处理文件,通过 ssh 执行相同操作。您可以使用 cygwin 项目中的 ssh 客户端或某些原生 Windows ssh 客户端。