Linux

Linux ACL 行為:設置遮罩更改“ls”輸出,但不更改實際權限

  • December 29, 2017

這可能是晚上的時間,但這讓我感到困惑。如下圖。

[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,模式0750root所有者和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 一起使用可能會很棘手,但這似乎是完全錯誤的。(雖然我預計會遺漏一些明顯的東西;))

我已經看到為什麼組上的 chmod(1) 會影響 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.

然後:

  1. 否則,如果程序的有效組 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 位必須同意它。

引用自:https://serverfault.com/questions/358540