Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux ACL 權限控制詳解:突破傳統 UGO 模型的精細授權

編輯:Linux 系統常見問題解答

什麼是 ACL?

ACL (Access Control List) 突破傳統「擁有者/群組/其他」三元權限模型,允許對單一檔案/目錄針對特定用戶或群組設定獨立的 r/w/x 權限。

核心命令

命令用途
getfacl查看檔案/目錄的 ACL 設定
setfacl設定/修改/刪除 ACL 項目

實戰範例

建立測試檔案

touch acl_test
ll acl_test
# -rw-rw-r--. 1 jimistephen jimistephen 0 Mar 10 08:21 acl_test

為特定用戶 jimi 授予 rx 權限

setfacl -m u:jimi:rx acl_test
ll acl_test
# -rw-rwxr--+ 1 jimistephen jimistephen 0 Mar 10 08:21 acl_test
# 注意:權限位後出現 '+' 表示存在 ACL 擴展屬性

修改檔案擁有者權限為 rwx

setfacl -m u::rwx acl_test
ll acl_test
# -rwxrwxr--+ 1 jimistephen jimistephen 0 Mar 10 08:21 acl_test

查看完整 ACL 資訊

getfacl acl_test
# file: acl_test
# owner: jimistephen
# group: jimistephen
user::rwx          # 擁有者權限
user:jimi:r-x      # 特定用戶 jimi 的權限
group::rw-         # 擁有群組權限
mask::rwx          # 有效權限遮罩(限制群組與特定用戶的最大權限)
other::r--         # 其他用戶權限

關鍵概念:Mask(遮罩)

mask 定義「群組」與「特定用戶/群組」權限的上限。實際生效權限 = 設定權限 & mask。修改 mask 會影響所有受 ACL 控制的實體:

setfacl -m m::rx acl_test  # 將 mask 設為 rx,jimi 實際權限變為 r-x (原 rwx & rx = rx)

目錄預設 ACL:遞歸繼承

為目錄設定 Default ACL,新建檔案/子目錄自動繼承:

# 僅影響當前目錄
setfacl -m u:myuser1:rx /srv/projecta

# 遞歸繼承:所有新建檔案/子目錄自動獲得此權限
setfacl -m d:u:myuser1:rx /srv/projecta

查看預設 ACL:

getfacl /srv/projecta
# default:user:myuser1:r-x  ← 以 default: 前綴標識

移除 ACL

# 移除特定用戶 ACL
setfacl -x u:jimi acl_test

# 移除所有 ACL(保留基本 UGO 權限)
setfacl -b acl_test

# 移除預設 ACL
setfacl -x d:u:myuser1 /srv/projecta

檔案系統支援與啟用

現代檔案系統(ext4、xfs、btrfs)預設支援 ACL。若掛載選項無 acl,需重新掛載:

mount -o remount,acl /mount/point
# 或永久生效:/etc/fstab 加入 acl 選項
UUID=xxxx  /mount/point  ext4  defaults,acl  0  0

應用場景

  • Web 伺服器:www-data 需讀取特定目錄,但不屬於該目錄群組
  • 共享專案目錄:多用戶協作,每人不同權限,避免 777
  • 備份腳本:專用備份用戶唯讀存取敏感目錄
  • 容器掛載卷:精細控制容器內進程對宿主機目錄的存取
Copyright © Windows教程網 All Rights Reserved