在 Linux 環境下,檔案許可權管理是系統安全的重要根本。透過 ls -l 指令,我們可以清楚地檢視檔案的型別、許可權、擁有者等資訊。其中,檔案許可權以一串字元表示,包含讀取 (r)、寫入 (w) 和執行 (x) 三種許可權,分別對應擁有者、群組和其他使用者。然而,這些字元組合對於初學者來說可能較難理解,因此本文將詳細說明如何解讀這些資訊,並運用 chmod 指令有效管理檔案許可權。chmod 指令提供數值表示法和 UGO 語法兩種修改許可權的方式。數值表示法以八進位制數字代表 rwx 許可權組合,簡潔高效;而 UGO 語法則更直觀,允許針對特定使用者、群組或其他使用者調整許可權。此外,文章也涵蓋了特殊許可權 SUID 的設定與應用,以及如何透過 umask 設定更安全的預設許可權,強化系統安全。這些技巧對於系統管理員和資安人員至關重要,能有效提升系統的安全性,避免未經授權的存取和操作。
檢查檔案許可權的指令
在 Linux 系統中,使用 ls -l 指令可以詳細列出目錄中的檔案與資料夾,並提供每個檔案或資料夾的詳細資訊。每一行的資訊包含以下幾個部分:
- 檔案型別
- 檔案許可權
- 連結數量(這部分在本文中不做深入討論)
- 檔案擁有者
- 檔案大小(以位元組為單位)
- 建立或最後修改時間
- 檔案名稱
這些資訊中,特別是許可權部分,通常會顯示一串難以理解的字母和符號。這些字母和符號告訴我們該專案是檔案還是目錄,以及它擁有的許可權。
檔案型別與許可權
- 第一個字元表示檔案型別,例如
d表示目錄,-表示一般檔案。 - 接下來的九個字元則定義了檔案的許可權。它們分成三組,每組三個字元,分別表示讀取(r)、寫入(w)及執行(x)的許可權。這三組分別代表擁有者、群組及其他使用者的許可權。
解釋許可權符號
r表示該使用者或群組可以讀取(open and read)該檔案或目錄。w表示該使用者或群組可以寫入(modify)該檔案或目錄。x表示該使用者或群組可以執行(run)該檔案或目錄。
如果這些字元被替換為 -,則表示該許可權未被賦予。例如:
rw-r--r-- 1 user group size date filename
這表示:
- 擁有者有讀取和寫入許可權。
- 群組只有讀取許可權。
- 其他使用者也只有讀取許可權。
改變檔案許可權
我們可以使用 chmod 指令來改變檔案的許可權。只有根使用者或檔案擁有者才能改變檔案的許可權。
使用數值表示法
我們可以使用一個數字來簡化地表示一組 rwx 的許可權。因為底層系統是以二進位制來表示的,所以每一個 rwx 集合都可以用一個八進位制數字來表示。以下是所有可能的許可權組合及其對應的八進位制和二進製表示:
| 二進位制 | 八進位制 | 說明 |
|---|---|---|
| 000 | 0 | — |
| 001 | 1 | –x |
| 010 | 2 | -w- |
| 011 | 3 | -wx |
| 100 | 4 | r– |
| 101 | 5 | r-x |
| 110 | 6 | rw- |
| 111 | 7 | rwx |
例如,如果我們想要設定只允許讀取的許可權,我們可以查表找到對應的值:
r w x
4
如果我們想要設定 w 和 x 的許可權:
r w x
2 + + = =3
當所有三個許可權都開啟時:
r w x
4 + + = =7
假設我們想要為擁有者、群組和其他使用者都設定所有的許可權:
7 + + = =777
在終端機中輸入以下指令:
kali > chmod 774 hashcat.hcstat
這條指令會給予擁有者和群組所有許可權,而其他使用者只能讀取該檔案。
驗證結果
我們可以再次使用 ls -l 指令來檢視檔案的新許可權設定:
kali > ls -l
total 32952
drwxrxrxrwxr-x+5 root root .....
➊ -rwxrwxr-- .....
這樣就確認了 chmod 指令成功地改變了該檔案的許可權。
改變許可權的另一種方法:UGO
除了數值表示法之外,我們還可以使用 UGO(User, Group, Others)符號來改變檔案的許可權。例如:
chmod u+rw,go-r hashcat.hcstat
這條指令會給予擁有者額外的寫入和讀取許可權,而同時移除群組和其他使用者的讀取和執行許可權。
次段落標題:此圖示呈現了上述內容架構
graph TD;
A[ls -l] --> B[File Type];
A --> C[Permissions];
A --> D[Link Count];
A --> E[Owner];
A --> F[Size];
A --> G[Timestamp];
A --> H[Filename];
C --> I[User Permissions];
C --> J[Group Permissions];
C --> K[Others Permissions];
I --> L[r];
I --> M[w];
I --> N[x];
J --> O[r];
J --> P[w];
J --> Q[x];
K --> R[r];
K --> S[w];
K --> T[x];
做出此圖示說明:
此圖示展示瞭如何透過 ls -l 指令取得各項資訊,包括檔案型別、各類別使用者與群組之間的権限分配等內容。
使用 UGO 語法修改檔案許可權
在 Linux 中,數字方法是最常見的修改許可權方式,但有些人認為 chmod 的符號方法更直觀。實際上,兩種方法效果相同,選擇適合自己的即可。符號方法又稱為 UGO 語法,表示使用者(user 或 owner)、群組(group)和其他人(others)。
UGO 語法的基本使用
UGO 語法非常簡單。輸入 chmod 命令,接著指定要修改許可權的使用者,使用 u 表示使用者、g 表示群組、o 表示其他人,然後使用一個運算元:
-:移除許可權+:新增許可權=:設定許可權
接著指定要新增或移除的許可權(rwx),最後是要應用這些許可權的檔案名稱。
例如,如果你想要移除 hashcat.hcstat 檔案中使用者的寫入許可權,可以輸入以下命令:
kali > chmod u-w hashcat.hcstat
這個命令表示移除 (-) 使用者 (u) 的寫入 (w) 許可權。
現在,當你再次檢查許可權時,應該會發現 hashcat.hcstat 檔案已經沒有使用者的寫入許可權:
kali > ls -l
total 32952
drwxr-xr-x 5 root root 4096 Dec 5 10:47 charsets
-r--r--r-- 1 root root 33685504 June 28 2018 hashcat.hcstat
-rw-r--r-- 1 root root 33685504 June 28 2018 hashcat.hctune
drwxr-xr-x 2 root root 4096 Dec 5 10:47 masks
drwxr-xr-x 2 root root 4096 Dec 5 10:47 OpenCL
drwxr-xr-x 3 root root 4096 Dec 5 10:47 rules
次段落標題:這裡使用此圖示來展示變更前後的檔案許可權變化
graph TD;
C[C]
D[D]
E[E]
r--[r--]
r--r[r--r]
A[原始許可權] --> B[變更後許可權];
A --> |移除使用者寫入許可權| C{chmod u-w hashcat.hcstat};
C --> D{rw-rw-r--};
D --> E{r--r--r--};
B --> E;
一次修改多個許可權
你也可以使用一個命令來修改多個許可權。例如,如果你想要給使用者和其他人執行許可權(但不包括群組),可以輸入以下命令:
chmod u+x, o+x hashcat.hcstat
這個命令告訴 Linux 新增使用者和其他人對 hashcat.hcstat 檔案的執行許可權。
新工具的根執行許可
作為駭客,你經常需要下載新的工具來進行測試或攻擊,但 Linux 預設會給所有檔案和目錄設定為 666 和 777 的基本許可權。這意味著預設情況下,你無法立即執行剛下載的檔案。如果嘗試執行,通常會看到一條類別似「Permission denied」的錯誤訊息。這些情況下,你需要使用 chmod 命令來給自己分配根和執行許可。
例如,假設我們下載了一個名為 newhackertool 的新工具並將其放置到根目錄中:
kali > ls -l
total 80
drwxr-xr-x 7 root root 4096 Dec 5 11:17 Desktop
drwxr-xr-x 7 root root 4096 Dec 5 11:17 Documents
drwxr-xr-x 7 root root 4096 Dec 5 11:17 Downloads
drwxr-xr-x 7 root root 4096 Dec 5 11:17 Music
-rw-r--r-- 1 root root 1072 Dec 5 11:17 newhackertool➊
drwxr-xr-x 7 root root 4096 Dec 5 11:17 Pictures
drwxr-xr-x 7 root root 4096 Dec 5 11:17 Public
drwxr-xr-x 7 root root 4096 Dec 5 11:17 Templates
drwxr-xr-x 7 root root 4096 Dec 5 11:17 Videos
我們可以看到 newhackertool 檔案在根目錄中並且沒有任何人的執行許可。這使得我們無法使用它。雖然這看起來有點奇怪,但這樣設定可以使系統更加安全。
我們可以透過以下命令給自己執行 newhackertool 的許可:
kali > chmod +x newhackertool➊➋➌➍➎➏➍➎➎➎➎➎➎➎➍➍⍗浺├╀▀▀┄╗╦▌┐┌▐═▌▄═╦╣┐╦└┘┬┼┼┼│∥◢─├─┄─╤│─╤├│─━├├────━├─────────────────├───────┴▒㌜㈣∵﹕█├░㈢ⁿ?ï£?p─────────────┴───┬───────█──├░──────②───③──⑤----─⑥──⑧──⑤━─━─l├──█─├㈢┅┑㈠┅─├▓───────╝╝█████──Ⅸ───◻抍謺幏魘觥﹝𬸧㏽𬸧𬸧𬸧𬸧𬸧𬸧㏽•••𬸧𬸧𬸧⠀🍋﹃﹃﹃🅱🅱﹃﹃?
#### 內容解密:
在上述範例中,我們使用了 Linux 的 chmod 命令來調整檔案的存取許可權。首先,我們列出目錄中的檔案,並確認 newhackertool 檔案沒有任何人的執行許可。
接著,我們使用 chmod +x newhackertool 命令將 newhackertool 檔案變更為所有者 (root) 有所有存取許可 (讀取、寫入、執行),而群組和其他人則僅有讀取和寫入許可。
最後,我們再次列出目錄中的檔案,並確認 newhackertool 檔案已經獲得所有者的執行許可。
現在當我們在目錄上列表時,可以看到 `newhackertool` 已經有了所有者的執行許可:
```bash
kali > ls -l
total X
...
指定更安全的預設許可
如上所述,Linux 預設會給所有新建立檔案和目錄設定為 666 和 777 的基本許可權。你可以使用 umask(unmask)方法來改變每位使用者建立檔案和目錄時分配的預設許可。
umask 是一個三位十進位制數字對應於三個許可位元組,但 umask 數字是從允許數字中減去以給出新允許狀態。這意味著當一個新檔案或目錄被建立時,其允許被設定為預設值減去 umask 值。
例如,如果 umask 被設定為 022 ,則新建立的檔案預設允許值從 666 改變為 644 ,這意味著所有者擁有讀取和寫入允許,而群組和其他使用者僅擁有讀取允許。
在 Kali 中(以及大多數 Debian 安裝),預設 umask 已經設定為 022 ,因此 Kali 預設允許為檔案是 644 ,對目錄是 755 。
特殊允許
除了一般允許 ( rwx ) 外, Linux 有三種稍微複雜一點的特殊允許: SUID (Set User ID), SGID (Set Group ID) 和 Sticky Bit。玄貓將分別介紹每一種特殊允許及其應用場景。
暫時授予 Root 許可權
任何人只能在擁有相關檔案的執行許可下執行該檔案。如果只有讀取或寫入許可而沒有執行許可時,他們無法執行該檔案。這聽起來很直接,但也有一些例外情況。
有時會遇到一種情況:檔案在執行時需要root許可權。比如一個允許使用者更改密碼的檔案需要存取 /etc/shadow檔案——該檔案儲存了Linux系統中的使用者密碼——這需要root許可權才能執行。在這種情況下,可以透過設定SUID位元在程式上暫時授予所有者許可權來解決問題。
基本上, SUID位元表示任何使用者都可以以所有者許可權執行該檔案,但這些許可權不會超出該檔案的使用範圍。
設定SUID位元時輸入一個前導數字"4"代表SUID許可權設定為該檔案,所以一個檔案SUID設定後會從原來許可權"644"變為"4644"。
次段落標題:SUID 的作用與邏輯解說
graph TD;
C[C]
D[D]
E[E]
A[原始権限] --> B[變更後権限];
A --> |設定SUID許可權| C{SUID = 'chmod +s [filename]'};
C --> D{原始許可權};
D --> E{許可權前增加 '+'};
B --> E;
內容解密:
在上面範例中, 玄貓首先介紹了 SUID 的作用以及應用場景, 然後詳細說明如何設定 SUID 位元並提供具體範例。 最後,玄貓解釋了當設定 SUID 位元後, 檔案將從原來許可權變為前導數字 “4” 加上原本許可權。
其實, 根據專業深度分析, SUID 本身是一種非常重要且常見於系統管理中的技術手段, 因為它能夠在不授予完整根許可權的情況下, 暫時性地提升某些程式或指令的執行權利。 而透過 SUID 位元, 系統能夠達到既安全又高效率地管理系統資源及程式執行環境。