setfacl 后不考虑默认权限

setfacl 后不考虑默认权限

我正在尝试设置默认权限,以便默认情况下在我的文件夹 hackerrank 中创建的所有文件都将使用 rwx 创建。

我已经做了一个chmod g+s(因为我正在查看不同的线程,老实说不确定这做了什么,但以防万一它改变了任何东西):

chmod g+s hackerank/

然后尝试在组上设置默认 ACL:

setfacl -d -m g::rwx hackerank/

如果我检查 ACL,它们现在看起来不错:

getfacl hackerank/
# file: hackerank/
# owner: will
# group: will
# flags: -s-
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:will:rwx
default:mask::rwx
default:other::r-x

但我创建一个新文件,它仍然继承-rw-rw-r--+(+显示ACL属性有效:

touch hackerank/test
ll hackerank/
total 8.0K
drwxrwsr-x+ 2 will will 4.0K Jul 11 16:09 ./
drwxr-xr-x  3 will will 4.0K Jul 11 15:03 ../
-rw-rw-r--+ 1 will will    0 Jul 11 16:09 test

getfacl hackerank/test
# file: hackerank/test
# owner: will
# group: will user::rw-
group::rwx  #effective:rw-
group:will:rwx  #effective:rw-
mask::rw-
other::r--

关于我错过了什么的任何线索吗?

感谢您的帮助

答案1

另请参阅两个月前的这个问题:使用 ACL 设置“x”(可执行)位。有一个很好的指针指向官方文档中定义的位置,在伊尔卡丘的回答


应用程序以给定模式创建文件。然后,该模式受到当前的限制,但从未扩展umask

strace touch a
...
open("a", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3

例如,我有umask002 的文件,它将上面创建的文件限制为0664/-rw-rw-r--(使用 查看stat a)。

我的理解是这也限制了 ACL。 ACL 不允许超出您在读取文件模式时看到的权限,因此

will按组对文件的访问权限不能超过rw-.这是由maskACL... 强制执行的,它解释了 getfacl 输出中的“有效”注释。编辑:掩码适用于除“user::”(文件所有者)和“other:”之外的所有 ACL 条目。所有此类 ACL 条目均受掩码限制。

will除和之外的用户和组的访问权限will不能超过r--

相关内容