我有一台运行 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
。 - ZFS
aclinherit
属性应设置为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 客户端能够删除本地创建的文件。