我已将 Samba 文件服务器设置为 Active Directory 成员。文件服务器工作正常,用户可以访问共享、创建文件和文件夹、删除和修改它们等。
现在考虑以下场景。
a) 用户“管理员”创建一个文件夹并授予权限如下:域管理员 = 完全控制,域用户 = 更改。有了这些权限,“域管理员”的所有成员都可以编辑该文件夹的权限。但“域用户”的成员只能查看,不能更改权限。
b) 我以普通“域用户”身份登录 Samba 文件服务器并创建一个新文件夹。正如 a) 中所预测的,我无法编辑其权限。但是,我可以做的是:转到“高级”,然后禁用继承。然后,Windows 询问是否应更改子文件夹和文件的权限。令人惊讶的是,这有效,现在我作为一个普通的“域用户”,不能更改权限,现在可以获得我刚刚创建的文件夹的“完全控制”,即使父文件夹拒绝完全控制。
我相信我的 Samba 配置中存在 ACL 继承问题,我相信受限制的用户不应该被允许关闭 ACL 继承。可能是什么问题呢?
下面是我的smb.conf
和shares.conf
.
[global]
# ...... removed some stuff that is not important
#-------------------------------------------------------------------
# idmap
#
idmap config * : backend = tdb
idmap config * : range = 10000000-20000000
idmap config MYDOMAIN : backend = ad
idmap config MYDOMAIN : schema_mode = rfc2307
idmap config MYDOMAIN : range = 500-9999999
idmap config MYDOMAIN : unix_primary_group = yes
#-------------------------------------------------------------------
# winbind
#
#winbind enum users = yes
#winbind enum groups = yes
ea support = yes
vfs objects = catia fruit acl_xattr streams_xattr
fruit:metadata = stream
fruit:model = MacSamba
fruit:veto_appledouble = no
fruit:posix_rename = yes
fruit:zero_file_id = yes
fruit:wipe_intentionally_left_blank_rfork = yes
fruit:delete_empty_adfiles = yes
inherit acls = yes
inherit permissions = yes
map acl inherit = yes
nt acl support = yes
include = /etc/samba/shares.conf
和shares.conf:
[pub]
comment = Public
path = /tank/pub
read only = no
编辑:
我又做了一些实验。我发现关键是受限用户可以禁用他们拥有的文件夹的继承,问题是我如何避免这种情况。我通过将“继承所有者=是”设置为我的smb.conf
.这使得所有新文件和文件夹都归“root”所有,因此,除非明确授予,否则没有人拥有完全控制权限。
答案1
你缺少acl group control = yes
:
如果设置了此参数,则 Samba [...] 还允许文件或目录的主要组所有者修改该文件的权限和 ACL。
虽然我还没有(也不能)测试下一部分,但它继续表明,
此参数最好与该
inherit owner
选项一起使用,也可用于包含设置了 UNIX setgid 位的目录的共享,这会导致在其中创建的新文件和目录继承包含目录的组所有权。
继续阅读,您可能希望像这样设置 ACL 配置设置,
acl group control = yes
acl map full control = no
inherit acls = yes
inherit owner = windows and unix
map acl inherit = yes
基本上,Windows ACL 和 UNIX 文件权限(至少是表面可见的权限)根本没有真正相互映射,而且为了使权限在 Windows 共享上正常工作需要进行大量的修改。