Linux 檔案權限管理:chmod、chown 同 ACL 進階設定教學

# Linux 檔案權限管理:chmod、chown 同 ACL 進階設定教學 好多 IT 新手對 Linux 檔案權限嘅理解淨係停留喺 `chmod 777` 嘅階段,但實際上 Linux 嘅權限管理遠比你想像中強大。今日就同大家深入講解 chmod、chown 同 ACL(Access Control List)嘅進階用法,等你可以精準控制每個檔案嘅讀寫權限。 ## 基本權限回顧:rwx 三劍...

Linux 檔案權限管理:chmod、chown 同 ACL 進階設定教學 - 文章重點速覽 infographic

# Linux 檔案權限管理:chmod、chown 同 ACL 進階設定教學

好多 IT 新手對 Linux 檔案權限嘅理解淨係停留喺 `chmod 777` 嘅階段,但實際上 Linux 嘅權限管理遠比你想像中強大。今日就同大家深入講解 chmod、chown 同 ACL(Access Control List)嘅進階用法,等你可以精準控制每個檔案嘅讀寫權限。

## 基本權限回顧:rwx 三劍俠

Linux 檔案權限分三組:Owner(擁有人)、Group(群組)、Others(其他人),每組有三種權限:Read(r)、Write(w)、Execute(x)。

用 `ls -l` 睇下:

$ ls -l /var/log/syslog
-rw-r----- 1 root adm 12345 Jul 16 10:00 /var/log/syslog

第一個字元 `-` 代表普通檔案(`d` 係目錄、`l` 係 symlink)。之後每三個字元一組:`rw-`(Owner root 可讀寫)、`r–`(Group adm 可讀)、`—`(Others 冇權限)。

## chmod 數字模式 vs 符號模式

數字模式大家都熟,`chmod 755 file` 等於 `rwxr-xr-x`。但符號模式其實更靈活:

# 加 execute 權限俾所有人
chmod a+x script.sh

# 移除 group 嘅 write 權限
chmod g-w config.conf

# 只改 owner,set 做 rw
chmod u=rw secret.key

# 遞迴設定目錄同檔案唔同權限
find /var/www -type d -exec chmod 755 {} \;
find /var/www -type f -exec chmod 644 {} \;

## chown 進階:同時改 Owner 同 Group

# 一次過改 owner 同 group
chown www-data:www-data /var/www/html

# 只改 group(用 colon)
chown :developers project/

# 遞迴改,但保留 symbolic link 唔跟入去
chown -hR terry:staff /home/terry/

## ACL:超越傳統 rwx 嘅精細控制

傳統 Linux 權限最大限制係:一個檔案只可以有一個 Owner 同一個 Group。如果你需要俾權限俾**兩個唔同嘅 user**,傳統權限就做唔到。呢個時候就要用 ACL。

首先確認 filesystem 支援 ACL(大部分 modern Linux 預設已啟用):

# 檢查是否已啟用 ACL
tune2fs -l /dev/sda1 | grep "Default mount options"
# 或者
mount | grep acl

### setfacl 基本用法

# 俾 user 'john' 讀寫權限(不影響原有 owner/group)
setfacl -m u:john:rw- project_file.txt

# 俾 group 'auditors' 只讀權限
setfacl -m g:auditors:r-- financial_report.xlsx

# 設定 default ACL(新檔案會自動繼承)
setfacl -m d:u:john:rwx /shared/project/

# 移除特定 ACL entry
setfacl -x u:john project_file.txt

# 清哂所有 ACL
setfacl -b project_file.txt

### 實戰案例:Multi-team 共享目錄

假設有個 project 目錄,需要:
– `dev` group 有完整讀寫執行權限
– `qa` group 只有讀取同執行權限
– 新開嘅檔案自動繼承呢啲設定

# 建立目錄同 group
mkdir /data/project-alpha
groupadd dev
groupadd qa

# 設定 ownership
chown root:dev /data/project-alpha

# 設定 ACL
setfacl -m g:dev:rwx /data/project-alpha
setfacl -m g:qa:r-x /data/project-alpha

# 設定 default ACL(關鍵!新檔案自動繼承)
setfacl -m d:g:dev:rwx /data/project-alpha
setfacl -m d:g:qa:r-x /data/project-alpha

# 檢查結果
getfacl /data/project-alpha

輸出會顯示:

# file: /data/project-alpha
# owner: root
# group: dev
user::rwx
group::rwx
group:qa:r-x
mask::rwx
other::---
default:user::rwx
default:group::rwx
default:group:qa:r-x
default:mask::rwx
default:other::---

有咗 `default:` prefix 嘅 entries,之後喺呢個目錄入面 create 嘅任何新檔案都會自動繼承呢啲 ACL 設定,唔使每次手動 set!

## 常見陷阱同最佳實踐

**陷阱一:mask 限制**
ACL 有個 concept 叫 mask,佢會限制所有 named user/group 嘅最大權限。如果你 set 咗 `setfacl -m u:john:rwx file` 但 mask 係 `r–`,john 實際上只得 read 權限。解決方法:

setfacl -m m::rwx file

**陷阱二:cp 同 mv 對 ACL 嘅影響**
– `mv` 喺同一 filesystem 內會保留 ACL
– `cp` 預設唔會保留 ACL,要用 `cp -p` 或 `cp –preserve=acl`
– Cross-filesystem `mv` 等於 `cp + rm`,會失去 ACL

**最佳實踐:**
1. 盡量用 group 而唔係 individual user ACL — 更易管理
2. 用 default ACL 令新檔案自動繼承權限
3. 定期 audit:`find /data -exec getfacl {} \; | grep -E “^user:|^group:” | sort | uniq -c`
4. 避免 `chmod 777` — 永遠係 security nightmare

## 總結

🔗 參考資料:NVD NIST 漏洞資料庫

Linux 權限管理由基本嘅 chmod/chown 到進階嘅 ACL,俾到你極精細嘅控制能力。記住:權限設定唔係 set 完就算,而係要配合你嘅 security policy 定期 review。下次遇到「要俾多個 user 權限但又唔想改 group」嘅情況,你就知道 ACL 係你嘅最佳答案!