我们希望在某个目录上模仿系统范围的 002 umask 的行为foo
,以确保以下结果:
- 在其下创建的所有子目录都
foo
将具有 775 权限 - 在目录下创建的所有文件
foo
和子目录都将具有 664 权限 - 1 和 2 都会发生在所有用户(包括 root)和所有守护进程创建的文件/目录上。
假如说已启用 ACL在我们的分区上,这是我们想出的命令:
setfacl -R -d -m mask:002 foo
...但这不起作用。目录中创建的新文件最终看起来像这样:
-rw--写入--+
当我运行getfacl
新文件时,我得到:
# 文件:newfile.py
# 所有者:root
# 组:agroup
user::rw-
group::rwx #effective:-w-
mask::-w-
other::r--
换句话说,应用mask:200
ACL 是不是和 申 请 一样umask 200
.
所以是有没有办法使用 ACL 应用每个目录的 umask?
答案1
这是 ACL 的典型工作 :-)
你的例子
$ mkdir /tmp/foo
设置目录本身的权限
$ setfacl -m g::rwx -m o::rx /tmp/foo
设置新创建的目录和该目录中文件的权限。
$ setfacl -m default:g::rwx -m o::rx /tmp/foo
测试
$ mkdir /tmp/foo/bar
$ touch /tmp/foo/bar/baz.py
$ ls -ld /tmp/foo/bar /tmp/foo/bar/baz.py
drwxrwxr-x+ 2 jdoe jdoe 4096 Mar 10 00:06 /tmp/foo/bar
-rw-rw-r-- 1 jdoe jdoe 0 Mar 10 00:06 /tmp/foo/bar/baz.py
解释
- 掩码的概念与 ACL 和 Unix 权限掩码非常不同。ACL 的掩码是文件的一个属性……它限制通过 ACL 授予的最大权限(
mask:r-x
+group:foo:rwx
=> 有效权限 =r-x
) - 警告:修改组的 Unix 权限也会修改 ACL 的掩码(设计如此!)。
建议
- 使用 setgid (如
chmod 2755
),这样您就可以控制哪个组可以写入文件。 - 和/或明确授予组权限
setfacl -m group:dev_team:rwx
答案2
您可以使用每次创建文件时触发的 dnotify 和脚本。请参阅:https://serverfault.com/a/127686/30946