Linux 中如何安全地抹去磁碟資料?

2023-10-11 21:00:34

哈嘍大家好,我是鹹魚

離過職的小夥伴都知道,離職的時候需要上交公司電腦,但是電腦裡面有許多我們的個人資訊(聊天記錄、瀏覽記錄等等)

所以我們就需要先把這些資訊都刪除,確保無法恢復之後才上交

即有些情況下我們不得不以一種確保無法恢復的方式從磁碟上擦除所有資訊

許多小夥伴可能認為使用檔案管理器或者 rm 命令刪除資料可以保證安全性,但其實不然

因為 rm 命令或者檔案管理器刪除檔案只是刪除指向檔案系統的指標(inode),所以原始資料仍可以使用

在 Linux 中,檔案由指標部分(inode)和資料部分(data)組成

檔案被刪除的時候,檔案對應的 inode 就被刪除掉了,而檔案的資料部分在 inode 被清除掉之後,就會被覆蓋並寫入新的內容

下面我們來看一下在 Linux 中如何安全地抹去磁碟資料吧!

PS:文章中提到的命令請謹慎使用!別怪鹹魚沒提醒大家

shred

我們先來看看 shred 命令,它是 Linux 中保護私人資料的最佳方式之一

shred 功能是重複覆蓋檔案,只能使用專門的硬體並且極其困難地恢復資料,所以它經常被用來安全地擦除資料

shred 是 Linux 軟體包 coreutils 的一部分,所以一般情況下是預設安裝的

預設情況下,shered 會執行三次,在執行的時候,它會將偽亂資料寫入裝置。

例如我們要擦除 dev/sdb 裝置

# -v 表示輸出執行詳細資訊
shred -v /dev/sdb

前面我們說到,shered 會執行三次。但是執行三次所需的時間太長了,我們可以通過 -n 來設定執行次數

# 執行一次
shred -v -n 1 /dev/sdb


我們還可以新增更多選項來提高從磁碟刪除資料的可靠性

shred -v -n 1 --random-source=/dev/urandom -z /dev/sdb
  • --random-source=/dev/urandom :表示指定使用隨機生成的資料覆蓋磁碟。Linux 的特殊檔案 /dev/urandom 為核心的亂數生成器提供了一個介面
  • -z /dev/sdb:用 0 覆蓋到目前為止的所有內容

wipe

看這個命令的名字就可以知道,這個命令用於擦除(wipe)磁碟中的資料

wipe 命令會重寫磁碟磁區並重新整理快取,這使得想要恢復資料是一件極其困難或者說不可能的事

Linux 預設沒有這個工具,我們需要先安裝

# 以 CentOS 7 為例
yum install -y wipe

這個命令很簡單,後面只需加上磁碟路徑即可

wipe /dev/sdb

ps:現在好像 wipe 這個工具安裝不了了,我試了多個映象源然後 yum 安裝的時候都說沒有該軟體包(安裝了拓展源也不行),有知道原因的小夥伴歡迎給我留言

dd

dd 可從標準輸入或檔案中讀取資料,根據指定的格式來轉換資料,再輸出到檔案、裝置或標準輸出

dd 命令是 Linux 中另一種常用的擦除磁碟的方法,儘管該命令並不像 shredwipe 那樣明確地用於從磁碟中擦除資料,但它是 Linux 使用者廣泛使用的方法

例如下面的命令可以安全可靠地擦除 /dev/sdb 裝置中的資料

dd if=/dev/urandom of=/dev/sdb bs=512 status=progress
  • if=/dev/urandom:輸入檔案,我們用 /dev/urandom 生成亂資料
  • of=/dev/sdb:輸出檔案,表示要擦除的磁碟
  • bs:塊大小(以位元組為單位)

當顯示 「No space left on device」時,表示擦除成功完成

或者我們用 zero 字串對磁碟進行覆蓋,而不是生成亂資料

dd if=/dev/zero of=/dev/sdb bs=4096 status=progress

參考文章:https://linuxiac.com/best-ways-to-securely-erase-disk-in-linux/