Linux 檔案權限概念詳解 (rwx, owner, group)

在 Linux 系統中,每一個檔案和目錄都有嚴格的「權限設定」。 這決定了 可以對這個檔案做 什麼(讀、寫、執行)。 這也是為什麼 Linux 比 Windows 相對不容易中毒或被亂改設定的原因之一。

權限的三種身份

Linux 將使用者分成三種身份:

  1. 擁有者 (Owner / User):檔案的建立者,通常擁有最高權限。代號為 u
  2. 群組 (Group):與擁有者屬於同一個群組的使用者。代號為 g
  3. 其他人 (Others):既不是擁有者,也不在同一個群組的其他所有人。代號為 o

檢視權限 (ls -l)

使用 ls -l 可以看到權限設定:

-rwxr-xr-- 1 miko staff 898 Dec 12 10:00 script.sh

最前面的 9 個字元(不含第一個代表檔案類型的 -d)就是權限。 它們三個一組,分別代表 UserGroupOthers 的權限。

rwxr-xr-- 可以拆解為:

  • Ownre (u): rwx (可讀、可寫、可執行)
  • Group (g): r-x (可讀、可執行、不可寫)
  • Others (o): r-- (只讀、不可寫、不可執行)

權限的三種動作 (rwx)

權限代號對檔案的意義對目錄的意義數字值
Readr可以查看檔案內容可以列出目錄內的檔案 (ls)4
Writew可以修改、刪除檔案內容可以新增、刪除、搬移目錄內的檔案2
Executex可以執行該檔案 (如 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

作用於 目錄 上。

  • 意義:在該目錄下建立的新檔案,其 「群組」 會自動繼承該目錄的群組,而不是建立者的主要群組。
  • 用途:專案協作目錄。讓團隊成員在目錄下建立的檔案,都能被同團隊(群組)的人讀寫。