首頁 > 套件與系統管理 > acl

ACL:訪問控制列表管理

ACL(訪問控制列表)是 Linux 系統的一項功能,允許為文件和目錄設置精細的權限。除了傳統的用戶、組和其他權限外,還可以為特定用戶或組授予或撤銷單獨的讀取、寫入和執行權限。`acl` 本身不是一個命令,它主要通過 `getfacl` 和 `setfacl` 命令進行管理。

概述

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` 中)。


相同類別命令