setfacl 設定檔案存取控制清單 (ACL),支援針對特定用戶/群組授權,並可透過預設 ACL 讓新建檔案/目錄自動繼承父目錄權限。本文示範以 root 為 user1 設定 /mnt/share 目錄 ACL、驗證繼承行為、user1 實際操作測試的完整流程。
/mnt/shareuser1 (普通用戶)acl)setfacl -m u:user1:rwx /mnt/share
# -m 修改,u:user1:rwx 給 user1 讀寫執行權限
setfacl -d -m u:user1:rwx /mnt/share
# -d 設定預設 ACL,新建檔案/目錄自動繼承此規則
getfacl /mnt/share
# file: /mnt/share
# owner: root
# group: root
user::rwx
user:user1:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:user1:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
cd /mnt/share
touch roota rootb
mkdir rootdir1 rootdir2
getfacl roota
# user:user1:rwx # 有效權限受 mask 限制為 rw-
# default:user:user1:rwx # 目錄才有 default
getfacl rootdir1
# 目錄完整繼承 default ACL,含 default: 區塊
su - user1
cd /mnt/share
ll
# -rw-rw-r--+ 1 root root 0 ... roota
# drwxrwxr-x+ 2 root root 6 ... rootdir1
# + 表示有 ACL
touch user1a
mkdir user1dir1
getfacl user1a
# owner: user1
# user:user1:rwx (effective:rw-)
rm roota # 成功刪除 root 建立的檔案
rm -r rootdir1 # 成功刪除 root 建立的目錄
ll
# roota、rootdir1 已刪除,user1a、user1dir1 保留

setfacl -m 設定存取 ACL,setfacl -d -m 設定預設 ACL(繼承)。default: 區塊。mask 限制實際生效權限,getfacl 顯示 effective: 權限。ls -l 權限位後的 + 號。chacl 工具,功能類似 setfacl 但語法更簡潔。| 操作 | 指令 |
|---|---|
| 移除特定用戶 ACL | setfacl -x u:user1 /mnt/share |
| 移除所有 ACL | setfacl -b /mnt/share |
| 移除預設 ACL | setfacl -k /mnt/share |
| 遞歸套用 | setfacl -R -m u:user1:rwx /mnt/share |
| 複製 ACL | getfacl source | setfacl --set-file=- target |