使用ACL设置每个目录的umask

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

  1. foo下创build的所有子目录将拥有775个权限
  2. foo和子目录下创build的所有文件将具有664个权限
  3. 1和2会发生在由所有用户创build的文件/目录中,包括root和所有的守护进程。

假设在我们的分区上启用了ACL ,这是我们提出的命令:

 setfacl -R -d -m mask:002 foo 

…但这不起作用。 在目录中创build的新文件最终看起来像这样:

-RW – WR – +

当我在新文件上运行getfacl时,我得到:

#file:newfile.py
#所有者:根
#group:agroup
用户:: RW-
group :: rwx #effective:-w-
面具:: – W-
其他:: R–

换句话说,在ACL中应用mask:200与应用umask 200 一样。

那么是否有一种方法来应用每个目录的umask与ACL?

这是ACL的典型工作:-)

你的例子

 $ mkdir /tmp/foo 

设置目录本身的权限

 $ setfacl -mg::rwx -mo::rx /tmp/foo 

设置新创build的目录和文件在该目录中的权限。

 $ setfacl -m default:g::rwx -mo::rx /tmp/foo 

testing

 $ 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:rx + group:foo:rwx =>有效权限= rx
  • 警告:修改组的Unix权限,也会修改ACL的掩码(按devise!)。

build议

  • 使用setgid(如chmod 2755 ),所以你控制哪个组可以写入文件。
  • 和/或显式授予对组setfacl -m group:dev_team:rwx权限

您可以使用每次创build文件时触发的dnotify和脚本。 请参阅: https : //serverfault.com/a/127686/30946