如何確定目錄或文件實際上已被刪除?
我知道大多數文件在刪除時實際上並沒有從磁碟中刪除,並且可以在以後恢復。
如何確保我刪除的目錄實際上會從磁碟中刪除?有實用程序嗎?
我正在使用 Debian Linux。
在儲存之前加密數據。要擦除數據,請擦除密鑰。
如果您已經以明文形式寫入數據,那麼以簡單的方式擦除它已經太遲了。在不同的地方可能有多個數據副本:
- 如果文件被多次寫入(覆蓋或替換),則在文件系統上;
- 在文件系統上,如果它作為碎片整理的一部分被重新排列;
- 在日誌中(這可能會在最後一次寫入數據後很快消失);
- 在備份中;
- 在禁用扇區(尤其是在 SSD 上)。
為了擺脫文件系統上的數據副本,一種粗略的方法是填充可用空間(
cat /dev/zero >somefile
並等待它停止,因為文件系統已滿)。這將覆蓋所有完整塊。一小部分數據可能保留在不完整的塊中,部分被其他文件使用。這對於文件名尤其重要,文件名可能保留在儲存目錄內容的塊中。要擺脫一切,請備份所有文件,完全覆蓋包含文件系統的設備,然後恢復文件。
儲存介質可以將數據保留在不再使用的塊中。在硬碟上,這意味著已重新分配的壞塊;在磁碟開始磨損之前,這種情況非常罕見。在 SSD 上,由於磨損均衡,這很常見。在這兩種情況下,威脅都非常低,因為訪問這些數據需要一個有點複雜的攻擊者和一些中等昂貴的硬體和時間來浪費。如果您關心這些威脅,請加密您的數據,並且不要將您的密鑰留在身邊。
請注意,您可能會看到有關通過多次傳遞或使用隨機數據而不是零(“Gutmann 擦除”)來擦除數據的建議。算了吧:這僅適用於 1980 年代的硬碟(即便如此,重建數據並不便宜,而且重建相當不可靠)。用零覆蓋就足夠了;進行多次隨機傳遞是過時的建議或蛇油。請參閱為什麼在硬碟驅動器上多次寫入零(或隨機數據)比只執行一次好?
有一個非常流行的工具叫做
shred
. 在刪除之前,它將覆蓋每個文件 25 次。這可能是你在找什麼。shred 的使用非常簡單
$ shred secret_archive.tar.gz
但是請注意,在以下情況下,在現代系統上
shred
可能效率低下或無用:
- 您的程序會創建您不知道的臨時文件(就像許多 GUI 應用程序一樣)
- 您的 FS 是基於 Copy-On-Write 的(如 ZFS 或 Btrfs)
- 您的 FS 是基於日誌的(如 NILFS)
- 您的 FS 使用數據日誌(如 JFS、ReiserFS、XFS、ext3 或 ext4 在某些配置中)
- 您的 FS 使用壓縮
- 您的 FS 在不同位置分配新版本的文件
- 您有快照或備份
- 你在網路FS上
- 您正在使用帶有磨損均衡算法的 SSD
其他可能更安全的選擇是:
- 加密關鍵數據
- 覆蓋整個分區或儲存設備
- 設備的物理破壞