章 5. Linux 存取控制清單

內容目錄

5.1. 傳統檔案許可權
5.2. ACL 的優點
5.3. 定義
5.4. 處理 ACL
5.5. 應用程式的 ACL 支援
5.6. 更多資訊

摘要

POSIX ACL (存取控制清單) 可以看做是傳統檔案系統物件許可權概念的擴充。使用 ACL,定義許可權比傳統許可權概念更有彈性。

POSIX ACL 這個詞彙表示這是真正的 POSIX (可攜式作業系統介面) 標準。各自的草稿標準 POSIX 1003.1e 和 POSIX 1003.2c 已經因多種因素而撤銷了。然而,在屬於 UNIX 家族中很多系統發現的 ACL,是以這些草稿為基礎,而且本章節敘述的系統 ACL 實行,也是依循這兩個標準。要查閱它們,請到 http://wt.xpilot.org/publications/posix.1e/


5.1. 傳統檔案許可權

有關傳統 Linux 檔案許可權的基本說明,請參閱 節 3.2, "使用者和存取許可權" (↑啟動)。還有 setuid、setgid 以及黏貼位元的更多進階功能

5.1.1. setuid 位元

在某些狀況下,存取許可權可能受限太多。因此,Linux 擁有其他的設定,可以讓目前使用者與群組可以識別特定動作的暫時變更。例如,passwd 程式通常需要開機許可權來存取 /etc/passwd。此檔案包含一些重要的資訊,例如,使用者的主目錄,以及使用者與群組的 ID。因此,一般使用者將無法變更 passwd,因為授與所有使用者直接存取此檔案是非常危險的。此問題的可行解決方案是 setuid 機制。setuid (設定使用者 ID) 是一種特殊檔案屬性,可以指示系統根據特定使用者 ID 的標示來執行程式。請考慮使用 passwd 指令:

-rwsr-xr-x  1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd

您會看到 s,表示已針對使用者許可權設定 setuid 位元。藉由 setuid 位元,所有啟動 passwd 指令的使用者,皆能以 root 身分來執行。

5.1.2. setgid 位元

setuid 位元適用於使用者。不過,群組也有對等的屬性:setgid 位元。設定此位元的程式會以儲存時指定的群組 ID 來執行,無論啟動它的使用者為何。因此,在附帶 setgid 位元的目錄中,所有新建的檔案和子目錄會指定至目錄所屬的群組。請思考以下範例目錄:

drwxrws--- 2 tux archive 48 Nov 19 17:12  backup

您會看到 s,表示已針對群組許可權設定 setgid 位元。目錄的擁有者與 archive 群組的成員可存取此目錄。非此群組成員的使用者會「對應」到個別群組。所有已寫入檔案的有效群組 ID 將會是 archive。例如,以 archive 群組 ID 執行的備份程式,即使沒有 root 權限,仍然能夠存取此目錄。

5.1.3. 黏貼位元

另外還有黏貼位元。它屬於可執行程式或目錄結果是不一樣的。如果它屬於程式,用此方法標示的檔案會載入 RAM,每次使用時就不需要從硬碟取得該程式。此屬性很少用,因為現在硬碟速度夠快了。如果此位元指定至目錄,它會禁止使用者刪除其他人的檔案。典型範例包括 /tmp/var/tmp 目錄:

drwxrwxrwt 2 root root 1160 2002-11-19 17:15 /tmp