为什么我的新文件没有获得组可写权限?

为什么我的新文件没有获得组可写权限?

我想设置一个目录,以便所有新文件都是可组写的,无论单个用户的 umask 设置如何。

我创建了一个stor组并将所有用户添加到其中。然后,我创建了文件夹:

$ mkdir uaroot
$ chgrp stor uaroot
$ ls -l
total 4
drwxr-xr-x  2 ua  stor  512 Dec 27 14:35 uaroot

我为其设置了 ACL:

$ setfacl -d -m u::rwx,g::rwx,o::rx,mask::rwx uaroot
$ setfacl -m u::rwx,g::rwx,o::rx,mask::rwx uaroot
$ ls -l
total 8
drwxrwxr-x+ 2 ua  stor  512 Dec 27 14:35 uaroot

我可以看到 ACL 设置为:

$ getfacl uaroot
# file: uaroot
# owner: ua
# group: stor
user::rwx
group::rwx
mask::rwx
other::r-x

$ getfacl -d uaroot
# file: uaroot
# owner: ua
# group: stor
user::rwx
group::rwx
mask::rwx
other::r-x

我认为这将使该目录中的文件自动获得组可写权限,但事实并非如此:

$ cd uaroot
$ touch a
$ ls -l
total 4
-rw-r--r--+ 1 ua  stor  0 Dec 27 14:38 a

$ getfacl a
# file: a
# owner: ua
# group: stor
user::rw-
group::rwx      # effective: r--
mask::r--
other::r--

上面的标注是什么effective意思?为了让所有文件获得组可写权限,我缺少什么?

答案1

您在运行 时取消了之前的设置setfacl -m ::rwx,g::rwx,o::rx,mask::rwx uaroot,不使用-d 选项并使用-m对象modifies上的当前 ACL 设置,使用 重新运行以-d获得所需的内容。

setfacl -d -m u::rwx,g::rwx,o::rx,mask::rwx uaroot

我的测试返回:

-rw-rw-r--+ 1 georgek georgek 0 Dec 28 08:04 koko/a

请注意,default由于运行第二个setfacl命令,关键字丢失了。你需要看到

# file: koko/
# owner: georgek
# group: georgek
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:mask::rwx
default:other::r-x

确保默认值将应用于该文件夹中新创建的文件。getfacl我的测试创建的文件是

# file: koko/a
# owner: georgek
# group: georgek
user::rw-
group::rwx                      #effective:rw-
mask::rw-
other::r--

相关内容