2021-05-12 14:32:11
Linux中ACL檔案存取控制列表
在 Linux下,對一個檔案(或者資源)可以進行操作的物件被分為三類: file owner(檔案的擁有者),group(組,可以不是檔案擁有者所在的組), other (其他)而對於每一類別又分別定義了讀、寫、執行(read, write and execute )許可權以及特殊許可權。但是這些許可權只能搭配使用而已,如果想要對其其他使用者組或者其他使用者裡的某一位使用者設定一些不同的許可權,就不行了。
LINUX上的ACL存取控制列表,主要的目的是在提供傳統的owner,group,others的read,write,execute許可權之外的區域性許可權設定。ACL可以針對單個使用者,單個檔案或目錄來進行r,w,x的許可權設定,特別適用於需要特殊許可權的使用情況。簡單地來說,ACL就是可以設定特定使用者或使用者組對於一個檔案/目錄的操作許可權,可以實現靈活的許可權管理,除了檔案的所有者,所屬組和其它人,可以對更多的使用者設定許可權。簡單地來說ACL就是可以設定特定使用者或者使用者組對於一個檔案/資料夾的操作許可權。
由於ACL是傳統的類unix作業系統許可權的額外支援專案,因此需要使用ACL必須要有檔案系統的支援才行。目前大多數的檔案系統都支援ACL。(ACL存取控制列表需要核心支援,在Linux核心2.6以後預設加入了ACL功能)
ACL管理命令: getfacl, setfacl, chacl
acl是一個可以被acl_from_text程式分析出各使用者許可權的字串。該字串用逗號分隔成多個片段
每個片段的形式都如:tag:name:perm
tag可以是下面形式的一種:
"user" (or "u")表示這是一個使用者的ACL條目。
"group" (or "g")表示這是一個使用者組的ACL條目。
"other" (or "o")表示這是其它的ACL條目。即沒有在ACL指定的使用者和組的ACL條目。
"mask" (or "m")表示這是一個掩碼的ACL條目。在指定其它非使用者屬主的ACL許可權時,這個掩碼條目必須被指定,否則執行chacl命令會出錯。
name可以是使用者名稱或組名。如果不指定,那麼預設是給檔案或目錄的屬主或使用者組指定acl許可權。當然name也可以是使用者的uid或者組的gid。
perm是指該使用者或組所具有的許可權,它是由"rwx"組成的一個字串,什麼意思當然大家都明白了。如果要使該使用者或組不具有某種許可權,簡單的以"-"代替指定的字母就可以了。例如"r-x"是只具有讀,執行許可權。
getfacl
使用getfacl可以獲取檔案存取控制列表
使用方法: getfacl [-aceEsRLPtpndvh] 檔案 ...
-a, --access 僅顯示檔案存取控制列表
-d, --default 僅顯示預設的存取控制列表
-c, --omit-header 不顯示註釋表頭
-e, --all-effective 顯示所有的有效許可權
-E, --no-effective 顯示無效許可權
-s, --skip-base 跳過只有基條目(base entries)的檔案
-R, --recursive 遞回顯示子目錄
-L, --logical 邏輯遍歷(跟隨符號連結)
-P, --physical 物理遍歷(不跟隨符號連結)
-t, --tabular 使用製表符分隔的輸出格式
-n, --numeric 顯示數位的使用者/組標識
-p, --absolute-names 不去除路徑前的 '/' 符號
-v, --version 顯示版本並退出
-h, --help 顯示本幫助資訊
獲取檔案ACL存取控制列表:
getfacl test.txt
# file: test.txt
# owner: root
# group: family
user::rw-
group::rw-
mask::rw-
other::---
前三行以#開頭的定義了檔名,檔案所有者和檔案擁有組. 這些資訊沒有太大的作用,可以用 --omit-header來省略掉
user::rw- 定義了ACL_USER_OBJ, 說明file owner擁有讀和寫的許可權
group::rw- 定義了ACL_GROUP_OBJ,說明檔案的group擁有read和write 許可權
mask::rw- 定義了ACL_MASK的許可權為read and write
other::--- 定義了ACL_OTHER的沒有任何許可權操作此檔案
ACL由一系列的存取控制許可權組成,主要的有如下:
ACL_USER_OBJ: 相當於Linux裡file_owner的許可權
ACL_USER: 定義了額外的使用者可以對此檔案擁有的許可權
ACL_GROUP_OBJ: 相當於Linux裡group的許可權
ACL_GROUP: 定義了額外的組可以對此檔案擁有的許可權
ACL_MASK: 定義了ACL_USER, ACL_GROUP_OBJ和ACL_GROUP的最大許可權
ACL_OTHER: 相當於Linux裡other的許可權
setfacl
使用setfacl設定檔案存取控制列表
用法: setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
-m, --modify=acl 更改檔案的存取控制列表
-M, --modify-file=file 從檔案讀取存取控制列表條目更改
-x, --remove=acl 根據檔案中存取控制列表移除條目
-X, --remove-file=file 從檔案讀取存取控制列表條目並刪除
-b, --remove-all 刪除所有擴充套件存取控制列表條目
-k, --remove-default 移除預設存取控制列表
--set=acl 設定替換當前的檔案存取控制列表
--set-file=file 從檔案中讀取存取控制列表條目設定
--mask 重新計算有效許可權掩碼
-n, --no-mask 不重新計算有效許可權掩碼
-d, --default 應用到預設存取控制列表的操作
-R, --recursive 遞回操作子目錄
-L, --logical 依照系統邏輯,跟隨符號連結
-P, --physical 依照自然邏輯,不跟隨符號連結
--restore=file 恢復存取控制列表,和“getfacl -R”作用相反
--test 測試模式,並不真正修改存取控制列表屬性
-v, --version 顯示版本並退出
-h, --help 顯示本幫助資訊
-:如果檔名是-,則setfacl將從標準輸入讀取檔名。
選項-m和-x後邊跟以acl規則。多條acl規則以逗號(,)隔開。選項-M和-X用來從檔案或標準輸入讀取acl規則。
選項--set和--set-file用來設定檔案或目錄的acl規則,先前的設定將被覆蓋。
選項-m(--modify)和-M(--modify-file)選項修改檔案或目錄的acl規則。
選項-x(--remove)和-X(--remove-file)選項刪除acl規則。
設定ACL存取控制列表:
setfacl -m u:zyq:rwx test.sh
user 對應ACL_USER_OBJ和ACL_USER簡寫為u
group 對應ACL_GROUP_OBJ和ACL_GROUP簡寫為g
mask 對應ACL_MASK
other 對應ACL_OTHER簡寫為o
第二個欄位稱之為qualifier.也就是上面例子中的zyq和jackuser組.它定義了特定使用者和使用者組
對於檔案的許可權.這裡我們也可以發現只有user和group才有qualifier,其他的都為空
第三個欄位就是我們熟悉的許可權了. 它和Linux的許可權一樣定義,這裡就不多講了
當設定過ACL存取控制許可權就會在在檔案許可權的最後多了一個+號。
chacl
chacl是用來更改檔案或目錄的存取控制列表的命令。
chacl命令的格式是: chacl acl filename1 filename2
chacl就是一個改變檔案存取控制列表的一個命令。
-b 表明這裡有兩個acl需要修改,前一個acl是檔案的acl,後一個是目錄的預設acl。
-d 設定目錄的預設acl,這個選項是比較有用的。如果指定了目錄的預設acl,在這個目錄下新建的檔案或目錄都會繼承目錄的acl。
-R 只刪除檔案的acl
-D 只刪除目錄的預設acl,是-d的反向操作。
-B 刪除檔案和目錄預設的acl。是-b的反向操作。
-r 遞回地修改檔案和目錄的acl許可權。
-l 列出檔案和目錄的acl許可權。
使用過ACL之後即使用了setfacl -x刪除了所有檔案的ACL屬性,那個+號還是會出現在檔案的末尾.如果不想讓他顯示則可以使用chacl -B
用cp來複製檔案的時候我們現在可以加上-p選項.這樣在拷貝檔案的時候也將拷貝檔案的ACL屬性.對於不能拷貝的ACL屬性將給出警告
mv命令將會預設地移動檔案的ACL屬性. 同樣如果操作不允許的情況下會給出警告
MASK和effective
ACL_MASK是掌握ACL的另一個關鍵。ACL_MASK規定了ACL_USER, ACL_GROUP_OBJ和ACL_GROUP的最大許可權.當我們設定一個檔案的ACL_USER或者ACL_GROUP時,ACL_MASK同時也會被定義,一但檔案設定ACL之後檔案的使用者組許可權位就會被替換成ACL_Mask值。
Default ACL
Default ACL是指對於一個目錄進行Default ACL設定,並且在此目錄下建立的檔案都將繼承此目錄的ACL,ACL定義了default選項, 當某一個使用者擁有了default的read, write, excute/search 許可權.但是卻無法刪除和建立檔案。如果需要執行許可權需要把目錄的ACL_USER修改為那個使用者後才能在那個目錄中刪除和建立檔案。
相關文章