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_ACL
  • WRITE_ACL
  • READ_ATTRIBUTES
  • WRITE_ATTRIBUTES

APPEND_DATA 值會當作 WRITE_DATA 來實作。實際上,WRITE_DATA 值與 APPEND_DATA 值之間沒有任何功能差別。這兩個值必須一致地設定或取消設定。

您可以透過使用 WRITE_OWNER 值,修改物件所有權。當變更擁有者或群組時,會關閉 setuid 位元。繼承旗標只具有目錄 ACL 中的意義,而且只會套用至在已設定繼承旗標之後,於目錄中建立的物件 (例如,親項目錄 ACL 的繼承變更並不會影響現有的物件)。NFS 第 4 版 ACL 中的項目會與順序相依。若要判斷是否容許所要求的存取,會依順序處理每一個項目。只考慮具有下列值的項目:
  • 符合有效 UID 的欄位
  • 在項目或有效 GID 中指定的使用者
  • 在主體項目中指定的群組
直到「接受」要求程式存取的所有位元前,都會處理每一個項目。在項目「接受」存取類型之後,在處理之後的項目時,將不再考慮它。如果在該遮罩值的要求程式存取是必要的,但無法判定時發現「拒絕」項目,將拒絕要求。如果評估作業到達 ACL 尾端,將拒絕要求。

支援的 ACL 大小上限為 64 KB。ACL 中的每一個項目都具有可變長度,但 64 KB 是項目上的唯一限制。