简而言之,我试图创建一个带有目录的文件服务器,其中组中的任何用户对该目录中放置的任何文件都具有读写执行权限。我的研究表明 ACL 是完成这项工作的正确工具,但我遇到了一个问题,它似乎没有按预期运行。
我正在运行最新的 Ubuntu Server LTS 16.04.1,并且我已确保为相关驱动器启用了 ACL。
对于此示例,我有 2 个用户alex
和usera
,并且两个用户都属于该fileserver
组。我创建了一个测试目录,如下所示:
alex@tstsvr:/$ sudo mkdir -p /srv/fstest/test
alex@tstsvr:/$ sudo chown root:fileserver /srv/fstest/test
alex@tstsvr:/$ sudo chmod 770 /srv/fstest/test
在该目录中,alex
创建一个简单的测试文件:
alex@tstsvr:/$ cd /srv/fstest/test/
alex@tstsvr:/srv/fstest/test$ echo 123 > test.txt
$ ll
total 12
drwxrwx--- 2 root fileserver 4096 Dec 7 17:09 ./
drwxr-xr-x 4 root root 4096 Dec 7 16:46 ../
-rw-rw-r-- 1 alex alex 4 Dec 7 17:09 test.txt
我们可以看到,该文件属于他并且在他的组中。接下来,他设置文件权限770
并为该组设置一些 ACL,以对该文件fileserver
拥有权限。rwx
alex@tstsvr:/srv/fstest/test$ chmod 770 test.txt
alex@tstsvr:/srv/fstest/test$ setfacl -m g:fileserver:rwx test.txt
alex@tstsvr:/srv/fstest/test$ ll
total 12
drwxrwx--- 2 root fileserver 4096 Dec 7 17:09 ./
drwxr-xr-x 4 root root 4096 Dec 7 16:46 ../
-rwxrwx---+ 1 alex alex 4 Dec 7 17:09 test.txt*
现在对于usera
,一切似乎都运行良好:
usera@tstsvr:/srv/fstest/test$ getfacl test.txt
# file: test.txt
# owner: alex
# group: alex
user::rwx
group::rw-
group:fileserver:rwx
mask::rwx
other::---
usera@tstsvr:/srv/fstest/test$ cat test.txt
123
但是,如果用户alex
将权限更改为700
...:
alex@tstsvr:/srv/fstest/test$ chmod 700 test.txt
ACL 似乎无法覆盖这些权限,并且usera
无法再读取该文件:
usera@tstsvr:/srv/fstest/test$ getfacl test.txt
# file: test.txt
# owner: alex
# group: alex
user::rwx
group::rw- #effective:---
group:fileserver:rwx #effective:---
mask::---
other::---
usera@tstsvr:/srv/fstest/test$ cat test.txt
cat: test.txt: Permission denied
我的理解是,因为该文件有一个命名组 ACL 条目,所以它会覆盖这些文件权限,但情况似乎并非如此。
我是否做错了什么,我是否误解了,或者这实际上是不可能的?
答案1
posix 权限优先于您的 acl。因此,当您在给出 acl 之后 chmod 文件时,您正在更改 acl 掩码。这里有一篇很棒的文章: https://serverfault.com/questions/352783/why-does-chmod1-on-the-group-affect-the-acl-mask
答案2
对文件应用 acl 权限后,让我解释一下前 11 个字符的含义。
-rwxrwx---+ 1 alex alex 4 Dec 7 17:09 test.txt*
10 个字符的权限字符串末尾的 + 表示存在与该文件关联的 ACL 设置。将用户、组和其他“rwx”标志解释为:
- 用户:显示用户ACL设置,与标准用户文件设置相同; RWX。
- 团体:显示当前 ACL 掩码设置,而不是组所有者设置;rwx
- 其他:显示其他ACL设置,与标准其他文件设置相同。无访问权限。
重要的
使用 ACL 更改文件的组权限chmod不会更改组所有者权限,但会更改 ACL 掩码。
如果您想更改所有者组权限,请使用setfacl -mg::perms 文件
您可以使用以下命令更改组所有者权限
chmod 700 test.txt
- 7(rwx)更改文件所有者权限
- 0 (---) 更改 acl 掩码。
- 0 (---) 更改其他权限
通过下面的命令更改上面的命令
setfacl -m g::--- text.txt
申请ACL权限后setfacl -mg::perms 文件是更改所有者组权限的唯一方法。
命名用户、命名组和所有者组权限控制者ACL掩码
您更改了掩码权限 0 (---),这就是为什么 name-group(fileserver) 具有有效权限 0 (---)。