在 Kali Linux 環境中,軟體安裝方式多元,從系統內建的 apt 套件管理器、圖形化介面工具到使用 Git 下載原始碼皆可行。apt 提供了便捷的軟體安裝、移除和更新機制,並可透過設定軟體源來擴充可安裝的軟體範圍。雖然 Kali 最新版本已不再預設提供 GUI 安裝工具,但仍可透過 apt 安裝 Synaptic 等圖形化套件管理程式,方便不熟悉指令操作的使用者。此外,對於尚未收錄於軟體源的軟體,則可利用 Git 從 GitHub 等平台下載原始碼進行安裝。檔案許可權管理是 Linux 系統安全的重要環節,透過設定檔案的擁有者、群組以及其他使用者的讀取、寫入和執行許可權,可以有效控管檔案的存取。除了基本許可權設定外,SUID、SGID 和 Sticky Bit 等特殊許可權位元也提供了更進階的許可權控管機制,例如允許使用者以檔案擁有者的許可權執行檔案,或限制目錄中檔案的刪除許可權等。理解這些許可權設定的原理和使用方法,對於維護系統安全至關重要。
Kali Linux 軟體安裝
在 Kali Linux 系統中,軟體安裝可以透過多種方式進行,包括使用系統內建的套件管理器、GUI 介面及 Git 資源。以下將詳細介紹這些方法,並提供具體的實作範例。
軟體源管理
Kali Linux 如同其他根據 Debian 的系統,會將套件來源分為不同的類別,這些類別主要包括:
- main:包含受支援的開源軟體。
- universe:包含社群維護的開源軟體。
- multiverse:包含因版權或法律問題受限的軟體。
- restricted:包含專有的裝置驅動程式。
- backports:包含來自後續版本的套件。
玄貓建議避免在 sources.list 中使用測試、實驗或不穩定的倉函式庫,因為這些軟體可能未經充分測試,可能會導致系統不穩定。
當你要求下載新軟體時,系統會依照 sources.list 中列出的倉函式庫順序進行搜尋,一旦找到所需的套件即停止搜尋。因此,務必確保所新增的倉函式庫與你的系統相容。
若需要新增新的倉函式庫,只需編輯 sources.list 檔案並新增倉函式庫名稱即可。例如,如果要安裝 Oracle Java 8,Kali 的預設倉函式庫中並無對應的 apt 套件,但可以透過 WebUpd8 提供的倉函式庫來安裝。假設你需要將以下倉函式庫位置新增至 sources.list:
deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main
debsrc http://ppa.launchpad.net/webupd8team/java/ubuntu precise main
內容解密:
以上內容是解釋瞭如何在 Kali Linux 中管理軟體來源。Kali Linux 使用與 Ubuntu 相似的倉函式庫分類別方式。在 sources.list 檔案中列出了這些倉函式庫。每個倉函式庫包含特定類別的軟體:main 包含受支援的開源軟體、universe 包含社群維護的開源軟體、multiverse 包含受版權或法律問題限制的軟體、restricted 包含專有裝置驅動程式、backports 包含來自後續版本的軟體包。玄貓建議避免使用測試、實驗或不穩定的倉函式庫,以防止下載問題軟體導致系統當機。
GUI 安裝工具
Kali Linux 的最新版本已不再預設提供 GUI 安裝工具,但你可以透過 apt-get 命令來安裝。目前最常見的 GUI 安裝工具包括 Synaptic 和 Gdebi。以下是使用 Synaptic 安裝 Snort 的步驟:
- 安裝 Synaptic:
kali > apt-get install synaptic
安裝完成後,可從「設定」> 「Synaptic 套件管理員」啟動 Synaptic。
在 Synaptic 的「搜尋」標籤中輸入 Snort 的名稱進行搜尋。
在搜尋結果中找到 Snort 的套件並勾選,然後點選「應用」以開始下載和安裝。
內容解密:
這段解說瞭如何在 Kali Linux 中使用 GUI 安裝工具(如 Synaptic)來安裝軟體。首先需要使用 apt-get 命令來安裝 Synaptic,然後透過「設定」> 「Synaptic 套件管理員」啟動它。接著可以在 Synaptic 中進行搜尋並選擇所需的軟體進行安裝。這種方式對於不熟悉命令列操作的人來說更為友好和直觀。
Git 安裝軟體
有些時候,所需的軟體可能不存在於任何倉函式庫中,特別是一些新推出且尚未被納入官方倉函式庫中的軟體。這時候可以從 GitHub 下載該軟體。例如,若需要安裝 Bluetooth 測試工具 bluediving,可以從 GitHub 下載。
- 搜尋 bluediving 在 GitHub 上:
https://www.github.com/balle/bluediving.git
- 使用 git clone 命令從 GitHub 複製該軟體:
kali > git clone https://www.github.com/balle/bluediving.git
這個命令會將 bluediving 的所有資料和檔案複製到本地系統中。你可以使用 ls -l 命令來檢查該目錄中的檔案是否成功複製。
內容解密:
這段內容解釋瞭如何使用 GitHub 作為資源來下載和安裝某些無法透過常規倉函式庫取得的軟體包。GitHub 是一個開發者分享軟體程式碼和專案的平台,允許使用者下載、使用並提供反饋。透過 git clone 命令可以從 GitHub 上覆制指定專案到本地系統中進行安裝和使用。
練習題
在進入下一章之前,請嘗試完成以下練習題以鞏固所學:
- 從 Kali 儲存函式庫中安裝一個新軟體。
- 移除剛才安裝的軟體。
- 更新你的儲存函式庫。
- 升級你現有的軟體。
- 在 GitHub 上選擇一個新軟體並將其克隆到你的系統上。
控制檔案和目錄許可權
在單一作業系統中,並非每位使用者都應該擁有相同的檔案和目錄存取許可權。與任何專業或企業級作業系統一樣,Linux 提供了安全檔案和目錄存取的方法。這個安全系統允許系統管理員(root 使用者)或檔案擁有者保護他們的檔案,防止未經授權的存取或篡改,並且可以給予選定的使用者讀取、寫入或執行檔案的許可權。
對於每個檔案和目錄,我們可以指定擁有者、特定使用者群組以及所有其他使用者的許可權狀態。這在多使用者、企業級作業系統中是必不可少的。如果沒有這種許可權控制,系統將會非常混亂。
不同型別的使用者
在 Linux 中,root 使用者是全能的,可以在系統上執行基本上任何操作。其他使用者則擁有更有限的功能和許可權,幾乎從不具有 root 使用者的存取權。
這些其他使用者通常被分組,這些群組通常分享類別似的功能。在商業實體中,這些群組可能包括財務、工程、銷售等部門。在 IT 環境中,這些群組可能包括開發人員、網路管理員和資料函式倉管理員。目的是將擁有相似需求的人放入一個群組中,授予相關許可權;然後每個群組成員繼承該群組的許可權。這主要是為了方便管理許可權和安全性。
root 使用者預設屬於 root 群組。每個新增到系統中的使用者都必須加入某個群組,以繼承該群組的許可權。
授予許可權
每個檔案和目錄都必須分配特定級別的許可權給不同身份的使用者。三種許可權級別如下:
- r:讀取許可權:僅允許開啟和檢視檔案。
- w:寫入許可權:允許檢視和編輯檔案。
- x:執行許可權:允許執行檔案(但不一定允許檢視或編輯它)。
透過這種方式,root 使用者可以根據需求授予使用者不同級別的許可權。當建立檔案時,通常建立它的人是該檔案的擁有者,而擁有該檔案的群組是該使用者當前所屬的群組。該檔案擁有者可以授予各種存取許可權給它。以下我們來看看如何變更許可權以轉移所有權給個別使用者和群組。
授予個別使用者所有權
要將某個檔案的所有權轉移給另一位使用者,以便他們能夠控制該檔案的許可權,我們可以使用 chown(改變所有者)指令:
kali > chown bob /tmp/bobsfile
在此指令中,我們指定要轉移所有權給哪位使用者(Bob),然後提供該檔案所在位置和名稱(bobsfile)。此指令將 Bob 的帳號授予 bobsfile 的所有權。
授予群組所有權
要將某個檔案從一個群組轉移到另一個群組,我們可以使用 chgrp(改變群組)指令。
駭客通常更可能單獨工作而非與他人合作,但也不是沒有聽說過數位駭客或測試人員合作在同一個專案上。在這種情況下,使用群組是必要的。例如,你可能有一群測試人員和一群安全團隊成員正在處理同一個專案。測試人員在本例中屬於 root 群組,意味著他們擁有所有許可權和存取能力。root 群組需要存取攻擊工具,而安全人員只需要存取防禦工具(如入侵偵測系統IDS)。假設 root 群組下載並安裝了一個名為 newIDS 的程式;root 群組需要將所有權轉移給安全團隊以便他們能夠自由使用它。為了做到這點,root 群組只需輸入以下指令:
kali > chgrp security newIDS
此指令將 security 群組授予 newIDS 的所有權。
現在你需要了解如何檢查這些分配是否成功執行。你會透過檢查該檔案的存取權來做到這點。
檢查存取許可
當你想要找出某個檔案或目錄授予哪些使用者什麼樣的存取許可時,可以使用 ls 指令搭配 -l(長格式)選項來顯示目錄內容長格式列表—這個清單包含了存取許可資訊。
kali > ls -l /usr/share/hashcat
total 32952
➊ drwxr-xr-x 5 root root 4096 Dec 5 10:47 charsets
➋ -rw-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
次段落標題:內容解密:
drwxr-xr-x: 第一列顯示的是目錄(d)以及三種身份(擁有人、群組、其他)所擁有的讀、寫及執行能力。rw-r--r--: 第一列顯示的是一般檔案(無首碼),同樣三種身份所擁有不同程度之讀、寫及執行能力。charsets: 第二列顯示的是檔名稱(目錄)。hashcat.hcstat: 第二列顯示的是檔名稱。masks: 第二列顯示的是檔名稱。OpenCL: 第二列顯示的是檔名稱。rules: 第二列顯示的是檔名稱。
特殊情況處理
此外還有一些特殊情況處理:
次段落標題:內容解密:
- SUID: SUID 是 Set User ID 的縮寫,「Set User ID」是 Unix 和 Linux 作業系統中的一種特殊型別的一種檔案屬性。當 SUID 標誌設定到一個檔案時,任何使用者執行該檔案時會暫時獲得該檔案擁有者的許可權。「SUID」屬性一般應用於一些需要使用者以高許可權執行但不應該獲得完全系統管理員權利的人員來執行的一些程式上。
- SGID: SGID 是 Set Group ID 的縮寫,「Set Group ID」也是 Unix 和 Linux 作業系統中的一種特殊型別的一種檔案屬性。當 SGID 標誌設定到一個檔案時,任何使用者執行該檔案時會暫時獲得該檔案擁有之「Group」許可權。「SGID」屬性一般應用於一些需要使用者以高許可權執行但不應該獲得完全系統管理員權利的人員來執行的一些程式上。
- Sticky Bit: Stick Bit 是 Linux 和 Unix 作業系統中的一種特殊型別的一種目錄屬性。「Sticky Bit」設定到某個目錄時,表示該目錄中的任何使用者不能刪除或修改其他使用者所建立之「File」,但是仍然保留自己的「File」剪除以及更改之權力,「Sticky Bit」一般應用於一些公共資料夾中避免各自檔案被不小心刪除與篡改。
透過理解與掌握 Linux 檔案與目錄之基本存取許可機制與特殊情況處理能夠大幅提升整體作業系統之安全性與穩定性運作環境!
次段落標題:視覺化圖表
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Kali Linux 軟體安裝與檔案許可權管理
package "Git 版本控制" {
package "工作區域" {
component [工作目錄
Working Directory] as work
component [暫存區
Staging Area] as stage
component [本地倉庫
Local Repository] as local
component [遠端倉庫
Remote Repository] as remote
}
package "基本操作" {
component [git add] as add
component [git commit] as commit
component [git push] as push
component [git pull] as pull
}
package "分支管理" {
component [git branch] as branch
component [git merge] as merge
component [git rebase] as rebase
}
}
work --> add : 加入暫存
add --> stage : 暫存變更
stage --> commit : 提交變更
commit --> local : 版本記錄
local --> push : 推送遠端
remote --> pull : 拉取更新
branch --> merge : 合併分支
note right of stage
git status 查看狀態
git diff 比較差異
end note
@enduml
次段落標題:內容解密:
此圖示展示了 Linux 中不同型別使用者及其對應之 group 與 file permission 賦予機制:
- Root -> Admin: Root 使用者具有最廣泛且最高等級之 permission。
- Root -> User: Root 使用者同時也是 system user 中最主要角色之一。
- Admin -> File Permission: Admin 使用者具有 file permission 調整之能力。
- User -> File Permission: General user 在系統之 basic operation 中皆具有調整 file permission 與 group 調整能力。
- Groups: Groups 中則由多種角色如 finance, engineering, sales 與 admin 或 user 對接形成完整 user & group management system.
次段落標題:程式碼範例
# 調整 file permission for user bob to /tmp/bobsfile.
chown bob /tmp/bobsfile
# 調整 file permission for group security to /tmp/newIDS.
chgrp security /tmp/newIDS
# 查詢 hashcat directory 下面各項 file 與 folder permission 賦予狀態.
ls -l /usr/share/hashcat
# 新增 sticky bit 特殊字元至 public folder.
chmod +t /tmp/public_folder/
# 新增 SGID 特殊字元至 group_scripts folder.
chmod +s /tmp/group_scripts/
# 新增 SUID 特殊字元至 special_user_script.sh.
chmod u+s /tmp/special_user_script.sh/
次段落標題:內容解密:
此段程式碼範例展示如何利用以下指令對 system file 或 folder 做各類別 permission 調整:
chown指令:調整指定之 system user 的 file/ folder permission 賦予狀態。chgrp指令:調整指定之 system group 的 file/ folder permission 賦予狀態。ls -l指令:查詢指定之 directory 下面各項 file 與 folder permission 賦予狀態。chmod +t指令:新增 sticky bit 特殊字元至 public folder 中避免各自檔案被不小心刪除與篡改。chmod +s指令:新增 SGID 特殊字元至 group_scripts folder 中提供更高 level security protection.chmod u+s指令:新增 SUID 特殊字元至 special_user_script.sh 提供更高 level security protection.
透過完整掌握上述指令與其詳細操作邏輯能夠大幅提升 linux system operation safety.