如何为目录和文件设置不同的Linux默认ACL


9

我在目录上定义了一些ACL,如下所示:

# owner: root
# group: root
user::rwx
group::r--
mask::r-x
other::r--
default:user::r--
default:group::r--
default:mask::r-x
default:other::r--

我希望在该文件夹中创建的任何新文件为u:apache:r--,以及任何新目录为u:apache:rx。如何使用ACL指定该意图?

我已经尝试过了-dm u:apache:rX,而且与只是做些似乎没有什么不同rx

overt htdocs # getfacl .
# file: .
# owner: root
# group: root
user::rwx
user:apache:r--
group::r--
mask::r-x
other::r--
default:user::r--
default:user:apache:r--
default:group::r--
default:mask::r--
default:other::r--

overt htdocs # setfacl -dm u:apache:rx .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

overt htdocs # rm blah.txt
overt htdocs # setfacl -dm u:apache:rX .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

大写的X权限似乎仅对设置当前权限有用,而对设置默认权限无效:

overt htdocs # setfacl -x u:apache blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
group::r--
mask::r--
other::r--

overt htdocs # setfacl -m u:apache:rX blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r--
group::r--
mask::r--
other::r--

Answers:


6

好吧,但是您的示例确实满足您的要求;)

看第二个:

公开htdocs#setfacl -dm u:apache:rx。
公开htdocs#touch blah.txt
公开htdocs#getfacl blah.txt
#文件:blah.txt
#所有者:root
#组:根
用户:: r--
用户:apache:rx#有效:r--
组:: r--
面具:: r--
其他:: r--

重要的一行是:

user:apache:r-x #effective:r--

即使将acl设置为rx,对于文件它实际上也是r--。这是因为有面具。

如果用户使用用户的rw-权限创建了掩码,则该掩码始终仅是文件的rw-。(我不是100%肯定,但是mask的限制不能少于基本权限)。

因此,有效地获得r--表示文件,rx表示目录。
因为创建的目录将具有user:rx-> mask将为rx->有效权限将为rx。
对于文件:它们将具有r--,因此mask将为r--,并且对ACL的有效权限也将为r--。(如果创建文件并授予用户user :: rx权限,则将修改mask,并且使用acl的用户也将获得x)


完全错过了#effective文字!感谢您对掩码如何影响有效权限的解释。
joshperry13年

2

不幸的是,Linux ACL根本无法做到这一点。确实,遮罩将按照有效权限显示出您想要的功能。但是,下次您执行重新计算权限掩码bam的操作时,所有文件将变为可执行文件。

您不妨辞职,以期望ACL中的所有文件都可执行。这实际上只是一种便利,而不是安全性,只要您不将这些文件夹放在$ PATH中,就不成问题。如果仍然困扰您,唯一的选择是将ACL控制的文件夹放在没有执行选项的文件系统上。


1

-d(或--default)用于在目录上设置默认值,以便在其中创建的内容继承权限(就像您正在做的那样)。

这是一个快速概述。 http://www.vanemery.com/Linux/ACL/linux-acl.html#default

文件不可能具有一个默认值,而目录则具有不同的默认值。

您可以在cron之外运行一个脚本,该脚本每分钟对所有目录执行一次setfacl-尽管这比理想的解决方案要差。

找到/ path / to / top / dir -type d -exec setfacl -dm u:apache:rx {} \;

要么

查找/ path / to / top / dir -type d | xargs setfacl -dm u:apache:rx


1

这篇关于ACL和Masks的帖子确实帮助我了解了如何做自己想做的事情以及为什么做。

我理解的缺失部分是,在创建文件时,内核使用默认权限集0666和新目录0777。因此默认情况下,目录将设置执行(遍历)位。

ACL掩码基本上是一种umask在目录/文件/用户级别上设置的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.