存取控制清單(access-control list)
/ ACL, said "A-C-L" or "ackle" /
簡單的擁有者/群組/其他權限,就像一間恰好只有三層會員等級的俱樂部——在你需要說「讓 Bob 進來、把 Carol 擋在外、給 Dana 唯讀」、而且全都是具名個人之前,都還夠用。存取控制清單(ACL)就是使這件事成為可能的、每個檔案專屬的賓客名單。它把一份特定使用者或群組的清單附加到檔案上,每一個都配上他們確切被允許的權利。
經典方案只提供三個桶,而 ACL 則把任意多筆項目直接和檔案的中繼資料存在一起。每一筆項目命名一個主體(某個特定使用者或群組)以及該主體可以執行的操作(讀、寫、執行,而在更豐富的系統上還有更細的權利,如刪除或更改權限)。當一個行程請求某個動作時,作業系統掃描檔案的 ACL、找出與請求使用者或其群組相符的項目、再據此決定——常常是拒絕項目優先,使得單一一條明確的拒絕能夠覆寫較廣的授予。這正是受控存取模型:一份清楚、可檢核的陳述,逐檔表達究竟誰可以做什麼。
為什麼重要:ACL 給出三類模型根本無法表達的細緻、個別控制,這就是為什麼大多數現代系統(Windows 的 NTFS,以及類 Unix 系統透過延伸 ACL)都支援它們。誠實的取捨是複雜度與維護:散布在數千個檔案上的長 ACL 變得難以稽核,而一條放錯地方的授予就能悄悄開出一個漏洞。這就是為什麼 ACL 最好搭配最小權限原則使用——只給每個主體它真正需要的存取、不多給,而不是因為方便就大手筆地發出廣泛的權利。
一個預算檔可能帶著像這樣的 ACL:擁有者 alice 完全控制;使用者 bob 讀+寫;群組 accounting 讀;使用者 carol 明確拒絕。三位元方案永遠無法像這樣個別點名 bob 和 carol;ACL 可以。
一份每檔專屬、列出具名主體的清單,每個都配上他們確切得到的權利。
ACL 帶來精確,也帶來維護成本——散布在許多檔案上的長清單難以稽核、也容易設定錯誤。應用最小權限:只授予每個主體實際需要的部分。