使用 ZFS ACL 在 OmniOS (Illumos) 上继承组写入权限,但不执行文件

使用 ZFS ACL 在 OmniOS (Illumos) 上继承组写入权限,但不执行文件

我们umask 027大部分时间都在操作。对于涉及多个用户的某些目录,我找到了一种很酷的方法来模拟umask 002使用 ACL 继承。

这是我正在使用的命令。本质上这是chmod 775继承:

/usr/bin/chmod A=owner@:rwxpDaARWcCos:fd:allow,group@:rwxpDaARWcs:fd:allow,everyone@:rxaRcs:fd:allow $@`

$@表示要更新的文件列表。我在 中使用 OpenSolaris 版本/usr/bin/chmod,因为/usr/gnu/bin/chmod它似乎不支持完整的 ACL 语法。

像魅力一样发挥作用,并且还g+s可以继承组名。但是,我需要一些改进方面的帮助:

  1. (执行)权限a+x应仅适用于目录,并且不应自动继承文件。
  2. (读取)权限o+r应仅适用于文件,并且不是目录,因为我想禁用ls匿名用户的能力。

我对 OmniOS/Illumos 和 ZFS 非常满意,但不幸的是它使用 Solaris ACL 方案,该方案与更常见的 Linux ACL 语法有很大不同。

某种条件继承是有序的,以一种方式继承文件,以另一种方式继承目录。这可能吗?

答案1

a+x(执行)权限应仅适用于目录,并且不应自动继承文件。

您可以为 ACL(完整列表)的每个 ACE(访问控制条目)指定应如何继承。这些选项取自Solaris 管理指南,也适用于 OmniOS(表 8.1 至 8.3):

  • 文件继承(f):仅将 ACL 从父目录继承到该目录的文件。
  • dir_继承(d):仅将 ACL 从父目录继承到该目录的子目录。
  • 仅继承(i):从父目录继承 ACL,但仅适用于新创建的文件或子目录,而不适用于目录本身。需要 f/d/fd。
  • 无传播(n):只继承父目录的ACL到该目录的一级内容,不继承二级及以后的内容。需要 f/d/fd。

您可以为同一用户添加多个 ACE 并达到所需的效果,因为它们在应用时被组合在一起(类似于 Windows ACL)。示例简化为@owner,因为对于其他人来说它是相同的:

/usr/bin/chmod A=\
    owner@:rw-p-D-ARWcCos:fd-----:allow, \
    owner@:--x---a-------:-d-----:allow, \
    [...]
$@

这意味着

  • 第一个 ACE 应用于目录,并为所有文件和目录继承,但不包括 a+x 权限
  • 第二个 ACE 应用于目录并为所有子目录继承,但不为文件继承,仅具有 a+x 权限
  • 要获得完整的 ACL,您可以“覆盖”目录的两行(这就是为什么我更喜欢带有破折​​号的语法,您会看到缺少的内容)

我还没有测试它是否能满足您的要求,有时它也取决于应用程序,所以您应该测试它。继承的文件和目录 ACLI在最后位置标有一个大号,例如owner@:rw-p-D-ARWcCos:fd----I:allow.

o+r​​(读取)权限应仅适用于文件,而不适用于目录,因为我想禁用匿名用户的 ls 功能。

与第一个问题类似,但反过来。n如果您只想一级继承,也可以将其与 结合使用(类似于find -maxdepth 1)。再次强调,要小心测试,因为很可能简单的标志是不够的,您还需要高级的标志 ( ARWC)。此外,您仍然可以通过文件和目录的选项递归应用 ACL chmod -R,这在某些情况下可能需要(例如,如果 ACL 应该追溯修改,因为一旦写入文件,其 ACL 就被固定,具体取决于 的属性aclinherit) 。


我对 OmniOS/Illumos 和 ZFS 非常满意,但不幸的是它使用 Solaris ACL 方案,该方案与更常见的 Linux ACL 语法有很大不同。

现在从您的角度来看,这可能看起来很不幸,但 ACL 与 NFSv4 ACL 非常接近,因此如果您决定使用 NFS 版本 4,则无需更改任何内容。它也与 Windows ACL 非常接近(唯一的例外:SOlaris 上的顺序是已修复(Windows 上的顺序始终是“拒绝”在“允许”之前,但如果您不使用“拒绝”也没关系),这意味着您可以从每台权限Co设置为“允许”的 Windows PC 编辑权限。这适用于域和工作组,因此与 Windows 的互操作性比 Samba 过去采用的解决方法更好。

相关内容