Linux
Linux ACL 行為:設置遮罩更改“ls”輸出,但不更改實際權限
這可能是晚上的時間,但這讓我感到困惑。如下圖。
[root@node1 acltest]# getfacl foo/ # file: foo # owner: root # group: testuser user::rwx group::r-x other::--- [root@node1 acltest]# ls -la . total 24 drwxr-xr-x 3 root root 4096 Feb 9 21:53 . drwxr-xr-x 25 root root 4096 Feb 9 21:54 .. drwxr-x--- 2 root testuser 4096 Feb 9 21:53 foo [root@node1 acltest]# setfacl -m m::rwx foo [root@node1 acltest]# getfacl foo/ # file: foo # owner: root # group: testuser user::rwx group::r-x mask::rwx other::--- [root@node1 acltest]# ls -la . total 24 drwxr-xr-x 3 root root 4096 Feb 9 21:53 . drwxr-xr-x 25 root root 4096 Feb 9 21:54 .. drwxrwx---+ 2 root testuser 4096 Feb 9 21:53 foo [root@node1 acltest]# su - testuser [testuser@node1 ~]$ cd /acltest/foo/ [testuser@node1 foo]$ ls -la . total 16 drwxrwx---+ 2 root testuser 4096 Feb 9 21:53 . drwxr-xr-x 3 root root 4096 Feb 9 21:53 .. [testuser@node1 foo]$ touch bar touch: cannot touch `bar': Permission denied
換句話說:我創建了一個目錄
foo
,模式0750
為root
所有者和testuser
組。(testuser
是 的私人團體testuser
,但這沒關係。)該
getfacl
命令正確顯示此目錄上沒有 ACL,並且還沒有遮罩。如果我現在要添加命名組或使用者,遮罩將根據組權限進行設置。如果我將遮罩顯式設置為
rwx
現在,則顯示的組權限ls
也會更改。我知道它會以相反的方式發生(當組權限更改時,遮罩會更改),但這似乎令人費解。更令人費解的是,
getfacl
輸出沒有顯示組權限,rwx
但是 - 正如所說 -ls
那樣。哪一個是對的?顯然, 的輸出
getfacl
是正確的,因為testuser
無法寫入foo
. 順便說一句,正如預期的那樣,因為我沒有授予該testuser
組任何這樣做的權限。它繼續。我不能通過僅使用來允許
testuser
組寫入權限。我必須明確設置 ACL 使用以允許finally touch 。foo``chmod``setfacl -m g:testuser:rwx foo``testuser``foo/bar
getfacl
有人可以解釋和輸出差異背後的原因ls
嗎?我知道將普通權限與 ACL 一起使用可能會很棘手,但這似乎是完全錯誤的。(雖然我預計會遺漏一些明顯的東西;))
從 acl 的 man(5) 頁面
ACL_MASK The ACL_MASK entry denotes the maximum access rights that can be granted by entries of type ACL_USER, ACL_GROUP_OBJ, or ACL_GROUP.
然後:
- 否則,如果程序的有效組 ID 或任何補充組 ID 與文件組或 ACL_GROUP 類型的任何條目的限定符匹配,則
if the ACL contains an ACL_MASK entry, then if the ACL_MASK entry and any of the matching ACL_GROUP_OBJ or ACL_GROUP entries contain the requested permissions, access is granted, else access is denied.
這意味著可以在 dir 上授予 rwx *,*但 chmod 位必須同意它。