更詳細的 ACL 權限
使用的環境
系統與使用工具 |
---|
Centos 7.6 |
setfacl 2.2.51 |
一、ACL 權限介紹
ACL 是 Access Control List 的縮寫。
主要功能是提供比傳統的 owner, group, others 的 read, write, execute 權限之外的更細部權限設定。
ACL 可以針對單一使用者、單一檔案或目錄來進行 r, w, x 的權限規範,對於需要特殊權限的使用狀況非常有幫助。
二、查看 Linux Kernel 是否啟動 ACL
$ dmesg | grep -i acl
三、查看 ACL 版本
$ setfacl --version
四、設定 ACL 權限
1、ACL 指令結構
setfacl -m 為設定的主要指令與選項。
而設定的項目則主要有:
針對個人: u:[帳號名稱]:rwx- [資料夾或檔案]
針對群組: g:[群組名稱]:rwx- [資料夾或檔案]
u::r-- 當帳號或群組名稱沒有寫的時候,代表為檔案擁有者的帳號與群組之意
# 參數說明:
# -R:遞迴,若是目錄,此選項會讓目錄下的所有都擁有所設定的 ACL 權限
# -d:預設權限,在此目錄下新建立的所有會自動的擁有此「預設權限」。原本就存在該目錄內的徑物並不會被此預設權限影響,是新建立的才會
2、ACL 指令
(1) 遮罩 mask
透過 mask 來規範最大允許的權限,可以避免不小心手誤開放超大的權限給使用者或群組。
$ setfacl -m m::x /your/file
基本上如果特定使用者有 rx 的權限,但 mask 只有 x 的話,實際上特定使用者可以取得的權限僅有 x 而已。
(2) 列出資料夾或檔案的 ACL 權限資訊
$ getfacl [folder/file]
(3) 針對特定使用者設定 ACL 權限
讓特定特定使用者 fred 對檔案 grouptest 擁有 r 跟 x 的 ACL 權限。
一開始先新增一個 test 檔案,然後查看它的基本權限。
$ touch filetest
$ ll filetest
-rw-r--r-- 1 root root 0 Mar 16 11:24 filetest
接下來使用 ACL 權限設定:
$ setfacl -m u:fred:rx filetest
$ ll test
-rw-r-xr--+ 1 root root 0 Mar 16 11:24 filetest*
查看 filetest 檔案的 ACL 權限
$ getfacl filetest
# file: filetest
# owner: root
# group: root
user::rw- <==預設的擁有者權限
user:fred:r-x <==針對 fred 的權限
group::r-- <==預設的群組權限
mask::r-x <==預設的 mask 權限
other::r--
就可以知道 filetest 檔案對於使用者 fred 有另外給 r 跟 x 的權限。
(4) 針對特定群組設定 ACL 權限
讓特定群組 fredhome 對檔案 grouptest 擁有 w 跟 x 的 ACL 權限。
$ touch grouptest
$ ll grouptest
-rw-r--r-- 1 root root 0 Mar 16 11:35 grouptest
接下來使用 ACL 權限設定:
$ setfacl -m g:fredhome:wx grouptest
$ ll test
-rw-rwxr--+ 1 root root 0 Mar 16 11:35 grouptest*
查看 grouptest 檔案的 ACL 權限
$ getfacl grouptest
# file: grouptest
# owner: root
# group: root
user::rw-
group::r--
group:fredhome:-wx
mask::rwx
other::r--
就可以知道 grouptest 檔案對於群組 fredhome 有另外給 w 跟 x 的權限。
(5) 移除指定 ACL 權限
移除指定的 ACL 權限,可以使用 -x 參數,移除 ACL 權限時不需要指定權限內容。
$ setfacl -x u:fred /your/file
(6) 刪除所有新增的 ACL 權限
但預設的 ACL 規則(owner, group, others)將被保留。
$ setfacl -b /your/file
(7) 刪除預設的 ACL 權限
如果沒有預設規則,將不提示。
$ setfacl -k /your/folder
(8) 繼承 ACL 權限
如果想讓特定資料夾下的新檔案都可以自動繼承特定的 ACL 權限設定,
可以在資料夾加上預設的 ACL 權限,
預設 ACL 權限的表示法就是在一般 ACL 權限之前加上 d: 或 default:。
要注意此參數 d 只對資料夾有效。
# 讓指定的資料夾有給使用者 fred 擁有 r 跟 x 權限的預設 ACL 權限
$ setfacl -m d:u:fred:rx /your/folder