傳統 Linux 權限模型(Owner/Group/Others)僅支持三組 rwx,無法滿足「單個用戶/組對特定文件/目錄擁有獨立權限」的業務場景。ACL (Access Control List) 正是為此而生,提供條目級的精細授權能力。
核心概念
- User ACL:針對具體用戶設置權限
- Group ACL:針對具體組設置權限
- Mask:有效權限上限,限制除 Owner 外所有 ACL 條目實際生效的最大權限
- Default ACL:目錄專屬,新建文件/子目錄自動繼承的 ACL 模板
核心命令
| 命令 | 用途 |
getfacl 文件/目錄 | 查看完整 ACL 信息 |
setfacl -m u:用戶:權限 文件 | 設置用戶 ACL |
setfacl -m g:組:權限 文件 | 設置組 ACL |
setfacl -m m::權限 文件 | 設置 Mask |
setfacl -m d:u:用戶:權限 目錄 | 設置默認 ACL(遞歸繼承) |
setfacl -x u:用戶 文件 | 刪除指定 ACL 條目 |
setfacl -b 文件 | 清除所有 ACL |
實戰場景演示
場景 1:開發組用戶 alice 需讀寫項目目錄,運維組用戶 bob 僅讀
# 項目目錄基礎權限
drwxr-x--- root devgrp project/
# 設置 ACL
setfacl -m u:alice:rwX project/
setfacl -m u:bob:rX project/
setfacl -m m::rwX project/ # 確保 Mask 不限制上述權限
# 驗證
getfacl project/
# file: project
# owner: root
# group: devgrp
user::rwx
user:alice:rwx
user:bob:r-x
group::r-x
mask::rwx
other::---
場景 2:新建文件自動繼承 ACL(默認 ACL)
setfacl -m d:u:alice:rwX project/
setfacl -m d:g:devgrp:rwX project/
setfacl -m d:m::rwX project/
# 驗證默認規則
getfacl project/ | grep default
default:user::rwx
default:user:alice:rwx
default:group::r-x
default:group:devgrp:rwx
default:mask::rwx
default:other::---
此後在 project/ 下創建的任何文件/目錄,自動帶上上述 default ACL。
場景 3:備份與恢復 ACL
# 導出
getfacl -R project/ > project.acl.bak
# 恢復(覆蓋現有 ACL)
setfacl --restore=project.acl.bak
注意事項
- 文件系統需掛載
acl 選項(ext4/xfs/btrfs 默認支持,/etc/fstab 可顯式聲明)。
cp -p/mv 保留 ACL;tar/rsync -A 需顯式參數攜帶 ACL。
- Mask 是「天花板」:若
mask::r-x,則即使設置 u:alice:rwx 實際也只有 r-x。
ls -l 顯示權限位後帶 + 符號表示存在 ACL(如 drwxrwxr-x+)。
圖解參考

總結
ACL 是多用戶協作、多部門隔離、合規審計場景的標配工具。掌握 getfacl/setfacl 組合拳,配合 Default ACL 實現「一次配置、自動繼承」,徹底解決傳統權限模型的表達能力不足問題。