使用 ACL 设置每个目录的 umask

使用 ACL 设置每个目录的 umask

我们希望在某个目录上模仿系统范围的 002 umask 的行为foo,以确保以下结果:

  1. 在其下创建的所有子目录都foo将具有 775 权限
  2. 在目录下创建的所有文件foo和子目录都将具有 664 权限
  3. 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:200ACL 是不是和 申 请 一样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

相关内容