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 存取控制列表實戰:突破傳統 UGO 權限、精細授權多用戶協作

編輯:關於 Linux

傳統 Linux UGO (User/Group/Other) 權限模型在多人協作、NFS/Samba 共享場景下表達力不足。ACL (Access Control List) 允許**對單一檔案/目錄指定多個用戶/群組的獨立權限**,不改變基本擁有者/群組。本文從啟用 ACL、setfacl/getfacl 操作、預設 ACL 繼承、遮罩機制到備份還原完整實戰。

啟用 ACL 支援

1. 安裝工具


# Ubuntu/Debian
apt-get install acl
# CentOS/RHEL
yum -y install acl
# Arch
pacman -S acl

2. 掛載選項加入 acl


# 檢查目前掛載選項
mount | grep acl
# 若無,編輯 /etc/fstab 加入 acl
UUID=xxxx  /data  ext4  defaults,acl  0  2
# 重新掛載生效
mount -o remount,acl /data

ACL 基礎操作

設定存取 ACL (針對既有檔案/目錄)


# 給用戶 alice 讀寫執行
setfacl -m u:alice:rwx /data/project

# 給群組 dev 讀執行
setfacl -m g:dev:rx /data/project

# 給其他用戶 (非擁有者、非群組成員) 唯讀
setfacl -m o::r /data/project

# 移除特定 ACL
setfacl -x u:alice /data/project
setfacl -x g:dev /data/project

# 清除所有 ACL (保留基本 UGO)
setfacl -b /data/project

查看 ACL


getfacl /data/project
# 輸出範例:
# file: project
# owner: root
# group: root
# user::rwx
# user:alice:rwx
# group::r-x
# group:dev:r-x
# mask::rwx
# other::r--

預設 ACL (Default ACL) - 目錄繼承機制

在目錄設定 default: 規則,**新建檔案/子目錄自動繼承**對應 ACL。


# 目錄 /data/project 設定預設 ACL
setfacl -d -m u:alice:rwx /data/project
setfacl -d -m g:dev:rx /data/project
setfacl -d -m o::- /data/project   # other 無權限

# 驗證
getfacl /data/project
# 顯示 default:user:alice:rwx 等

# 新建檔案測試
touch /data/project/newfile
getfacl /data/project/newfile
# 自動擁有 alice:rwx, dev:rx

遮罩機制

  • mask 定義**除擁有者與 other 外**所有 ACL 項目的**最大權限上限**。
  • 實際權限 = ACL項目權限 & mask。
  • 修改 mask:setfacl -m m::rx /data/project (限制所有額外用戶/群組最高 rx)。
  • getfacl 輸出的 effective 權限已套用 mask。

ACL 備份與還原


# 備份整個目錄樹 ACL
getfacl -R /data > /backup/data.acl

# 還原 (覆蓋現有 ACL)
setfacl --restore=/backup/data.acl

ACL 與傳統權限互動

操作對 ACL 影響
chmod 750 file修改基本 UGO,**不變動**存取 ACL;但可能改變 mask (group class 變化)
chown alice:dev file擁有者/群組變更,**ACL 項目保留** (user:alice 變為擁有者項目)
cp file file2**不複製 ACL** (除非 cp -p --preserve=mode 且檔案系統支援)
mv file dir/**保留 ACL** (同檔案系統移動)
tar/cpio需 --acls 參數保留 ACL

支援 ACL 的檔案系統

  • ext2/3/4、XFS、Btrfs、JFS、ReiserFS、OCFS2、GFS2。
  • NFSv3 需伺服器/客戶端均支援 ACL;NFSv4 原生整合 ACL。
  • Samba (smbd) 透過 vfs objects = acl_xattr 映射 Windows ACL。

實戰場景:專案目錄多團隊協作


# 專案根目錄
mkdir /projects/webapp
setfacl -m u:alice:rwx -m g:frontend:rwx -m g:backend:rx -m o::- /projects/webapp
setfacl -d -m u:alice:rwx -m g:frontend:rwx -m g:backend:rx -m o::- /projects/webapp
setfacl -m m::rwx /projects/webapp

# 前端目錄額外給 designer 寫入
mkdir /projects/webapp/frontend
setfacl -m u:designer:rwx -m d:u:designer:rwx /projects/webapp/frontend

# 後端目錄給 dba 唯讀
mkdir /projects/webapp/backend
setfacl -m u:dba:r-x -m d:u:dba:r-x /projects/webapp/backend

ACL 權限模型示意圖

mount 顯示 acl 掛載選項

/etc/fstab 加入 acl 選項

Copyright © Windows教程網 All Rights Reserved