Linux 傳統權限模型(User/Group/Others)僅支援單一群組。當需要針對同一檔案給予多個不同群組不同權限時,需使用 ACL (Access Control List) 機制。本文透過實戰示範 setfacl 設定與 getfacl 查看多群組權限。
testacl(擁有者 v0id6:v0id6)$ ls -la testacl
-rw-rw-r--+ 1 v0id6 v0id6 9 Mar 2 14:21 testacl # 尾端 '+' 表示有 ACL 擴充屬性
$ getfacl testacl
# file: testacl
# owner: v0id6
# group: v0id6
user::rw-
group::r--
other::r--
$ setfacl -m g:v0id6:rw,g:yygydjtest:rw testacl
$ getfacl testacl
# file: testacl
# owner: v0id6
# group: v0id6
user::rw-
group::r--
group:v0id6:rw-
group:yygydjtest:rw-
mask::rw-
other::r--
關鍵點:
-m:修改 ACL 規則g:群組名:權限:指定群組權限格式mask:自動生成,限制群組與命名使用者的最大有效權限$ setfacl -x g:yygydjtest testacl
$ getfacl testacl
# file: testacl
# owner: v0id6
# group: v0id6
user::rw-
group::r--
group:v0id6:rw-
mask::rw-
other::r--
-x 參數可精確刪除指定的 ACL 條目。
cat /etc/group
groupadd newgroup
# 設定目錄及其未來新建檔案繼承 ACL
setfacl -R -m g:team:rw /project/shared
setfacl -R -d -m g:team:rw /project/shared
# 備份
getfacl -R /project > acl_backup.txt
# 還原
setfacl --restore=acl_backup.txt
/etc/fstab 掛載選項是否包含 acl。mask 值未限制過低(mask::r-- 會導致 rw- 實際只能讀取)。cp/mv 行為:cp -p 保留 ACL,mv 同檔案系統內移動保留 ACL,跨檔案系統視為複製+刪除。