我有一台运行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所有文件?
我的设置有一些问题:
d和D标志,这意味着它不能被删除/移动,但我仍然不明白为什么本地用户能够在SMB无法删除时能够删除它。 fd标志。 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的文件。