使用 setfacl 设置默认权限

Mar*_*ter 4 acl permissions directory files

我正在尝试使用acl. 我想分别对目录和文件具有以下默认权限:

drwx--x---
-rw-r-----
Run Code Online (Sandbox Code Playgroud)

但是当我只为groupto设置默认权限时x

setfacl -R -d -m g::x my_dir
Run Code Online (Sandbox Code Playgroud)

然后新创建的目录具有我想要的权限,但新创建的文件具有-rw-------而不是-rw-r-----. 换句话说,我试图r从目录中删除权限,同时保留r对文件的权限。

我怎样才能做到这一点?

Gil*_*il' 5

Linux/Solaris ACL 不支持这一点。您不能为文件和目录设置不同的默认 ACL。

拥有可以遍历但其内容无法列出(可执行但不可读)的目录很少有用。完全有效的事实是一个历史意外。是的,它偶尔会有用——但你真的需要它吗?(您可能想将此作为一个单独的问题提出。)

如果您确实需要具有不同权限的目录和文件,您可以考虑以下几种可能性:

  • 让您的应用程序更改它创建的文件的所有权,而不是依赖于内在的文件系统属性。
  • 默认情况下将所有内容设为私有 ( setfacl -d -m group:mygroup:X) 并仅在使用 ACL 的目录中使用 Group+rx 权限中的建议之一

    • 通过绑定安装而不是直接公开组公共文件。
    • 使用 inotify 观察树并setfacl在新的常规文件上运行。