概述
ACL 提供了比傳統 Unix 權限模型(所有者、組、其他)更靈活的權限管理。您可以為特定用戶或組明確指定對文件或目錄的訪問權限。這對於滿足多用戶共享環境中複雜的權限要求非常有用。
主要特點
- 精細的權限控制
- 為特定用戶/組授予權限
- 與默認權限 (umask) 一起工作
- 可以為目錄設置默認 ACL
安裝
`acl` 功能本身已內置於 Linux 內核中,但要使用 `getfacl` 和 `setfacl` 命令,需要安裝 `acl` 軟件包。大多數 Linux 發行版可能默認未安裝。
Debian/Ubuntu
sudo apt update && sudo apt install acl
在 Debian 或 Ubuntu 基礎系統上安裝 `acl` 軟件包的命令。
CentOS/RHEL/Fedora
sudo yum install acl
在 CentOS、RHEL 或 Fedora 基礎系統上安裝 `acl` 軟件包的命令。
使用範例
ACL 主要通過 `getfacl`(查詢 ACL)和 `setfacl`(設置 ACL)命令進行管理。以下是一些常見的使用範例。
查詢文件的 ACL
getfacl my_file.txt
使用 `getfacl` 命令檢查特定文件或目錄的當前 ACL。
為特定用戶授予讀取/寫入權限
setfacl -m u:user1:rw my_file.txt
使用 `setfacl -m` 選項為用戶 'user1' 授予對 'my_file.txt' 的讀取 (r) 和寫入 (w) 權限。
為特定組授予執行權限
setfacl -m g:dev_group:x my_script.sh
使用 `setfacl -m` 選項為組 'dev_group' 授予對 'my_script.sh' 的執行 (x) 權限。
移除 ACL 條目
setfacl -x u:user1 my_file.txt
使用 `setfacl -x` 選項移除用戶 'user1' 的 ACL 條目。
為目錄設置默認 ACL
setfacl -m d:u:user2:rwx my_directory/
為目錄設置默認 ACL,以便新創建的文件或目錄繼承特定的 ACL。使用 `d:` 前綴。
移除所有 ACL
setfacl -b my_file.txt
使用 `setfacl -b` 選項移除文件或目錄的所有擴展 ACL 條目,並恢復為傳統權限。
提示與注意事項
使用 ACL 時,理解其與傳統權限系統的交互非常重要。
ACL 與傳統權限
- 對於已設置 ACL 的文件/目錄,`ls -l` 的輸出在權限字符串末尾會附加一個 `+` 符號。
- ACL 在傳統權限(所有者、組、其他)之上授予額外的權限。`mask` 條目限制了 ACL 的最大有效權限。
- 過於複雜的 ACL 設置可能會使權限管理變得困難,因此應謹慎使用,僅在必要時使用。
理解 mask 條目
設置 ACL 時,`mask` 條目可能會自動創建或更新。此 `mask` 定義了授予用戶 (u:)、組 (g:)、命名用戶 (u:name:)、命名組 (g:name:) 條目的最大有效權限。即使授予的權限超過 `mask`,也會被 `mask` 限制。可以手動設置 `mask`,例如 `setfacl -m m::rw`。
文件系統支持
要使用 ACL,文件系統必須支持 ACL。大多數現代 Linux 文件系統,如 ext2、ext3、ext4、XFS 等,都支持 ACL。您可能需要檢查文件系統掛載時是否啟用了 `acl` 選項(例如,在 `/etc/fstab` 中)。