在 Linux 環境下,有效管理資料和儲存裝置對於系統管理員和資安人員至關重要。本文將介紹常用的壓縮、封存工具,例如 targzipbzip2compress,以及如何使用它們來封裝、壓縮和解壓縮檔案。此外,我們還會探討 dd 命令的應用,它可以用於建立磁碟映像和進行檔案救援。接著,我們將深入瞭解 Linux 檔案系統的架構,特別是 /dev 目錄下儲存裝置的表示方式,以及如何掛載和管理這些裝置。理解這些概念能幫助你更有效率地操作 Linux 系統,並在資安領域中進行更深入的分析和操作。

壓縮與封存

在資訊安全領域中,駭客經常需要下載和安裝新軟體,並且傳送和接收多個指令碼和大型檔案。這些任務在檔案被壓縮並合併成一個檔案後會變得更加方便。對於來自Windows世界的使用者來說,這個概念可能會讓人想到.zip格式,它將多個檔案壓縮成一個較小的檔案,方便透過網路或可移動媒體傳輸。在Linux中,有多種方法可以實作這一目標,本章將探討一些最常見的工具。此外,本章還會介紹dd命令,該命令允許你複製整個磁碟,包括該磁碟上的已刪除檔案。

壓縮技術

壓縮技術本身是一個有趣的主題,可能會填滿整本文的內容。但對於這本文來說,我們只需要對這個過程有一個基本的瞭解。壓縮,顧名思義,是使資料變小的過程,從而減少儲存容量需求並使資料更易於傳輸。作為初學駭客,分類別壓縮為無失真壓縮和有失真壓縮就足夠了。

有失真壓縮非常有效地減少了檔案的大小,但會失去資訊的一致性。換句話說,壓縮後的檔案不完全等同於原始檔案。這種型別的壓縮非常適合圖形、影片和音訊檔案,因為這些檔案中的小差異幾乎是無法察覺的。例如.mp3.mp4.png.jpg都是有失真壓縮演算法。如果.png檔中的畫素或.mp3檔中的單一音符發生變化,你的眼睛或耳朵不太可能注意到差異——儘管音樂愛好者會說他們能夠明顯區分.mp3和未壓縮的.flac檔之間的差異。

有失真壓縮最重要的優點是其高效性和有效性。壓縮比非常高,這意味著結果檔案比原始檔案小得多。

然而,當你需要傳送檔案或軟體時(尤其是當資料完整性至關重要時),有失真壓縮是不可接受的。例如,如果你正在傳送指令碼或檔案,當它被解壓縮時必須保留原始檔案的一致性。因此本章主要介紹無失真壓縮這種形式的壓縮技術。

使用tar命令封存檔案

通常在開始進行檔案壓縮時,我們會先將它們合併成一個封存。在大多數情況下,我們會使用tar命令來進行封存操作。Tar是Tape Archive(磁帶封存)的簡稱,「Tape」指的是電腦發展早期使用磁帶來儲存資料的時代。「Archive」則是指將多個檔案封裝成一個單一檔案的過程。

假設你有一些指令碼檔案(如之前提到的三個指令碼檔案),並希望將它們傳送給另一位駭客同伴以進行協作專案。你可以使用以下命令將它們合併成一個封存檔案:

kali > tar -cvf HackersArise.tar hackersarise1 hackersarise2 hackersarise3

接下來我們來拆解這個命令:

  • tar: 是封存命令。
  • -c: 建立新封存。
  • -v: 詳細模式(可選),列出正在處理的檔案。
  • -f: 指定要寫入或讀取的封存檔名稱。
  • HackersArise.tar: 新建立的封存檔名稱。

內容解密:

此命令將三個檔案合併成一個名為 HackersArise.tar 的單一封存檔案。當我們執行這個命令後,可以看到目錄中包含了新建立的 .tar 封存檔案:

kali > ls -l
rwrr 1 root root 40960 Nov 27 2018 13:32 HackersArise.tar

請注意此處 HackersArise.tar 的大小為40,960位元組。當三個檔案被封存時,「tar」命令會消耗顯著的開銷來執行此操作:雖然三個檔案在封存前總共大小為35,094位元組,但在封存後卻增長到40,960位元組。換句話說,「tar」命令進行封存操作時增加了超過5,000位元組開銷。

對於小型檔案而言,此開銷可能非常顯著;但隨著檔案數量增加以及大小增大,「tar」命令對於資料傳輸而言會變得越來越有效率。

檢視與解壓縮

我們可以透過以下命令檢視 .tar 中包含哪些檔案內容而不進行實際解壓縮:

kali > tar -tvf HackersArise.tar

這樣我們可以看到我們原始三個檔案及其大小。

接下來我們可以透過以下方式從 .tar 中解壓出我們原始三個檔案:

kali > tar -xvf HackersArise.tar

檔案壓縮與解壓縮技巧

在 Linux 環境中,檔案的壓縮與解壓縮是日常操作中的重要環節。玄貓將帶你深入瞭解如何使用 targzipbzip2compress 等工具來處理檔案的壓縮與解壓縮,並介紹如何使用 dd 命令來進行位元組級別的檔案複製。

使用 tar 命令進行檔案封裝與解封裝

tar 是 Linux 中最常用的檔案封裝工具,可以將多個檔案封裝成一個 .tar 檔案。以下是一些基本的使用方法:

# 建立一個名為 HackersArise.tar 的封裝檔案
kali > tar -cvf HackersArise.tar hackersarise1.sh hackersarise2.sh hackersarise3.sh

在這個命令中:

  • -c 表示建立一個新的封裝檔案。
  • -v 表示顯示詳細資訊,方便檢視正在封裝的檔案。
  • -f 表示指定封裝檔案的名稱。

如果你想要「靜默」地解壓縮檔案,可以移除 -v 選項:

# 解壓縮檔案並不顯示詳細資訊
kali > tar -xf HackersArise.tar

內容解密:

  • tar -cvf:這個命令用於建立一個新的封裝檔案。-c 表示建立,-v 表示顯示詳細資訊,-f 表示指定封裝檔案的名稱。
  • tar -xf:這個命令用於解壓縮檔案。-x 表示解壓縮,-f 表示指定封裝檔案的名稱。

使用 gzip 壓縮

GNU zip(gzip)是 Linux 中最常用的壓縮工具之一。它可以將檔案壓縮成 .tar.gz.tgz 檔案。

# 壓縮 HackersArise.tar 檔案
kali > gzip HackersArise.*

內容解密:

  • gzip HackersArise.*:這個命令會將所有以 HackersArise. 開頭的檔案進行壓縮,並更改其副檔名為 .tar.gz.
  • gunzip HackersArise.*:這個命令會將所有以 HackersArise. 開頭且副檔名為 .tar.gz 的檔案進行解壓縮。

使用 bzip2 壓縮

bzip2 是另一種常用的壓縮工具,它的壓縮比率比 gzip 高,但速度較慢。它會將檔案壓縮成 .tar.bz2 檔案。

# 壓縮 HackersArise.tar 檔案
kali > bzip2 HackersArise.*

內容解密:

  • bzip2 HackersArise.*:這個命令會將所有以 HackersArise. 開頭的檔案進行壓縮,並更改其副檔名為 .tar.bz2.
  • bunzip2 HackersArise.*:這個命令會將所有以 HackersArise. 開頭且副檔名為 .tar.bz2 的檔案進行解壓縮。

使用 compress 壓縮

compress 是一種較少使用的壓縮工具,但它易於記住。它會將檔案壓縮成 .tar.Z 檔案。

# 壓縮 HackersArise.tar 檔案
kali > compress HackersArise.*

內容解密:

  • compress HackersArise.*:這個命令會將所有以 HackersArise. 開頭的檔案進行壓縮,並更改其副檔名為 .tar.Z.
  • uncompress HackersArise.*:這個命令會將所有以 HackersArise. 開頭且副檔名為 .tar.Z 的檔案進行解壓縮。

使用 dd 命令進行位元組級別複製

在資安領域中,dd 命令非常重要。它可以進行位元組級別的複製,這意味著即使已刪除的檔案也會被複製。這對於數位取證和檢查系統中的潛在威脅非常有用。

以下是一些基本使用方法:

# 建立一個 U 錄式備份副本檔案
kali > dd if=/dev/sdb of=/root/flashcopy bs=4096 conv=noerror

內容解密:

  • dd if=/dev/sdb of=/root/flashcopy bs=4096 conv=noerror:這個命令會將 /dev/sdb 中所有資料完整備份到 /root/flashcopy. 引數說明如下:
    • if=/dev/sdb:輸入裝置,此處為 /dev/sdb,可以是任何裝置,比如硬碟或光碟機.
    • of=/root/flashcopy:輸出裝置,此處為一個備份副本.
    • bs=4096:塊大小,即每次讀寫多少位元組資料.
    • conv=noerror:繼續複製,即使遇到錯誤也不會停止.

玄貓希望這些資訊能夠幫助你更好地理解和使用 Linux 中的壓縮與解壓縮工具,以及如何進行位元組級別的資料複製。透過這些技術,你可以更高效地管理和保護你的資料。

Linux 系統中資料管理與儲存裝置

在從 Windows 環境轉換到 Linux 的過程中,你會發現 Linux 對儲存裝置的表示及管理方式與 Windows 相差甚遠。Linux 的檔案系統並不像 Windows 那樣有 C:、D: 或 E: 等實體磁碟表示,而是以檔案樹結構來表示,而 / 是此檔案樹的根目錄。本章將探討如何在 Linux 中處理儲存裝置,如硬碟、快取碟及其他儲存裝置。

首先,我們將學習如何在這個檔案系統中掛載額外的磁碟或儲存裝置。掛載這裡的意思是將磁碟或硬碟附加到檔案系統上,使其對作業系統可見且可用。對於駭客來說,瞭解目標系統中的檔案與儲存裝置管理系統至關重要。駭客通常使用外部媒體載入資料、駭客工具,甚至是作業系統。一旦進入目標系統,你需要理解自己所面對的環境、找到機密檔案或其他重要檔案的位置、如何將驅動器掛載到目標上,以及可以將檔案放在目標系統中的位置。本章涵蓋了所有這些主題,並介紹瞭如何管理和監控儲存裝置。

裝置目錄 /dev

首先,我們來看看 /dev 目錄。這個目錄包含了所有已連線裝置的檔案表示形式。讓我們從一些基本操作開始。

初探 /dev

進入 /dev 目錄並執行長格式列表(long listing)命令,可以看到以下內容:

kali >cd /dev
kali >ls -l
total 0
crw------- 1 root root 10,175 May 16 12:44 agpgart
crw------- 1 root root 10,235 May 16 12:44 autofs
drwxr-xr-x 1 root root    60 May 16 12:44 block
...
lrwxrwxrwx 1 root root     3 May 16 12:44 cdrom -> sr0
...
drwxr-xr-x 2 root root    60 May 16 12:44 cpu
...

列出的裝置按字母順序顯示。你可能會認識其中的一些裝置,如 cdromcpu ,但也有一些名稱非常隱晦的裝置。每個裝置在 /dev 裡都有自己的檔案表示形式,包括你可能從未使用過或意識到其存在的裝置。

當你向下滾動時,會看到更多裝置列表。特別要注意的是 sda1sda2sda3sdbsdb1 ,這些是硬碟及其分割槽、USB 快取碟及其分割槽的表示形式:

brw-rw----+ 1 root disk   8,   0 May 16 12:44 sda
brw-rw----+ 1 root disk   8,   1 May 16 12:44 sda1
brw-rw----+ 1 root disk   8,   2 May 16 12:44 sda2
brw-rw----+ 1 root disk   8,   5 May 16 12:44 sda5
brw-rw----+ 1 root disk   8,  16 May 16 12:44 sdb
brw-rw----+ 1 root disk   8,  17 May 16 12:44 sdb1

Linux 儲存裝置的表示方式

Linux 應用邏輯標籤來表示驅動器並將其掛載到檔案系統上。這些邏輯標籤會隨著驅動器掛載位置的變化而變化,意味著同一個硬碟可能會在不同時間和位置有不同的標籤。

原本 Linux 用 fd0hda 分別表示軟碟和硬碟(還記得軟碟嗎?)。雖然現代大部分軟碟已經消失(幸好),但一些舊型硬碟仍然存在於一些 Legacy Linux 作業系統中。Serial ATA(SATA)介面和 Small Computer System Interface(SCSI)硬碟通常用 sdasdb 或類別似的形式表示。

驅動器可以分成多個稱為分割槽的部分,這些分割槽在命名系統中用數字來表示。

| Device file | Description                  |
|-------------|------------------------------|
| sda         | 第一個 SATA 快速硬碟           |
| sdb         | 第二個 SATA 快速硬碟           |
| sdc         | 第三個 SATA 快速硬碟           |
| sdd         | 第四個 SATA 快速硬碟           |

本章練習

在進行到下一章之前,請嘗試完成以下練習來鞏固你在本章學到的技能:

建立三個指令碼

# 建立三個指令碼檔案
echo 'echo "This is script one"' > Linux4Hackers.sh
echo 'echo "This is script two"' > Linux4Hackers2.sh
echo 'echo "This is script three"' > Linux4Hackers3.sh

# 處理許可權問題(可能不需要)
chmod +x Linux*

建立 tarball

# 建立 tarball 檔案並觀察大小變化
tar -cvf L4H.tar Linux*sh

# 檢視 tarball 的大小和原始檔案大小總和進行比較
du -sh L4H.tar *.sh

# 控制是否覆寫現有檔案 (如已存在)
tar -cvf L4H.tar *.sh --skip-old-files

壓縮與解壓縮 tarball

# 壓縮 tarball 檔案並觀察大小變化
gzip L4H.tar

# 檢視壓縮後檔案大小與未壓縮前檔案比較
du -sh L4H.tar.gz L4H.tar

# 控制是否覆寫現有檔案 (如已存在)
gzip -c L4H.tar > L4H_new.tar.gz

# 說明 gzip 的覆寫控制方法:使用 -c (stdout) 和重導向到新檔名來避免覆寫現有檔案。

其他壓縮工具測試

# 測試 bzip2 工具壓縮與解壓縮 tarball 檔案並觀察大小變化(同 gzip 操作)
bzip2 L4H.tar

# 測試 compress 工具壓縮與解壓縮 tarball 檔案並觀察大小變化(同 gzip 操作)
compress L4H.tar

建立物理副本

# 測試 dd 命令建立物理副本(即 bit-by-bit copy):
dd if=/dev/sdX of=/path/to/backup.img bs=M status=progress && sync

# 注意:請確保替換 /dev/sdX 和 /path/to/backup.img 中的 X 和路徑為實際值。

預計效果圖示

此圖示展示了 Linux 中各種儲存裝置及其相應檔案之間的關係:

  graph TD;
    A[/] --> B[/dev];
    B --> C[sda];
    B --> D[sdb];
    B --> E[cdrom];
    C --> C_0[/dev/sda];
    C --> C_5[/dev/sda5];
    D --> D_0[/dev/sdb];
    D --> D_5[/dev/sdb5];

內容解密:

  • 整體架構:展示了根目錄 / 下的 /dev 資料夾中包含多種儲存裝置。
  • 詳細描述:詳細說明瞭每個主要儲存裝置(例如 sda, sdb, cdrom)及其子裝置(例如分割槽)。
  • 適用情境:適合於理解 Linux 中如何對映實體儲存裝置至虛擬檔案系統。