我已经设置了一台集成了 AD 和启用了 ACL 的文件系统的 Samba 3 主机。使用 Windows 客户端,我可以设置用户和组权限。
到目前为止,Samba 仅映射到 POSIX ACL 的 rwx 权限,这使我无法在 Windows 上使用“修改”或“完全控制”权限。我还阅读了一些有关 xattrs 和 ZFS ACL 支持的内容。
有人可以提示一下超越 POSIX ACL 并完全类似于 Windows ACE 的最佳方法是什么吗?
答案1
我一直都是这么做的,不太清楚我在哪里读过这个。
为了使 Samba 共享上的大多数 Windows ACL 选项连接到 AD,您需要启用 POSIX ACL 和 XATTRS:
/dev/sda2 /samba ext3 user_xattr,acl 1 2
并且在您的 smb.conf 中您需要启用 idmapping、nt acls 和属性映射,如下所示:
idmap uid = 16777216-33554431
idmap gid = 16777216-33554431
idmap backend = idmap_rid:<domain_netbios_name>=16777216-33554431
nt acl support = yes
inherit acls = yes
map acl inherit = yes
map archive = no
map hidden = no
map read only = no
map system = no
store dos attributes = yes
inherit permissions = yes
然后您需要做的就是为共享定义管理员用户,并使用该用户从 Windows 编辑安全设置。
[public]
path = /share/Public
public = yes
writable = yes
printable = no
admin users = "DOMAIN\user"
唯一的问题可能与现有的 ACL(您“放弃”根并将所有权转移给 Windows 用户)和未映射的用户组有关。
要手动映射组,您需要执行以下操作:
net groupmap delete ntgroup="Domain Admins"
net groupmap delete ntgroup="Domain Users"
net groupmap delete ntgroup="Domain Guests"
net groupmap add ntgroup="Domain Admins" rid=512 unixgroup=root
net groupmap add ntgroup="Domain Users" rid=513 unixgroup=users
net groupmap add ntgroup="Domain Guests" rid=514 unixgroup=nobody
对于内置安全组。
然后针对所有组:
groupadd mygroup
net groupmap delete ntgroup="mygroup"
net groupmap add ntgroup="DOMAIN\mygroup" rid=1000 unixgroup=mygroup type=d
答案2
如果您不需要文件上的 POSIX ACL 真正可用(例如,当用户无法本地登录到您的 Samba 控制器时),您可以使用 vfs 拥有完整的 NT ACL:
[全球的] 存储 dos 属性 = 是 [分享] vfs 对象 = acl_xattr
答案3
您需要做两件事。
首先,您的文件系统必须支持 ACL。以下是 fstab 文件中启用 ACL 的一行示例,您的文件系统当然会有所不同:
/dev/mapper/VolGroup00-SambaVol /samba ext3 defaults,acl 0 0
完成上述操作后(并重新挂载或重新启动),您将需要在 smb.conf 文件中启用 nt acl:
[share1]
path = /samba/share1
nt acl support = yes
writeable = yes
完成这两项操作并重新启动 samba 后,您应该拥有适当的 ACL。