ACL 命名組權限不會覆蓋文件權限。為什麼?
簡而言之,我正在嘗試創建一個文件伺服器,其中包含一個目錄,組中的任何使用者都對該目錄中的任何文件具有讀寫執行權限。我的研究表明 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 條目,它會覆蓋這些文件權限,但情況似乎並非如此。
我做錯了什麼,是我誤解了,還是這實際上不可能?
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(—)。