# Linux 檔案權限完全攻略:chmod、chown、umask 一次搞掂
成日聽人講 Linux 權限好重要,但係 chmod 777 係咩意思?rwx 又係咩嚟?今日就同大家由零開始,拆解 Linux 檔案權限嘅運作原理,等你以後唔使再靠估。
## 咩係 Linux 檔案權限?
Linux 係一個多用戶作業系統,同一部機可以同時有 root、普通用戶、服務帳號一齊行。為咗防止用戶 A 睇到用戶 B 嘅機密檔案,Linux 設計咗一套權限系統,每個檔案同目錄都有三組權限設定。
用 `ls -l` 就可以睇到:
$ ls -l
-rwxr-xr-- 1 terry staff 4096 Jun 29 13:00 script.sh
drwxr-x--- 2 terry staff 4096 Jun 29 12:00 private_folder
第一欄嗰串 `-rwxr-xr–` 就係權限標記,拆開嚟睇:
| 位置 | 意思 |
|——|——|
| 第 1 位 | 檔案類型(`-`=檔案, `d`=目錄, `l`=symlink) |
| 第 2-4 位 | **擁有者 (Owner)** 權限 |
| 第 5-7 位 | **群組 (Group)** 權限 |
| 第 8-10 位 | **其他人 (Others)** 權限 |
## rwx 三種權限詳解
每個位置有三種可能:
– **r (read)** = 讀取權限,數值 = 4
– **w (write)** = 寫入權限,數值 = 2
– **x (execute)** = 執行權限,數值 = 1
– **- (none)** = 冇權限,數值 = 0
所以 `rwx` = 4+2+1 = **7**,`rw-` = 4+2 = **6**,`r–` = 4,`–x` = 1。
呢個就係 chmod 數字模式嘅由來!
## chmod 實戰:數字模式 vs 符號模式
### 數字模式(最常用)
# 擁有者 rwx,群組 r-x,其他人 r--
chmod 754 script.sh
# 全部人 rwx(極度危險!唔好亂用!)
chmod 777 public_share/
# 常見安全設定:擁有者 rw,群組 r,其他人無權限
chmod 640 config.conf
# 私密檔案:只有擁有者可以讀寫
chmod 600 id_rsa
### 符號模式(更精細控制)
# 加執行權限俾所有人
chmod +x script.sh
# 加寫入權限俾群組
chmod g+w report.txt
# 移除其他人嘅讀取權限
chmod o-r secret.txt
# 精確設定:擁有者=rwx,群組=rx
chmod u=rwx,g=rx secret_folder/
## chown:改檔案擁有者
當你需要將檔案交俾另一個用戶或者服務嘅時候:
# 改擁有者
sudo chown www-data uploads/
# 改擁有者 + 群組
sudo chown terry:developers project/
# 遞迴改整個目錄
sudo chown -R www-data:www-data /var/www/html/
## umask:預設權限遮罩
你有冇發現新建立嘅檔案預設權限係 `644`,目錄係 `755`?呢個係 umask 嘅功勞。
# 睇目前 umask
$ umask
0022
# 計算公式:預設權限 - umask = 實際權限
# 檔案預設 666 - 022 = 644 (rw-r--r--)
# 目錄預設 777 - 022 = 755 (rwxr-xr-x)
# 暫時改 umask(更安全,新檔案預設 600)
umask 077
## 特殊權限:SUID、SGID、Sticky Bit
除咗基本 rwx,仲有三個特殊權限:
# SUID (4xxx):執行時以檔案擁有者身份執行
chmod 4755 /usr/bin/passwd
# ls -l 會顯示 -rwsr-xr-x(注意 s 取代咗 x)
# SGID (2xxx):執行時以群組身份執行;目錄下新檔案繼承目錄群組
chmod 2775 shared_project/
# ls -l 會顯示 drwxrwsr-x
# Sticky Bit (1xxx):只有檔案擁有者可以刪除(常用於 /tmp)
chmod 1777 /tmp
# ls -l 會顯示 drwxrwxrwt(注意 t 取代咗 x)
## 實用技巧:快速檢查同修復權限
# 搵出權限太鬆嘅檔案(others 有 write)
find /var/www -perm -o+w -type f
# 搵出冇權限嘅目錄
find /home -type d ! -perm -755
# 批量修復 WordPress 權限
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
# 檢查 SSH key 權限(必須係 600!)
stat -c "%a %n" ~/.ssh/id_rsa
## 常見錯誤同解決方法
**錯誤 1:Permission denied**
# 原因:冇 read 或 execute 權限
# 解決:檢查 ls -l,用 chmod 加返權限
**錯誤 2:Cannot execute binary file**
# 原因:冇 execute 權限
chmod +x ./program
**錯誤 3:SSH 話 “Permissions 0644 are too open”**
# 原因:private key 權限太鬆
chmod 600 ~/.ssh/id_rsa
## 總結
Linux 權限係系統安全嘅第一道防線。記住幾個黃金法則:
1. **最小權限原則**:只俾必要嘅權限,唔好貪方便 chmod 777
2. **SSH key 一定要 600**,唔係 SSH 會拒絕連接
3. **Web 目錄**:檔案 644,目錄 755,upload 目錄要小心設定
4. **定期審計**:用 `find` 檢查異常權限
🔗 參考資料:NVD NIST 漏洞資料庫
掌握咗 chmod、chown、umask 呢三件法寶,你嘅 Linux 伺服器安全就已經上咗一個層次。下次再同大家分享更多 Linux 管理技巧!
#IT教學 #SSH #技術分享 #Linux #安全




