Samba 能否支持完整的 Windows-ACL?

fab*_*ian 12 active-directory samba access-control-list file-permissions posix

我已经设置了一个带有 AD 集成和一个启用了 ACL 的文件系统的 Samba 3 主机。使用 Windows 客户端,我可以设置用户和组权限。

到目前为止,Samba 只是映射到 POSIX ACL 的 rwx 权限,这阻止我在 Windows 上使用“修改”或“完全控制”权限。我还阅读了一些关于 xattrs 和 ZFS ACL 支持的内容。

有人可以暗示超越 POSIX ACL 以完全类似于 Windows ACE 的最佳方法是什么吗?

Boj*_*vic 7

这就是我一直这样做的方式,不太确定我在哪里读到的。

为了将 Samba 共享上的大多数 Windows ACL 选项连接到 AD,您需要同时启用 POSIX ACL 和 XATTRS:

/dev/sda2       /samba              ext3    user_xattr,acl  1   2
Run Code Online (Sandbox Code Playgroud)

在您的 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
Run Code Online (Sandbox Code Playgroud)

然后您需要做的就是为共享定义管理员用户,并使用该用户从 Windows 编辑安全设置。

[public]
path = /share/Public
public = yes
writable = yes
printable = no
admin users = "DOMAIN\user"
Run Code Online (Sandbox Code Playgroud)

唯一的问题可能与现有的 ACL(您“拒绝”root 并将所有权转让给您的 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 
Run Code Online (Sandbox Code Playgroud)

对于内置安全组。

然后对于您的所有组:

groupadd mygroup
net groupmap delete ntgroup="mygroup"   
net groupmap add ntgroup="DOMAIN\mygroup" rid=1000  unixgroup=mygroup   type=d
Run Code Online (Sandbox Code Playgroud)

  • 我会将“admin users”更改为“acl group control”并设置“force group = +DOMAIN\Admin-group”,这样您就可以拥有多个具有管理员权限的用户。 (2认同)

小智 1

您需要做两件事。

首先,您的文件系统必须支持 ACL。以下是 fstab 文件中启用 ACL 的行的示例,您的当然会有所不同:

/dev/mapper/VolGroup00-SambaVol /samba ext3 defaults,acl 0 0
Run Code Online (Sandbox Code Playgroud)

完成此操作(并重新安装或重新启动)后,您将需要在 smb.conf 文件中启用 nt acl:

[share1]
   path = /samba/share1
   nt acl support = yes
   writeable = yes
Run Code Online (Sandbox Code Playgroud)

完成这两项操作并重新启动 samba 后,您应该拥有正确的 ACL。