一般在Linux刪除檔案的時候,在終端機介面下的話,通常是直接使用rm指令;在圖形環境下的話,通常是直接使用桌面環境提供的檔案瀏覽器來刪除檔案。在無特意去設定檔案刪除方式的情況下,刪除檔案實際上並沒有真正地將檔案的數據從儲存裝置中抹除掉,而僅僅只是刪除其在檔案系統索引表中的存在,原先檔案所佔用的空間將在之後有資料寫入時才被重新使用,因此在刪除檔案後,若是沒有重新寫入資料到原本檔案所佔用的空間位址上,檔案還是可能被還原的。



為了避免刪除掉的機密檔案被有心人士重新拼湊回來,我們需要進行「安全刪除」的工作。安全刪除資料的方式有很多種,最直接的就是破壞儲存裝置的外觀,例如把硬碟敲成得粉碎,把記憶卡用火燒烤,當然這樣的方式雖然十分安全,卻也過度極端,儲存裝置無法重複使用,非常不環保。

實際上,要做到「安全刪除」,只要花點時間對空間進行多次的寫入動作即可,將原先的數據資料覆蓋到完全看不出先前的樣子。在Linux上,可以使用secure-delete套件來安全地刪除檔案、清除可用空間殘留先前的檔案數據、清除RAM和SWAP中殘留的資料。

下載與安裝secure-delete套件

基於Debian的Linux發行版可以使用apt直接下載安裝,指令如下:

sudo apt install secure-delete

secure-delete 套件的使用方法

secure-delete套件中包含下列四種工具指令:

  • srm(Secure Remove):類似rm指令,用來安全刪除檔案與目錄。
  • sfill(Secure Free Space Wiper):清除儲存裝置可用空間所殘留的使用痕跡。
  • sdmem(Secure Memory Wiper):清除記憶體(RAM)中殘留的使用痕跡。
  • sswap(Secure Swap Wiper):清除置換空間(SWAP)中殘留的使用痕跡。

srm (Secure Remove)

srm指令就像是rm指令一樣,可以直接傳入檔案或目錄路徑來刪除檔案和目錄,也可以加上-r參數來刪除目錄以及底下的所有子目錄。

linux-secure-delete

例如要刪除magictest這個檔案,可以使用以下指令:

srm magictest

由於srm預設會進行38次的覆寫動作,因此即使只是刪除幾MB的檔案,也需要一段時間才能完成,如果要查看工作進度可以加上-v參數,如下:

srm -v magictest

linux-secure-delete

將儲存空間覆寫38次之後,原先的檔案已幾乎不可能還原回來,但我們真的需要花那麼大量的時間來完全粉碎一個檔案嗎?其實覆寫1、2次的效果也已經遠勝於完全不覆寫了。srm提供了-l參數,可以降低刪除的安全性,加一個-l只會覆寫2次,如果再重複使用一次-l,寫成-l -l,則只會覆寫一次。例如:

srm -l magictest
srm -l -l magictest

加上-l或是-l -l參數後,刪除檔案的速度會快非常多!

sfill (Secure Free Space Wiper)

sfill指令可以清除儲存裝置可用空間所殘留的使用痕跡,它的工作原理是在儲存裝置的指定路徑建立一個檔案來填滿該路徑所屬分割區的整個空間。因此在進行清除的時候,若發現分割區剩餘的可用空間突然不夠,屬正常現象,請不用擔心。

linux-secure-delete

將可用空間清除的這個動作最好可以搭配-z參數來使用,sfill就會在最後一次覆寫可用空間時,將可用空間填為0,有助於資料壓縮以及改善寫入效能。筆者常用sfill指令與參數如下:

sudo sfill -v -l -l -z /

這指令會在根目錄中,建立一個內容全為0的檔案,並填滿根目錄所在的分割區的空間。

linux-secure-delete

linux-secure-delete

當然sfill指令執行結束後,會把它建立出來用來填滿空間的檔案刪除,歸還可用空間。

sdmem (Secure Memory Wiper)

sdmem指令可以清除記憶體(RAM)中殘留的使用痕跡,使用時需取得root權限。

linux-secure-delete

清除RAM使用痕跡的機會不大,也許只能避免電腦被入侵時,RAM中資料外洩的可能。不然RAM在關機的時候,資料都清空了,哪還會有資料外洩的可能。若要使用sdmem,可以直接執行以下指令:

sudo sdmem

如果想節省時間,也可以使用-l或是-l -l來減少覆寫次數。如下:

sudo sdmem -l
sudo sdmem -l -l

在清除RAM的過程中,會用滿所有的RAM,可能造成電腦停頓甚至是有部份程式當掉的情形。

sswap (Secure Swap Wiper)

sswap指令可以清除置換空間(SWAP)中殘留的使用痕跡,使用時需取得root權限。

linux-secure-delete

清除置換空間使用痕跡的機會不大,但應該會比清除RAM的機會還大一點點。在使用sswap前,需先知道自己Linux系統上的置換空間在哪個裝置路徑下。可以使用以下指令來查看:

cat /proc/swaps

linux-secure-delete

如上圖,筆者的置換空間只有一個,在/swapfile,並非是一個硬碟分割區,也就無法使用sswap來清除了。但如果置換空間是某個硬碟分割區(以/dev/sda5為例),可以執行如下的指令來清除該分割區的資料:

sudo sswap /dev/sda5