首頁>>技術前沿>>網站系統安全
你真的了解ACL嗎
作者:西安軟件公司 | 原創 來源:西安軟件公司 | 時間:2018年9月30日| 點擊:0次 | 【評論】

ACL 中的基本概念
    ACL的全稱是 Access Control List (訪問控制列表) ,一個針對文件/目錄的訪問控制列表。它在UGO權限管理的基礎上為文件系統提供一個額外的、更靈活的權限管理機制。它被設計為UNIX文件權限管理的一個補充。ACL允許你給任何的用戶或用戶組設置任何文件/目錄的訪問權限。

ACL 的類型

access ACL:我們可以認為每一個對象(文件/目錄)都可以關聯一個 ACL 來控制其訪問權限,這樣的 ACL 被稱為 access ACL。
default ACL:目錄也可以關聯一個 ACL 來控制在該目錄中創建的對象的默認 ACL,這樣的 ACL(目錄關聯的 ACL)被稱為 default ACL。
ACL 條目
一個 ACL 由多個 ACL 條目組成。一個 ACL 條目指定一個用戶或者一組用戶對所關聯對象的讀、寫、執行權限。下圖展示了 ACL 條目的類型及含義:

ACL 權限與 ugo 權限的對應關系
ACL 定義的權限是 ugo 權限的超集。

文件的 owner 權限對應于 ACL 權限中的 ACL_USER_OBJ 條目。
當 ACL 權限中具有 ACL_MASK 條目時,文件的 group 權限對應于 ACL 權限中的 ACL_MASK 條目。否則,當 ACL 權限中具沒有 ACL_MASK 條目時,文件的 group 權限對應于 ACL 權限中的 ACL_GROUP_OBJ 條目。
文件的 other 權限對應于 ACL 權限中的 ACL_OTHER_OBJ 條目。
文件的 ugo 權限總是與對應的 ACL 條目保持一致。修改文件的 ugo 權限會導致修改相關的 ACL 條目,同樣的,修改這些 ACL 條目會導致修改對應的 guo 權限。


新建文件的 default ACL
一個文件的 access ACL 會在通過 creat()、mkdir()、mknod()、mkfifo() 和 open() 函數創建該文件時被初始化。

如果一個目錄被設置了 default ACL,那么將會由文件創建函數的 mode 參數和目錄的 default ACL 共通決定新文件的 ACL 權限:

新的文件繼承父目錄的 default ACL 作為自己的 access ACL。
修改與 ugo 權限對應的 access ACL 條目,使其不包含文件創建函數的 mode 參數不包含的權限。
說明:此時 umask 被忽略。

如果一個目錄沒有被設置 default ACL,那么將由文件創建函數的 mode 參數和 umask 共同決定新文件的 ACL 權限:

新建文件的 access ACL 包含 ACL_USER_OBJ, ACL_GROUP_OBJ, 和 ACL_OTHER 條目。這些條目的權限被設置為由 umask 決定的權限。
修改與 ugo 權限對應的 access ACL 條目,使其不包含文件創建函數的 mode 參數不包含的權限。
文件權限檢查的算法(Access Check Algorithm)
當一個進程訪問(讀、寫、執行)一個被 ACL 保護的文件時,文件權限檢查的算法決定了是否授權給進程訪問該文件。
下面我們以 下面我們以偽代碼的方式來解釋文件權限檢查的算法。
第一步:if 進程的 effective user ID 與文件 owner 匹配
if ACL 的 ACL_USER_OBJ 條目包含了請求所需的權限,此時就被授權訪問文件
else 訪問被拒絕
第二步:else if 進程的 effective user ID 匹配文件 ACL 權限中任何一個 ACL_USER 條目中的 user
if 匹配的 ACL_USER 條目和 ACL_MASK 條目包含了請求所需的權限,此時就被授權訪問文件
else 訪問被拒絕
第三步:else if 進程的 effective group ID 或者任何一個補充的(supplementary) group ID 匹配文件的 group 或 ACL 權限中任何一個 ACL_GROUP 條目的 group
if ACL 權限包含 ACL_MASK 條目
if ACL_MASK 條目和匹配的任何 ACL_GROUP_OBJ 或 ACL_GROUP 條目包含了請求所需的權限,此時就被授權訪問文件
(注釋:ACL_MASK 與其它項是 and 的關系,用來控制最大權限)
else 訪問被拒絕
else (注意:沒有 ACL_MASK 條目,就沒有 ACL_GROUP 條目)
if ACL_GROUP_OBJ 條目包含了請求所需的權限,此時就被授權訪問文件
else 訪問被拒絕
第四步:else if ACL_OTHER 條目包含了請求所需的權限,此時就被授權訪問文件
第五步:else 訪問被拒絕

ACL 的文本描述格式
有兩種格式來描述 ACL 條目,分別是長格式和短格式。它們非常類似,都是通過兩個冒號把一個 ACL 條目分為三個部分:
ACL 條目的類型:ACL 條目 qualifier:權限信息

我們在前面已經介紹過 ACL 條目的類型,權限信息就是用 rwx 來表示的信息,不支持某個權限的話可以使用 – 表示。這里介紹一下 ACL 條目 qualifier(不知道該咋翻譯這貨)。

當 ACL 條目的類型為 ACL_USER 或 ACL_GROUP 時,ACL 條目 qualifier 包含與 ACL 條目關聯的用戶和組的標識符。
當 ACL 條目的類型為其它時,ACL 條目 qualifier 為空。
其中的用戶標識符可以是用戶名也可以是 user ID,組標識符可以是組名也可以是 group ID。

刪除 ACL 權限
有添加就有刪除,我們可以通過 setfacl 命令的 -x 選項來刪除指定用戶或組的 ACL 權限,還可以通過 -b 選項來清除文件和目錄上所有的 ACL 權限。

總結
本文先介紹了 ACL 權限中的基本概念,然后解釋了筆者在使用 ACL 權限過程中碰到的一些疑問。希望這些內容可以幫助大家更好的理解和使用 ACL 權限。

此內容DOC下載 此內容PDF下載

【全文完】
關鍵詞標簽: acl 
0 ([$-頂稿人數-$])
0 ([$-踩稿人數-$])

版權聲明:

1、西安弈聰網站內容中凡注明“來源:XXX(非西安弈聰網站)”的作品,轉載自其它媒體,轉載目的在于傳遞更多信息,其中涉及的網站建設,網站優化,百度關鍵詞優化,西安軟件開發等技術細節并不代表本站贊同支持其觀點,并不對其真實性負責。對于署名“西安弈聰”的作品系本站版權所有,任何人轉載請署名來源,否則西安弈聰將追究其相關法律責任。

2、本站內容中未聲明為“原創”的內容可能源自其它網站,但并不代表本站支持其觀點,對此帶來的法律糾紛及其它責任與我方無關。如果此內容侵犯了您的權益,請聯系我方進行刪除。

打篮球必学规则