傳統 Linux 權限模型 (rwx/rwx/rwx) 僅支援「擁有者/群組/其他」三級,無法針對單一使用者授予特定權限。ACL (Access Control List) 擴充了此模型,允許對檔案/目錄設定任意使用者/群組的精細權限。本文詳細講解 setfacl/getfacl 使用、預設 ACL 繼承、遮罩機制、備份還原與實戰場景。
u:使用者:權限、g:群組:權限、m:遮罩:權限、o:其他:權限。default: 前綴,新建檔案/子目錄自動繼承。acl (ext4 需顯式指定,xfs 預設開啟)。# RHEL/CentOS
yum install acl
# Ubuntu/Debian
apt install acl
# 驗證核心支援
grep ACL /boot/config-$(uname -r)
# CONFIG_EXT4_FS_POSIX_ACL=y 等
| 操作 | 命令 | 範例 |
|---|---|---|
| 查看 ACL | getfacl 檔案/目錄 | getfacl /data/project |
| 設定使用者權限 | setfacl -m u:用戶:權限 檔案 | setfacl -m u:alice:rwx /data/report.pdf |
| 設定群組權限 | setfacl -m g:群組:權限 檔案 | setfacl -m g:developers:rw /data/src/ |
| 設定預設 ACL (目錄) | setfacl -m d:u:用戶:權限 目錄 | setfacl -m d:u:bob:rwx /data/share/ |
| 移除特定 ACL | setfacl -x u:用戶 檔案 | setfacl -x u:alice /data/report.pdf |
| 移除所有 ACL | setfacl -b 檔案 | setfacl -b /data/report.pdf |
| 遞歸套用 | setfacl -R -m ... 目錄 | setfacl -R -m u:alice:rwx /data/project/ |
| 備份 ACL | getfacl -R 目錄 > acl.backup | |
| 還原 ACL | setfacl --restore=acl.backup |
需求:/data/project 目錄,擁有者 devlead,群組 devteam。
- devlead:完整控制
- devteam 群組成員:讀寫執行
- alice (外部顧問):唯讀
- bob (實習生):讀寫,但不可刪除
- 其他人:無權限
# 1. 基礎權限
chown devlead:devteam /data/project
chmod 770 /data/project # rwxrwx---
# 2. 設定 ACL
setfacl -m u:alice:rx /data/project # alice 唯讀
setfacl -m u:bob:rw /data/project # bob 讀寫
# 注意:bob 無 x 權限無法進入目錄,需給目錄 x
setfacl -m u:bob:rwx /data/project # 修正:給 x
# 3. 設定預設 ACL (新建檔案自動繼承)
setfacl -m d:u:alice:rx /data/project
setfacl -m d:u:bob:rw /data/project
setfacl -m d:g:devteam:rw /data/project
# 4. 設定遮罩 (限制最大權限為 rwx)
setfacl -m m::rwx /data/project
# 5. 驗證
getfacl /data/project
# 輸出應包含:
# user:alice:r-x
# user:bob:rwx
# group:devteam:rwx
# mask::rwx
# default:user:alice:r-x
# default:user:bob:rw-
# default:group:devteam:rwx
# 設定 alice:rwx,但 mask:rx
setfacl -m u:alice:rwx /data/project
setfacl -m m::rx /data/project
getfacl /data/project
# 實際權限:alice → r-x (rwx & rx = rx)
| 現象 | 原因 | 解決 |
|---|---|---|
Operation not supported | 檔案系統未啟用 ACL/不支援 | 掛載加 acl 選項,或換 ext4/xfs |
| 權限不生效 | 遮罩限制 / 預設 ACL 未設 / 父目錄無 x | 檢查 getfacl 輸出 mask、default、父目錄 x |
| 遞歸設定未生效到現有檔案 | -R 只影響現有,新建需 default: | 同時設定 -R -m 和 -m d: |
| 備份還原失敗 | 使用者/群組不存在 / 路徑變更 | 先建立使用者/群組,路徑需一致 |
| cp/mv 不保留 ACL | cp -p 保留,mv 同檔案系統保留,跨檔案系統不保留 | 用 rsync -aAX 或 tar --acls |
vfs objects = acl_xattr、map acl inherit = yes,Windows 端可直接編輯 ACL。nfs4_setfacl/nfs4_getfacl。| 方案 | 粒度 | 管理複雜度 | 適用場景 |
|---|---|---|---|
| 傳統 rwx | 3 級 | 低 | 簡單單用戶/小團隊 |
| ACL | 任意用戶/群組 | 中 | 多專案協作、精細權限隔離 |
| sudo + 腳本 | 命令級 | 高 | 特權操作審計、臨時授權 |
善用 ACL 能在不犧牲安全性前提下,實現靈活的多使用者協作權限模型,是 Linux 多使用者環境必備技能。
Ubuntu 14.04 安裝 Wine 運行 Windows 應用程式完整步驟
CentOS pure-ftpd 530 Login authentication failed 完整排查手冊
Linux more 指令完整操作指南:分頁檢視、搜尋、跳轉、編輯器呼出
Linux 升级内核与配置 Video4Linux 驱动实现摄像头视频采集
CentOS 5.5 禁止單用戶模式:GRUB 設定密碼防護提升安全性
將 Gedit 打造為類 TextMate 體驗:外觀、字型、語法高亮、檔案瀏覽完整設定指南
Linux Apache 解決 GBK/GB2312 網頁亂碼:httpd.conf AddDefaultCharset 五種修正方案