我们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
可以继承组名。但是,我需要一些改进方面的帮助:
- (执行)权限
a+x
应仅适用于目录,并且不应自动继承文件。 - (读取)权限
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 过去采用的解决方法更好。