NSF 第 4 版存取控制清單及內容原則
NFS 第 4 版「存取控制清單 (ACL)」包含類型、遮罩及旗標欄位。
以下是這些欄位的說明:
- 類型欄位包含下列其中一個值:
ALLOW– 將遮罩欄位中指定的許可權授予誰欄位中指定的主體。DENY– 拒絕將遮罩欄位中指定的許可權授予誰欄位中指定的主體。
- 遮罩欄位包含下列一(個)以上細密的許可權值:
READ_DATA / LIST_DIRECTORY– 從非目錄物件讀取資料或列出目錄中的物件。WRITE_DATA / ADD_FILE– 將資料寫入非目錄物件中,或將非目錄物件新增至目錄。APPEND_DATA / ADD_SUBDIRECTORY– 將資料附加至非目錄物件,或將子目錄新增至目錄。READ_NAMED_ATTRS– 讀取物件的具名屬性。WRITE_NAMED_ATTRS– 寫入物件的具名屬性。EXECUTE– 執行檔案或遍訪/搜尋目錄。DELETE_CHILD– 刪除目錄內的檔案或目錄。READ_ATTRIBUTES– 讀取檔案的基本 (非 ACL) 屬性。WRITE_ATTRIBUTES– 變更與檔案或目錄相關聯的時間。DELETE– 刪除檔案或目錄。READ_ACL– 讀取 ACL。WRITE_ACL– 寫入 ACL。WRITE_OWNER– 變更擁有者及群組。SYNCHRONIZE– 同步化存取 (由於要與其他 NFS 第 4 版用戶端相容而存在,但沒有已實作的功能)。
- 旗標欄位 – 這個欄位定義目錄 ACL 的繼承能力,並指出誰欄位是否包含群組。這個欄位包含零個以上的下列旗標:
- FILE_INHERIT – 指定在這個目錄中,新建的非目錄物件繼承這個項目。
- DIRECTORY_INHERIT – 指定在這個目錄中,新建的子目錄繼承這個項目。
- NO_PROPAGATE_INHERIT – 指定在這個目錄中,新建的子目錄繼承這個項目,但是這些子目錄並不會將這個項目傳遞至它們的新建子目錄。
- INHERIT_ONLY – 指定這個項目並不會套用至這個目錄,只會套用至繼承這個項目的新建物件。
- IDENTIFIER_GROUP – 指定誰欄位代表群組;否則,誰欄位代表使用者或特殊的誰值。
- 誰欄位 – 這個欄位包含下列其中一個值:
User– 指定這個項目會套用至哪一個使用者。Group– 指定這個項目會套用至哪一個群組。Special– 這個屬性可以是下列其中一個值:OWNER@– 指定這個項目套用至物件的擁有者。GROUP@– 指定這個項目套用至物件的擁有群組。EVERYONE@– 指定這個項目套用至系統的所有使用者,包括擁有者及群組。
如果 ACL 空白,則僅限有效 UID 為 0 的主體才能存取物件。不管 ACL 可能或不可能包含的項目為何,物件的擁有者都會隱含地具有下列遮罩值:
READ_ACLWRITE_ACLREAD_ATTRIBUTESWRITE_ATTRIBUTES
APPEND_DATA 值會當作 WRITE_DATA 來實作。實際上,WRITE_DATA 值與 APPEND_DATA 值之間沒有任何功能差別。這兩個值必須一致地設定或取消設定。
您可以透過使用
WRITE_OWNER 值,修改物件所有權。當變更擁有者或群組時,會關閉 setuid 位元。繼承旗標只具有目錄 ACL 中的意義,而且只會套用至在已設定繼承旗標之後,於目錄中建立的物件 (例如,親項目錄 ACL 的繼承變更並不會影響現有的物件)。NFS 第 4 版 ACL 中的項目會與順序相依。若要判斷是否容許所要求的存取,會依順序處理每一個項目。只考慮具有下列值的項目:- 符合有效 UID 的誰欄位
- 在項目或有效 GID 中指定的使用者
- 在主體項目中指定的群組
支援的 ACL 大小上限為 64 KB。ACL 中的每一個項目都具有可變長度,但 64 KB 是項目上的唯一限制。