使用 ACL 管理權限 setfacl
, getfacl
1. 認識 ACL
想像一下,你是個派對主辦人(或者系統管理員)。你希望客人可以進入特定的房間,而其他房間需要你的許可才能進去。Linux 基本的訪問權限 rwx
允許你只管理三個類別的訪問權限:擁有者 (user)、群組 (group) 和其他人 (others)。但如果你只想讓一個特別的朋友進入某個房間呢?標準權限模型的守門人會對你說:"嘿,這樣不行的。" 這時 ACL 就能派上用場了。
ACL (Access Control Lists
) 用來解決傳統三層權限系統的限制,它可以讓你為特定的使用者和群組設定訪問權限。
ACL 的主要功能:
- 為特定的使用者和群組設定檔案和目錄的個別權限。
- 繼承目錄內新檔案的權限。
- 比傳統的
chmod
方法更靈活的設定方式。
2. 如何知道是否啟用了 ACL?
在開始管理 ACL 之前,我們先來確認一下您的系統是否支持它們。你可以使用這個指令來檢查:
mount | grep acl
如果文件系統掛載時使用了 acl
選項,那你就準備好了!否則,你需要重新掛載分區並添加 acl
:
sudo mount -o remount,acl /your/mount/point
好啦,現在你已經裝備齊全。是時候開始實踐了。
3. 操作 ACL 的基本指令
指令 | 說明 |
---|---|
getfacl |
獲取檔案或目錄的當前 ACL 列表。 |
setfacl |
為檔案或目錄設定或修改 ACL。 |
setfacl -m |
修改(modify)當前的存取權限。 |
setfacl -x |
刪除(remove)指定的存取權限。 |
setfacl -b |
刪除檔案或目錄的所有 ACL 記錄。 |
setfacl -d |
設定目錄的預設權限,會被其內的檔案繼承。 |
現在讓我們用範例來解釋這些指令的用法吧!
取得當前 ACL getfacl
假設我們有一個檔案 example.txt
。我們想要查看目前這個檔案的 ACL 權限,可以用以下指令:
getfacl example.txt
大致的輸出如下:
# 檔案: example.txt
# 擁有者: user1
# 群組: group1
user::rw-
group::r--
other::---
這個列表顯示了基本權限:擁有者 user1
可以讀取和寫入,群組 group1
只能讀取,而其他用戶完全無法訪問。
設定個別用戶的存取權限 (setfacl
)
現在假設我們希望給用戶 user2
賦予寫入 example.txt
的權限,可以使用以下指令:
sudo setfacl -m u:user2:rw example.txt
這條指令的意思是:
-m
: 修改權限。u:user2:rw
: 為用戶user2
增加或修改權限(讀寫)。
檢查結果:
getfacl example.txt
現在輸出如下:
# 檔案: example.txt
# 擁有者: user1
# 群組: group1
user::rw-
user:user2:rw # 額外的規則!
group::r--
other::---
刪除個別用戶的存取權限 setfacl -x
如果你決定不再需要用戶 user2
擁有寫入權限,可以刪除該權限:
sudo setfacl -x u:user2 example.txt
檢查一下:
getfacl example.txt
對 user2
的額外規則已經消失了!
設定群組的權限
ACL 不僅可以為單一用戶設置權限,還可以為整個群組設置。例如,要授予群組 devteam
讀寫訪問權限,可以執行:
sudo setfacl -m g:devteam:rw example.txt
設定預設權限 setfacl -d
有時我們需要為特定目錄內的所有新檔案和目錄自動設置權限。例如,我們希望目錄 project_dir
中的所有檔案都有用戶 developer
的寫入權限,可以這樣操作:
sudo setfacl -d -m u:developer:rw project_dir
檢查權限:
getfacl project_dir
現在,project_dir
中的所有新檔案和子目錄都會自動應用這條預設規則。
刪除所有 ACL setfacl -b
如果你想完全清除檔案的所有 ACL,可以執行:
sudo setfacl -b example.txt
現在,檔案將恢復到標準的權限模型 user:group:others
。
4. ACL 的實際應用
場景:項目中的協作
假設你有一個項目,存放在目錄 /project
中。有三個人參與工作:
Alice
應該擁有完全的訪問權限(讀取、寫入、執行)。Bob
只能讀取文件。Eve
不應該看到該目錄。
使用 ACL 來設置這些權限:
給予
Alice
完全訪問權限:sudo setfacl -m u:alice:rwx /project
給予
Bob
只讀訪問權限:sudo setfacl -m u:bob:r-- /project
對於
Eve
,什麼都不用做 — 她默認將無訪問權限。
查看當前的 ACL 列表:
getfacl /project
輸出:
# file: /project
# owner: root
# group: root
user::rwx
user:alice:rwx
user:bob:r--
group::---
other::---
現在 Alice
可以無限制地工作,Bob
只能查看文件,而 Eve
則被排除在外。
5. 潛在的錯誤及其解決方法
設定了 ACL,但它們不起作用。 可能是該分區未以
acl
選項掛載。使用mount
檢查並根據需要重新掛載。標準權限與 ACL 之間的衝突。 ACL 總是優先於標準權限。例如,即使 "others" 設定為禁止讀取,ACL 也可以允許特定使用者存取。
忘記了繼承的 ACL。 如果你設定了
-d
(default) 權限,請檢查這些規則是否被新文件繼承。
為什麼這很重要?
通過 ACL 管理權限可以靈活地為不同的使用者和群組設定存取權限。這在需要根據角色分配權限的工作伺服器中特別有用。例如,在公司中,ACL 被用於限制僅對那些「在狀況內」的人員開放存取權限——這是安全性的關鍵之一。
另外,你可以參考 ACL 的官方指南,以更深入地瞭解它們的功能。
GO TO FULL VERSION