Linux

ACL 命名組權限不會覆蓋文件權限。為什麼?

  • April 12, 2017

簡而言之,我正在嘗試創建一個文件伺服器,其中包含一個目錄,組中的任何使用者都對該目錄中的任何文件具有讀寫執行權限。我的研究表明 ACL 是適合這項工作的工具,但我遇到了一個問題,它的行為似乎不像預期的那樣。

我正在執行最新的 Ubuntu Server LTS 16.04.1,並且我已確保為相關驅動器啟用了 ACL。

對於此範例,我有 2 個使用者,alexusera,並且兩個使用者都屬於該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 條目,它會覆蓋這些文件權限,但情況似乎並非如此。

我做錯了什麼,是我誤解了,還是這實際上不可能?

posix 權限優先於您的 acl。因此,當您在給出 acl 之後對文件進行 chmod 時,您正在更改 acl 遮罩。這裡有一篇很棒的文章: https ://serverfault.com/questions/352783/why-does-chmod1-on-the-group-affect-the-acl-mask

在對文件應用 acl 權限後,讓我解釋一下前 11 個字元的含義。

-rwxrwx---+ 1 alex alex          4 Dec  7 17:09 test.txt*

10 個字元的權限字元串末尾的 + 表示有與此文件關聯的 ACL 設置。將使用者、組和其他“rwx”標誌解釋為:

  • user:顯示使用者 ACL 設置。與標準使用者文件設置相同;rwx。
  • group:顯示目前 ACL 遮罩設置,而不是組所有者設置;rwx
  • other:顯示其他 ACL 設置,與標准其他文件設置相同。無訪問權限。

重要的

使用chmod更改具有 ACL 的文件的組權限不會更改組所有者權限,但會更改 ACL 遮罩。

如果要更改所有者組權限,請使用setfacl -mg::perms 文件

您使用以下命令更改組所有者權限

chmod 700 test.txt
  • 7 (rwx) 更改文件所有者權限
  • 0 (—) 更改 acl 遮罩。
  • 0 (—) 更改其他權限

通過以下命令更改上命令

setfacl -m g::--- text.txt

應用 ACL 權限後, setfacl -mg::perms 文件是更改所有者組權限的唯一方法。

命名使用者、命名組和所有者組權限由ACL 遮罩控制

您更改了為什麼命名組(文件伺服器)具有有效權限 0(—)的遮罩權限 0(—)。

引用自:https://unix.stackexchange.com/questions/328806