我正在尝试使用 来设置我的目录结构的默认权限acl
。我希望分别对目录和文件具有以下默认权限:
drwx--x---
-rw-r-----
但是当我将默认权限设置为group
仅x
时:
setfacl -R -d -m g::x my_dir
然后新创建的目录具有我想要的权限,但新创建的文件具有-rw-------
而不是-rw-r-----
.换句话说,我试图删除r
目录的权限,同时保留r
文件的权限。
我怎样才能做到这一点?
答案1
Linux/Solaris ACL 不支持此功能。您不能为文件和目录设置不同的默认 ACL。
拥有可以遍历但其内容无法列出(可执行但不可读)的目录很少有用。事实上,它确实有效,这有点历史上的偶然。是的,它偶尔会很有用——但你真的需要它吗? (您可能想将其作为一个单独的问题来问。)
如果您确实需要具有不同权限的目录和文件,您可以考虑以下几种可能性:
- 让您的应用程序更改其创建的文件的所有权,而不是依赖固有的文件系统属性。
默认情况下将所有内容设为私有 (
setfacl -d -m group:mygroup:X
) 并使用中的建议之一Group+rx 权限仅在使用 ACL 的目录中?:- 通过绑定安装而不是直接公开组公共文件。
- 使用 inotify 观察树并
setfacl
在新的常规文件上运行。
答案2
看来你不能用 或 来做到这一点setfacl
,umask
因为它们似乎都不允许文件和目录有单独的默认值。有关其他选项,请参阅此类似问题。如果您想强制某些应用程序创建没有读取权限的目录和具有读取权限的文件,您可以修改它,或者尝试仅给定一个二进制文件的 LD_PRELOAD (尽管为此编写一个库可能有点大材小用)。