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

jos*_*rry 10 linux access-control-list

我在目录上定义了一些 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--
Run Code Online (Sandbox Code Playgroud)

我希望在该文件夹中创建的任何新文件都是 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--
Run Code Online (Sandbox Code Playgroud)

大写 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--
Run Code Online (Sandbox Code Playgroud)

sil*_*ilk 7

好吧,但是您的示例正是您想要的;)

看第二个:

公开 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% 确定,但掩码的限制不能低于基本权限)。

如此有效地你得到 r-- 文件和 rx 目录。
因为创建的目录将具有 user:rx -> 掩码将是 rx -> 有效权限将是 rx。
对于文件:它们将具有 r-- 因此掩码将是 r-- ACL 的有效权限也将是 r--。(如果你创建一个文件并给它一个 user::rx 权限,那么掩码将被修改并且用户表单 acl 也将获得 x)


jos*_*rry 1

这篇关于 ACL 和掩码的文章确实帮助我理解了如何做我想做的事情以及为什么。

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

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