Linux 檔案權限 chmod 實戰教學:一次搞掂讀寫執行
好多新手接觸 Linux 伺服器,第一件撞板嘅嘢通常唔係裝唔到套件,而係「Permission denied」。想改個 config 檔改唔到、想行個 script 行唔到、想入個資料夾入唔到,最後一係亂咁 sudo,一係 chmod 777 一了百了。呢篇就用粵語同你逐層拆解 Linux 檔案權限,等你以後唔使再靠估。
點解要識 chmod?
Linux 係一個多用戶系統,伺服器上面可能同時有 root、你自己、其他服務賬戶(例如 nginx、mysql)一齊讀寫檔案。權限系統嘅目的就係保證每個用戶只可以掂到自己應該掂到嘅嘢。如果一味 chmod 777(所有人都可以讀寫執行),等於將屋企大門同夾萬嘅鎖匙全部擺喺門口,有安全漏洞都係自己惹返嚟。
基本概念:三組權限 × 三種動作
Linux 每個檔案或者資料夾,都會有三組權限,分別對應三類人:
– Owner(擁有者):建立檔案嗰個用戶
– Group(群組):同一個群組嘅用戶
– Others(其他人):其餘所有用戶
而每組權限又分三種動作:
| 符號 | 意思 | 對檔案嘅作用 | 對資料夾嘅作用 |
|---|---|---|---|
| r | Read 讀 | 可以睇內容 | 可以列出入面嘅檔案 |
| w | Write 寫 | 可以修改內容 | 可以新增/刪除檔案 |
| x | eXecute 執行 | 可以當程式執行 | 可以進入(cd)呢個資料夾 |
用 `ls -l` 睇檔案,最前頭嗰串字就係權限,例如:
-rwxr-xr-x 1 terry staff 4096 Nov 3 13:30 deploy.sh
拆開嚟睇:
– 第一個字 `-`:代表普通檔案(`d` 係資料夾,`l` 係 symbolic link)
– `rwx`:Owner 有讀、寫、執行
– `r-x`:Group 有讀、執行,冇寫
– `r-x`:Others 有讀、執行,冇寫
chmod 兩種寫法:數字同符號
方法一:數字模式(Octal)
將 r、w、x 當成二進制位元,r=4、w=2、x=1,加埋就係一個數字:
chmod 755 deploy.sh # owner=rwx(7), group=r-x(5), others=r-x(5)
chmod 644 config.txt # owner=rw-(6), group=r--(4), others=r--(4)
chmod 600 id_rsa # 私鑰:只有 owner 可以讀寫,最安全
常用組合記住呢幾個就夠用:
– 755:script 或資料夾,人人可讀可執行,但得 owner 可以改
– 644:一般 config 檔,人人可讀,得 owner 可以寫
– 600:敏感檔案(私鑰、密碼檔),只有 owner 掂得
– 700:私人 script 或資料夾,只有 owner 用得到
方法二:符號模式(Symbolic)
用 `u`(user/owner)、`g`(group)、`o`(others)、`a`(all)配合 `+`、`-`、`=` 去加減權限:
chmod u+x deploy.sh # 加返 owner 執行權
chmod g-w config.txt # 移除 group 寫權
chmod o= readme.txt # others 所有權限清空
chmod a+r public.html # 所有人加讀權
遞迴改權限:-R 要小心用
想一次過改成個資料夾連入面所有嘢,用 `-R`:
chmod -R 755 /var/www/html
但係要小心:資料夾需要 `x` 權先可以進入,檔案一般唔需要 `x`。如果成個資料夾統一 755,普通檔案都會變咗可執行,唔係最佳做法。更好嘅做法係分開處理:
# 資料夾全部 755,檔案全部 644
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
進階:chown 改擁有者 + chgrp 改群組
權限啱,但擁有者錯,一樣會撞板。例如 nginx 服務要讀網站檔案,但你用 root 建立咗個檔案:
chown www-data:www-data /var/www/html/index.html # 改擁有者同群組
chown -R terry:staff /home/terry/project # 遞迴改
chgrp developers deploy.sh # 只改群組
實戰:部署一個網站嘅正確權限設定
假設你要部署一個網站,用戶係 `www-data`,目錄係 `/var/www/myapp`。正確做法:
# 1. 建立目錄並設定擁有者
sudo mkdir -p /var/www/myapp
sudo chown www-data:www-data /var/www/myapp
2. 目錄 755,檔案 644
sudo find /var/www/myapp -type d -exec chmod 755 {} \;
sudo find /var/www/myapp -type f -exec chmod 644 {} \;
3. 有需要執行嘅 script 先加 x
sudo chmod u+x /var/www/myapp/deploy.sh
咁樣設定,`www-data` 可以正常運作,而其他用戶(包括透過網頁嘅攻擊者)都唔可以隨意改寫你嘅檔案。
總結
🔗 參考資料:NVD NIST 漏洞資料庫
記住三件事:r 睇、w 改、x 行;owner、group、others 三組人;數字 755/644/600 係你最好嘅朋友。唔好再 chmod 777,揀啱權限先係真正嘅 Linux 基本功。下次再撞 Permission denied,先諗清楚係邊組人缺邊個權,而唔係即刻 sudo 或者 777 搞掂。
#安全 #IT教學 #技術分享 #部署 #Linux




