Linux

文件系統 ACL 中“遮罩”的確切用途是什麼?

  • November 7, 2021

當我在目錄中應用預設 ACL 時,我看到default:mask或只是mask在以下兩種情況下。

方案 1

-bash-4.2$ ls -ld test/
drwxr-x---. 2 test test 4096 Oct 15 19:12 test/

-bash-4.2$ setfacl -d -m u:arif:rwx test/

-bash-4.2$ getfacl --omit-header test
user::rwx
group::r-x
other::---
default:user::rwx
default:user:arif:rwx
default:group::r-x
default:mask::rwx
default:other::---

方案 2

-bash-4.2$ ls -dl dir/
drwxr-x---. 2 test test 4096 Oct 15 18:17 dir/

-bash-4.2$ getfacl dir
# file: dir
# owner: test
# group: test
user::rwx
group::r-x
other::---

-bash-4.2$ setfacl -m user:arif:rwx dir

-bash-4.2$ getfacl --omit-header dir
user::rwx
user:arif:rwx
group::r-x
mask::rwx
other::---

那麼mask這裡的目的是什麼?

什麼

這個 3 位 ACL 系統起源於 TRUSIX。其他 ACL 系統,例如 FreeBSD、MacOS、AIX、Illumos 和 Solaris 中的 NFS4 風格的系統,工作方式不同,並且不存在遮罩訪問控制條目的概念。

顧名思義,遮罩是一個遮罩,用於屏蔽使用者**和組的訪問控制條目授予的權限。它是任何訪問控制條目可能授予的最大權限,除了文件所有者或“其他”條目。它and的 3 位與這些其他條目的 3 位一起編輯。

因此,例如,如果使用者被rw-訪問控制條目授予,但遮罩是r--,則該使用者實際上只有r--訪問權限。相反,如果使用者僅--x通過訪問控制條目授予,則遮罩rwx不會授予額外的權限,並且使用者只有--x訪問權限。

父目錄上的預設遮罩是應用於在其中創建的內容的遮罩設置。它是一種繼承形式。

為什麼

遺憾的是 IEEE 1003.1e 從未成為標準並於 1998 年被撤銷。實際上,19 年過去了,它是一個廣泛的作業系統標準——從LinuxFreeBSD再到Solaris(以及後一種情況)——實際執行。

IEEE 1003.1e 工作草案 #17 讀起來很有趣,我推薦它。在附錄 B § 23.3 中,工作組提供了一個詳細的、八頁的基本原理,說明 POSIX ACL 相對於舊S_IRWXG組權限標誌的工作方式有些複雜。(值得注意的是,TRUSIX 人十年前提供了大致相同的分析。)這涵蓋了面具的存在理由,我將在這裡只做簡要介紹。

  • 傳統的 Unix 應用程序希望能夠拒絕對文件、命名管道、設備或目錄的所有訪問chmod(…,000)。在存在 ACL 的情況下,如果存在遮罩並且舊映射到遮罩,這只會關閉所有使用者和組權限。S_IRWXG如果沒有這個,將舊文件權限設置為000不會影響任何非所有者usergroup條目,並且令人驚訝的是,其他使用者仍然可以訪問該對象。暫時將文件的權限位更改為無訪問權限,chmod 000然後再將其更改回來是一種舊的文件鎖定機制,在 Unix 獲得建議鎖定機制之前使用,正如您所見,即使在 21 世紀人們仍在使用setlock(自 1990 年代後期以來,建議鎖定已經很容易從帶有攜帶式知名工具的腳本中使用。)
  • 傳統的 Unix 腳本期望能夠執行chmod go-rwx並最終只有對象的所有者才能訪問該對象。S_IRWXG同樣,除非有遮罩並且舊的權限映射到它,否則這不起作用;因為否則該chmod命令不會關閉任何非所有者usergroup訪問控制條目,從而導致所有者和非所有者組以外的使用者保留對預期**只能由所有者訪問的內容的訪問權限。再一次——正如你所看到的——這種chmod命令在12 年後仍然是公認的智慧。理由仍然成立。
  • 其他沒有遮罩機制的方法存在缺陷。
  • 在大多數情況下,權限位與 ACL 分開並and與 ACL 一起編輯的替代系統將需要文件權限標誌rwxrwxrwx,這會使許多 Unix 應用程序在看到他們認為的世界時抱怨的事情感到困惑 -可寫的東西。
  • 另一個系統,如果權限位與 ACL 分開並 or與 ACL 一起編輯,則會chmod(…,000)出現前面提到的問題。

因此,一個帶有遮罩的 ACL 系統。

進一步閱讀

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