Linux 檔案權限入門
什麼是檔案權限?
在 Linux 中,每個檔案和目錄都有一組存取控制規則,決定「誰可以做什麼」。這套設計讓多使用者環境下的安全性成為可能——即使多人共用同一台伺服器,每個人的檔案也能受到保護。
讀懂 ls -l 的輸出
執行 ls -l 後,最左邊那一串字元就是權限資訊:
$ ls -l report.txt
-rw-r--r-- 1 alice developers 4096 May 20 09:00 report.txt
這串 -rw-r--r-- 分解如下:
| 位置 | 字元 | 意義 |
|---|---|---|
| 第 1 位 | - | 類型:-=普通檔案,d=目錄,l=符號連結 |
| 第 2-4 位 | rw- | 擁有者(alice)的權限:可讀(r)、可寫(w)、不可執行(-) |
| 第 5-7 位 | r-- | 群組(developers)的權限:只可讀 |
| 第 8-10 位 | r-- | 其他人的權限:只可讀 |
r、w、x 各代表什麼?
| 符號 | 名稱 | 對檔案的意義 | 對目錄的意義 |
|---|---|---|---|
r | Read(讀取) | 可查看/讀取檔案內容 | 可用 ls 列出目錄內容 |
w | Write(寫入) | 可修改/覆寫檔案內容 | 可在目錄內新增/刪除/重新命名 |
x | Execute(執行) | 可將檔案作為程式執行 | 可進入目錄(cd 進去) |
- | 無權限 | 不允許對應操作 | 不允許對應操作 |
目錄的 x 權限很重要:就算你對目錄有 r 權限,如果沒有 x,你也無法進入(cd)或存取其中的檔案。
數字模式(八進位)
除了 rwx 符號,chmod 也接受數字格式。計算方式:r=4、w=2、x=1,三個數字的各位分別代表擁有者、群組、其他人。
| 數字 | 二進位 | 符號表示 | 常見用途 |
|---|---|---|---|
| 7 | 111 | rwx | 擁有者常用(如目錄) |
| 6 | 110 | rw- | 一般檔案的擁有者 |
| 5 | 101 | r-x | 群組可讀可執行 |
| 4 | 100 | r-- | 只讀 |
| 0 | 000 | --- | 完全無權限 |
常見組合範例:
755(rwxr-xr-x):目錄、可執行腳本的標準設定644(rw-r--r--):一般文字檔、設定檔的標準設定600(rw-------):SSH 私鑰等敏感檔案(只有擁有者可讀寫)777(rwxrwxrwx):危險!通常不應使用,所有人都有全部權限
使用 chmod 修改權限
$ chmod 755 script.sh # 數字模式
$ chmod u+x script.sh # 符號模式:給擁有者加執行權
$ chmod -R 755 /var/www/ # -R 遞迴套用到目錄
符號模式的語法:誰(u/g/o/a) 操作(+/-/=) 權限(r/w/x)
使用 chown 變更擁有者
$ sudo chown alice report.txt # 只改擁有者
$ sudo chown alice:developers file.txt # 同時改擁有者與群組
$ sudo chown -R www-data:www-data /var/www/html/ # 遞迴
常見的安全設定情境
| 情境 | 建議設定 | 指令 |
|---|---|---|
| Web 伺服器根目錄 | 755 / www-data | chmod -R 755 /var/www/html && chown -R www-data:www-data /var/www/html |
| 一般設定檔 | 644 | chmod 644 config.yml |
| SSH 私鑰 | 600 | chmod 600 ~/.ssh/id_rsa |
| .ssh 目錄 | 700 | chmod 700 ~/.ssh |
| Shell 腳本 | 755 或 700 | chmod 755 deploy.sh |