Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 使用 ACL (setfacl) 精確控制使用者存取權限完整指南

編輯:關於 Linux

傳統 Linux 權限模型 (rwx/rwx/rwx) 僅支援「擁有者/群組/其他」三級,無法針對單一使用者授予特定權限。ACL (Access Control List) 擴充了此模型,允許對檔案/目錄設定任意使用者/群組的精細權限。本文詳細講解 setfacl/getfacl 使用、預設 ACL 繼承、遮罩機制、備份還原與實戰場景。

核心概念

  • ACL 項目類型: u:使用者:權限、g:群組:權限、m:遮罩:權限、o:其他:權限。
  • 遮罩 : 限制除擁有者外所有 ACL 項目與群組擁有者的最大權限。實際權限 = ACL 項目權限 & 遮罩權限。
  • 預設 ACL : 目錄設定 default: 前綴,新建檔案/子目錄自動繼承。
  • 檔案系統支援: ext4/xfs/btrfs 預設支援,掛載選項 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 等

基礎操作命令

操作命令範例
查看 ACLgetfacl 檔案/目錄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/
移除特定 ACLsetfacl -x u:用戶 檔案setfacl -x u:alice /data/report.pdf
移除所有 ACLsetfacl -b 檔案setfacl -b /data/report.pdf
遞歸套用setfacl -R -m ... 目錄setfacl -R -m u:alice:rwx /data/project/
備份 ACLgetfacl -R 目錄 > acl.backup
還原 ACLsetfacl --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 不保留 ACLcp -p 保留,mv 同檔案系統保留,跨檔案系統不保留用 rsync -aAX 或 tar --acls

進階:系統服務整合

  • Samba (smb.conf): vfs objects = acl_xattr、map acl inherit = yes,Windows 端可直接編輯 ACL。
  • NFSv4: 原生支援 ACL,nfs4_setfacl/nfs4_getfacl。
  • Docker 掛載: 宿主機 ACL 透過 bind mount 保留,容器內需支援 ACL 的檔案系統。

ACL vs 傳統權限 vs sudo

方案粒度管理複雜度適用場景
傳統 rwx3 級低簡單單用戶/小團隊
ACL任意用戶/群組中多專案協作、精細權限隔離
sudo + 腳本命令級高特權操作審計、臨時授權

善用 ACL 能在不犧牲安全性前提下,實現靈活的多使用者協作權限模型,是 Linux 多使用者環境必備技能。

Copyright © Windows教程網 All Rights Reserved