
# 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` 睇清楚權限先,再對症下藥。搞掂!



