通过 ZFS SMB 从 Windows 客户端对 OpenIndiana 中的主机上创建的文件的写入访问权限

通过 ZFS SMB 从 Windows 客户端对 OpenIndiana 中的主机上创建的文件的写入访问权限

我有一台运行 ZFS 的 OpenIndiana 服务器,使用nobody用户和组进行共享。我不完全了解 Solaris ACL 权限,但我知道 Linux 样式的权限。客户端是 Windows 8,服务器是 OpenIndiana,是 oi_148。

我无法弄清楚如何让 Windows 客户端的写入权限正常工作。它能够创建新文件,但无法修改 OpenIndiana 中的 shell 创建的文件。

当以bash"local file"用户身份本地创建一个文件 ( ),并通过 SMB 远程创建另一个文件 ( )(同样如此)时,它们的权限有很大不同:nobody"smb file"nobody

# ls -V
-rw-r--r--   1 nobody   nobody         0 Dec  2 12:24 local file
                 owner@:rw-p--aARWcCos:-------:allow
                 group@:r-----a-R-c--s:-------:allow
              everyone@:r-----a-R-c--s:-------:allow

-rwx------+  1 nobody   nobody         0 Dec  2 12:24 smb file
            user:nobody:rwxpdDaARWcCos:-------:allow
       group:2147483648:rwxpdDaARWcCos:-------:allow

在 bash 中,我可以写入smb file,但反之亦然,Windows 客户端无法写入local file。这让我很困惑,因为它似乎应该允许 SMB 客户端写入local file,因为nobody是所有者,并且它w在 ACL 中有一个 。

这个sharesmb设置相当无趣,尽管我希望这里可以设置一些类似于 umask 的东西:

sharesmb name=shared,guestok=true

我如何才能使这两者协同工作并拥有一个对称的权限系统,其中 SMB 和本地用户都产生相同的权限?

是否有某种 ACL 可以在文件系统的根目录设置,以允许以类似的方式创建所有文件?

答案1

我的设置存在一些问题:

  • 本地用户创建的 ACL 没有d设置D标志,这意味着它不能被删除/移动,尽管我仍然不明白为什么本地用户能够删除它而 SMB 却不能。
  • ACL 的设置方式使得 ACL 不能被继承,即标志fd
  • ZFSaclinherit属性应设置为passthrough而不是restricted

例如:

# chmod A=owner@:rwxpdDaARWcCos:fd:allow /z/shared
# zfs set aclinherit=passthrough z/shared

从 SMB 和本地创建文件后:

$ ls -V
total 2
-rwx------+  1 nobody   nobody         0 Dec  8 00:17 local
                 owner@:rwxpdDaARWcCos:------I:allow
-rwx------+  1 nobody   nobody         0 Dec  8 00:17 smb
                 owner@:rwxpdDaARWcCos:------I:allow

请注意I,这表明 ACL 是被继承的。

ZFS 设置在ZFS 管理指南

受限制的– 对于新对象,当继承 ACL 条目时,write_owner 和 write_acl 权限将被删除。

直通– 当属性值设置为 passthrough 时,文件将使用由可继承 ACE 确定的模式创建。如果不存在影响该模式的可继承 ACE,则将根据应用程序请求的模式设置模式。

现在 SMB 客户端能够删除本地创建的文件。

相关内容