ACL 默认值:文件与目录

ACL 默认值:文件与目录

目录上的默认 ACL 由该目录下创建的文件和子目录继承。

这似乎是一个常见的要求,默认情况下子目录应该是可执行的(即可光盘),但文件不应该是。

如何为子目录和(子)文件设置单独的默认(即继承)ACL,或以其他方式实现此效果?

附录:
Raspberry Pi Model B、Raspbian、get/setfacl 2.2.51

cat /proc/version
Linux version 3.6.11+ (dc4@dc4-arm-01) (gcc version 4.7.2 20120731 (prerelease) (crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08) ) #474 PREEMPT Thu Jun 13 17:14:42 BST 2013

答案1

只有一个默认值,但是当文件继承 ACL 时,它会被掩码修改,该掩码是根据程序打开文件进行写入时设置的模式设置的。 (该模式实际上由 umask 修改 - umask 中的位被删除,因此模式 666 加上 umask 002 变为 664。)例如,如果模式为 664,则掩码将rw-导致 x 标志被屏蔽所有命名的 acls 和组,因此实际上没有执行权限。掩码是根据模式的组位或 chmod 的组位(如果使用)创建的。

因此,如果您创建一个普通文件,它将x在 ACL 中设置,但会被屏蔽。默认情况下,目录是使用模式 755 或 775 创建的(取决于 umask),因此掩码将为rwxr-x。因此 ACL 中的 x 标志仍然有效。

以前我对首都很困惑X。这仅适用于同时为多个文件设置 ACL 的情况。然后你可以设置权限,X这将导致目录有x而文件没有。

答案2

您无法使用 ACL 来设置不同的默认文件和目录权限。但x权限也不是问题。将默认 ACL 设置为相应的目录权限(即rwxr-x---):将相应地创建文件,而不包含 "visible" x

创建的任何文件或目录必须伴随文件权限模式(没有该参数则无法调用相应的系统调用)。在大多数情况下,相应的代码使用rw-rw-rw-文件和rwxrwxrwx目录的权限模式,将权限的删除留给默认 ACL(如果没有,则留给 umask)。

默认 ACL(或 umask)不会添加有效权限,而只能删除一些权限。因此,x即使默认 ACL 包含xfor 目录,调用代码的 for 的选择也会受到尊重。

相关内容