尝试了解 Samba 如何处理 UNIX 权限

尝试了解 Samba 如何处理 UNIX 权限

我正在使用 Linux、ZFS 和 Samba 构建备份服务器。除我之外的所有客户端都将使用 Windows 10,因此我的重点是正确支持 Windows 10,但这并不意味着应该允许 Linux 端的权限不安全(即世界可读可写)。

错误地删除了所有文件上的 POSIX ACL 后,认为它们最初设置为允许组访问,但 Windows 端文件上的所有权限都被破坏了。

通过查看手册中的每个选项并重新进行配置,我解决了这个问题,我弄清楚了要设置哪些选项才能获得我想要的行为,即仅在 Windows 端设置权限,同时保证 UNIX 权限的安全,但是仍然有两件事我不明白 Samba 如何处理 UNIX 权限。

设置acl_xattr:ignore system acls = no会导致 UNIX 权限成为 Windows ACL(CREATOR、GROUP 和 EVERYONE 条目)中的条目,这是我不希望的,但是当设置为 时yes,所有者、组和权限似乎仍然会影响 Windows 端的权限,它们仍然由 Samba 强制执行。如果目录具有root:backup 0660权限,则随机Domain User将无权访问该目录,即使 Windows ACL 有 的条目Domain Users。将组从 更改为backup映射到 NT 组,然后它就会起作用。因此显然 UNIX 权限仍然得到强制执行。usersusersDomain Users

是否有设置可以让 Windows ACL 否决其余权限,即如果 Windows ACL 允许Domain Users,则无论 UNIX 权限如何,它们都将被允许?或者我是否可以使用 UNIX 权限禁用 Samba?

另一个问题是 Samba 如何存储 UNIX 权限。在新配置中,我拥有inherit owner = yes。这似乎在 Windows 和 UNIX 上都按预期工作,除非我尝试将 UNIX 组更改为其他组。最初,在共享上设置了 setgid 位john作为其组,认为inherit owner这只影响所有者,而不影响组。但是,当从共享中删除 setgid 位并将组更改为 时users,使用inherit owner = yesWindows 10 客户端创建的新文件和目录仍然使用组创建john。目录树中没有john剩余组的目录,我尝试重新启动 Windows 客户端和 Samba 服务器以防万一,但这并没有改变任何东西。

Samba 是否将 UNIX 权限存储在其他地方,因此我直接从文件系统更改 UNIX 组不会影响 Samba 跟踪的组?或者 Samba 仍然将此旧组用于新文件和目录的原因是什么?

下面您可以找到 Samba 版本 4.7.6 配置中可能相关的选项。如果需要更多信息,请告诉我。

[global]
access based share enum = yes
acl group control = no
acl map full control = yes
acl_xattr:ignore system acls = yes
acl_xattr:default acl style = windows
create mask = 0775
directory mask = 0775
dos filemode = yes
dos filetime resolution = no
dos filetimes = yes
ea support = no
force create mode = 0600
force directory mode = 0600
force unknown acl user = no
guest account = nobody
guest ok = no
guest only = no
inherit acls = no
inherit owner = unix only
inherit permissions = no
invalid users = root
map acl inherit = yes
map archive = no
map hidden = no
map readonly = no
map system = no
map to guest = never
nt acl support = yes
obey pam restrictions = no
read only = yes
restrict anonymous = 2
security = user
server role = active directory domain controller
store dos attributes = yes
unix extensions = yes
vfs objects = dfs_samba4 acl_xattr shadow_copy2

[backups]
create mask = 0660
directory mask = 0770
ea support = yes
path = /mnt/pool/backups
read only = no

答案1

Samba 是否将 UNIX 权限存储在其他地方,因此我直接从文件系统更改 UNIX 组不会影响 Samba 跟踪的组?或者 Samba 仍然将此旧组用于新文件和目录的原因是什么?

我只找到了第二个问题的答案。在我使用 进行实验期间,inherit owner我一度想知道作为 NT ACL 的一部分存储的值是什么,因此我检查了一个目录,samba-tool ntacl get /path/to/dir令我惊讶的是,我看到旧 GID 是 的值group_sid。由于我在文件系统中的其他任何地方都不再有对旧 GID 的任何其他引用,这似乎是 Samba 保留旧 UNIX 组的可能原因,特别是因为每当我将继承所有者设置为unix only或 时no,它都不会拥有旧 UNIX 组。因此显然设置inherit owneryes(即unix and windows)会导致 Samba 将 UNIX 组设置为存储在 NT ACL 中的组。

我仍然希望得到第一个问题的答案,但我已经找到了一种解决方法,那就是找到一种方法来将 NT 组映射Domain Users到我的首选 UNIX 组并通过 POSIX ACL 将其他人的权限设置为 0 setfacl -Rm d:o:---,o:--- /my/share:。

相关内容