Linux 權限管理終極教學:chmod、chown 一次搞掂

# Linux 權限管理終極教學:chmod、chown 一次搞掂 做 IT 嘅你一定遇過呢個情況:明明個 script 寫好晒,一 run 就出 `Permission denied`。又或者同事問你「點解我改唔到個 file?」—— 十次有九次都係**Linux 權限管理**出咗問題。 今日就同大家由零開始,徹底搞明白 Linux 嘅權限系統。唔使驚,其實好簡單! --- ## 咩係 Linu...

Linux 權限管理終極教學:chmod、chown 一次搞掂 - 文章重點速覽 infographic





# Linux 權限管理終極教學:chmod、chown 一次搞掂

做 IT 嘅你一定遇過呢個情況:明明個 script 寫好晒,一 run 就出 `Permission denied`。又或者同事問你「點解我改唔到個 file?」—— 十次有九次都係**Linux 權限管理**出咗問題。

今日就同大家由零開始,徹底搞明白 Linux 嘅權限系統。唔使驚,其實好簡單!

## 咩係 Linux 權限管理?

Linux 係一個多用戶系統,每個 file 同 directory 都有三層權限設定:**擁有者(Owner)**、**群組(Group)**、**其他人(Others)**。每一層又分三種操作權限:**讀取(Read)**、**寫入(Write)**、**執行(Execute)**。

你可以用 `ls -l` 睇到:

$ ls -l
-rwxr-xr--  1 terry  devops  2048 Jul 24 10:30 deploy.sh
drwxr-x---  2 terry  devops  4096 Jul 24 09:15 configs/

第一個字 `-` 代表 file,`d` 代表 directory。後面九個字分三組:
– `rwx` → Owner 有讀寫執行權限
– `r-x` → Group 有讀取同執行權限(冇寫入)
– `r–` → Others 只得讀取權限

## chmod:修改檔案權限

`chmod` 係最常用嘅**Linux 權限管理**工具。有兩種寫法:

### 數字模式(Octal Mode)

| 權限 | 數值 |
|——|——|
| r (read) | 4 |
| w (write) | 2 |
| x (execute) | 1 |

加埋就係你想要嘅權限組合:

# Owner 全權、Group 讀+執行、Others 冇權限
chmod 750 deploy.sh

# 全部人可讀可執行(常用於 public script)
chmod 755 backup.sh

# 只有 Owner 可以讀寫(敏感 config file)
chmod 600 .env

### 符號模式(Symbolic Mode)

# 加執行權限俾所有人
chmod +x script.sh

# 移除 Group 同 Others 嘅寫入權限
chmod go-w config.ini

# 加讀取權限俾 Group
chmod g+r report.csv

## chown:修改檔案擁有者

當你需要將 file 轉移俾另一個用戶或者群組,就用 `chown`:

# 改擁有者
sudo chown terry deploy.sh

# 改擁有者 + 群組
sudo chown terry:devops deploy.sh

# 只改群組
sudo chown :devops configs/

# 遞迴修改整個 directory
sudo chown -R www-data:www-data /var/www/html/

## umask:預設權限遮罩

`umask` 決定咗你新建 file/directory 嘅預設權限。預設 directory 係 777,file 係 666,然後減去 umask 值:

# 睇目前 umask
$ umask
0022

# 新 file 預設 = 666 - 022 = 644 (rw-r--r--)
# 新 directory 預設 = 777 - 022 = 755 (rwxr-xr-x)

# 設定更嚴格嘅 umask
umask 0077  # 新 file 只有 owner 睇到

## 實戰場景:Web Server 權限設定

假設你有一個 Nginx web server,`/var/www/html/` 嘅**Linux 權限管理**應該點 set?

# 1. 將所有 web file 擁有者改為 www-data
sudo chown -R www-data:www-data /var/www/html/

# 2. Directory 設 755(owner 全權,其他人可讀+進入)
sudo find /var/www/html/ -type d -exec chmod 755 {} \;

# 3. File 設 644(owner 可寫,其他人只讀)
sudo find /var/www/html/ -type f -exec chmod 644 {} \;

# 4. 敏感 config 設 600
sudo chmod 600 /var/www/html/wp-config.php

## 常見錯誤同解決方法

**❌ `Permission denied` 執行 script**

# 解決:加執行權限
chmod +x script.sh

**❌ `Permission denied` 寫入 file**

# 解決:檢查擁有者
ls -l filename
sudo chown $USER:$USER filename

**❌ SSH key 權限太鬆**

# 解決:SSH 要求 private key 必須係 600
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

## 總結

掌握咗 `chmod`、`chown`、`umask` 呢三個指令,基本上 90% 嘅**Linux 權限管理**問題都解決到。記住一個口訣:

> **chmod 改權限,chown 改主人,umask 定預設。**

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

下次遇到 `Permission denied`,唔使 panic,用 `ls -l` 睇清楚權限先,再對症下藥。搞掂!