Linux
文件系統 ACL 中“遮罩”的確切用途是什麼?
當我在目錄中應用預設 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 年過去了,它是一個廣泛的作業系統標準——從Linux到FreeBSD再到Solaris(以及後一種情況)——實際執行。
IEEE 1003.1e 工作草案 #17 讀起來很有趣,我推薦它。在附錄 B § 23.3 中,工作組提供了一個詳細的、八頁的基本原理,說明 POSIX ACL 相對於舊
S_IRWXG
組權限標誌的工作方式有些複雜。(值得注意的是,TRUSIX 人十年前提供了大致相同的分析。)這涵蓋了面具的存在理由,我將在這裡只做簡要介紹。
- 傳統的 Unix 應用程序希望能夠拒絕對文件、命名管道、設備或目錄的所有訪問
chmod(…,000)
。在存在 ACL 的情況下,如果存在遮罩並且舊映射到遮罩,這只會關閉所有使用者和組權限。S_IRWXG
如果沒有這個,將舊文件權限設置為000
不會影響任何非所有者user
或group
條目,並且令人驚訝的是,其他使用者仍然可以訪問該對象。暫時將文件的權限位更改為無訪問權限,chmod 000
然後再將其更改回來是一種舊的文件鎖定機制,在 Unix 獲得建議鎖定機制之前使用,正如您所見,即使在 21 世紀人們仍在使用。setlock
(自 1990 年代後期以來,建議鎖定已經很容易從帶有攜帶式知名工具的腳本中使用。)- 傳統的 Unix 腳本期望能夠執行
chmod go-rwx
並最終只有對象的所有者才能訪問該對象。S_IRWXG
同樣,除非有遮罩並且舊的權限映射到它,否則這不起作用;因為否則該chmod
命令不會關閉任何非所有者user
或group
訪問控制條目,從而導致所有者和非所有者組以外的使用者保留對預期**只能由所有者訪問的內容的訪問權限。再一次——正如你所看到的——這種chmod
命令在12 年後仍然是公認的智慧。理由仍然成立。- 其他沒有遮罩機制的方法存在缺陷。
- 在大多數情況下,權限位與 ACL 分開並
and
與 ACL 一起編輯的替代系統將需要文件權限標誌rwxrwxrwx
,這會使許多 Unix 應用程序在看到他們認為的世界時抱怨的事情感到困惑 -可寫的東西。- 另一個系統,如果權限位與 ACL 分開並
or
與 ACL 一起編輯,則會chmod(…,000)
出現前面提到的問題。因此,一個帶有遮罩的 ACL 系統。
進一步閱讀
- 克雷格魯賓 (1989-08-18)。 為 Unix 系統選擇訪問控制列表功能的基本原理。NCSC-TG-020-A。黛安出版。國際標準書號 9780788105548。
- IEEE 電腦協會攜帶式應用標準委員會(1997 年 10 月)。 資訊技術標準草案 - 攜帶式作業系統介面 (POSIX) - 第 1 部分:系統應用程序介面 (API) - 修訂號:保護、審計和控制介面$$ C Language $$ IEEE 1003.1e。草案 17。
- 溫弗里德·川普 (1999-02-28)。 關於 Posix.1e 的總結
- https://unix.stackexchange.com/a/406545/5132
- https://unix.stackexchange.com/a/235284/5132
- 應用 POSIX ACL 時如何授予擁有組權限?
- 在 bash 中的文件中執行原子寫入操作