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

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

我无法解决如何使写入权限正确地为Windows客户端工作。 它能够创build新文件,但不能修改由OpenIndiana中的shell创build的文件。

当一个文件( "local file" )在本地创build为bash中的nobody用户,另一个文件( "smb file" )通过SMB远程创build时(也nobody ),它们在权限上完全不同:

 # ls -V -rw-r--r-- 1 nobody nobody 0 Dec 2 12:24 local file owner@:rw-p--aARWcCos:-------:allow group@:r-----aRc--s:-------:allow everyone@:r-----aRc--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是拥有者,并且在ACL中有一个w

sharesmb设置是相当无聊,虽然我希望有一些东西可以在这里设置类似于一个umask:

 sharesmb name=shared,guestok=true 

我怎样才能使这两个工作在一起,并有一个对称的权限系统,SMB和本地用户都产生相同的权限?

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

我的设置有一些问题:

  • 由本地用户创build的ACL没有设置dD标志,这意味着它不能被删除/移动,但我仍然不明白为什么本地用户能够在SMB无法删除时能够删除它。
  • ACL的设置没有被设置,所以ACL将被inheritance,即fd标志。
  • ZFS的aclinherit属性应该设置为passthrough而不是restricted

例如:

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

从SMB和本地创build文件后:

 $ 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 

请注意显示ACL被inheritance的I

ZFSpipe理指南中描述了ZFS设置:

受限制 – 对于新对象,当inheritanceACL条目时,将删除write_owner和write_acl权限。

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

现在,SMB客户端可以删除本地创build的文件。