Linux 檔案權限概念詳解 (rwx, owner, group)
在 Linux 系統中,每一個檔案和目錄都有嚴格的「權限設定」。 這決定了 誰 可以對這個檔案做 什麼(讀、寫、執行)。 這也是為什麼 Linux 比 Windows 相對不容易中毒或被亂改設定的原因之一。
權限的三種身份
Linux 將使用者分成三種身份:
- 擁有者 (Owner / User):檔案的建立者,通常擁有最高權限。代號為
u。 - 群組 (Group):與擁有者屬於同一個群組的使用者。代號為
g。 - 其他人 (Others):既不是擁有者,也不在同一個群組的其他所有人。代號為
o。
檢視權限 (ls -l)
使用 ls -l 可以看到權限設定:
-rwxr-xr-- 1 miko staff 898 Dec 12 10:00 script.sh
最前面的 9 個字元(不含第一個代表檔案類型的 - 或 d)就是權限。
它們三個一組,分別代表 User、Group、Others 的權限。
rwxr-xr-- 可以拆解為:
- Ownre (u):
rwx(可讀、可寫、可執行) - Group (g):
r-x(可讀、可執行、不可寫) - Others (o):
r--(只讀、不可寫、不可執行)
權限的三種動作 (rwx)
| 權限 | 代號 | 對檔案的意義 | 對目錄的意義 | 數字值 |
|---|---|---|---|---|
| Read | r | 可以查看檔案內容 | 可以列出目錄內的檔案 (ls) | 4 |
| Write | w | 可以修改、刪除檔案內容 | 可以新增、刪除、搬移目錄內的檔案 | 2 |
| Execute | x | 可以執行該檔案 (如 Script) | 可以進入該目錄 (cd) | 1 |
| No Permission | - | 無權限 | 無權限 | 0 |
權限的數字表示法 (Octal)
除了用 rwx 表示,我們更常使用「數字加總」來表示權限。
例如 rwx = 4 + 2 + 1 = 7
例如 r-x = 4 + 0 + 1 = 5
例如 r-- = 4 + 0 + 0 = 4
所以常見的權限組合:
- 777 (
rwxrwxrwx):所有人都有所有權限(最危險,測試用)。 - 755 (
rwxr-xr-x):擁有者可讀寫執行,其他人只能讀和執行(常用於 Script 或執行檔)。 - 644 (
rw-r--r--):擁有者可讀寫,其他人只能讀(常用於一般文字檔、網頁檔案)。 - 600 (
rw-------):只有擁有者可讀寫,其他人完全禁止存取(常用於 private key 或機密資料)。
目錄的權限
特別注意「目錄」的權限意義:
- 要能進入目錄 (
cd),必須有 x (Execute) 權限。 - 要能列出目錄清單 (
ls),必須有 r (Read) 權限。 - 要能在目錄裡新增/刪除檔案,必須有 w (Write) 權限。
所以這就是為什麼網站目錄通常設為 755 (其他人可以 cd 進去讀網頁),而不能設為 644 (會進不去)。
特殊權限 (SUID, SGID, Sticky Bit)
除了基本的三種權限外,Linux 還有三種「特殊權限」,使用 4 碼數字權限時(例如 1777)的第一碼就是用來設定這些特殊權限。
Sticky Bit (t)
數字值:1
最著名的例子就是 /tmp 目錄。
/tmp 的權限通常是 1777 (drwxrwxrwt)。
- 意義:當目錄有了 Sticky Bit,只有「檔案擁有者」可以刪除自己的檔案,其他人就算有 Write 權限也無法刪除別人的檔案。
- 用途:像
/tmp這種「公共暫存區」,大家都可以寫入,但為了避免隨意刪別人的檔案,必須加上 Sticky Bit。
SUID (Set UID) (s)
數字值:4
作用於 執行檔 上。
- 意義:當執行這個檔案時,會暫時獲得 「檔案擁有者」 的權限。
- 例子:
/usr/bin/passwd(修改密碼指令)。- 因為修改密碼需要動到
/etc/shadow(只有 root 能寫),一般使用者根本沒權限改。 - 但
passwd設有 SUID,所以當一般使用者執行它時,會暫時變身為 root 來修改密碼。
- 因為修改密碼需要動到
SGID (Set GID) (s)
數字值:2
作用於 目錄 上。
- 意義:在該目錄下建立的新檔案,其 「群組」 會自動繼承該目錄的群組,而不是建立者的主要群組。
- 用途:專案協作目錄。讓團隊成員在目錄下建立的檔案,都能被同團隊(群組)的人讀寫。