当文件被删除时,其内容可能仍留在文件系统中,除非明确用其他内容覆盖。该wipe
命令可以安全地删除文件,但似乎不允许删除任何文件未使用的可用磁盘空间。
我应该用什么来实现这个目标?
答案1
警告:现代磁盘/SSD 硬件和现代文件系统可能会将数据隐藏在无法删除的地方,因此此过程可能仍会将数据留在磁盘上。擦除数据的唯一安全方法是 ATA 安全擦除命令(如果正确实施)或物理销毁。另请参阅如何可靠地删除硬盘上的所有信息?
您可以使用一套名为 secure-delete 的工具。
sudo apt-get install secure-delete
它有四个工具:
srm
- 安全地删除现有文件
smem
- 安全地从 RAM 中删除文件的痕迹
sfill
- 擦除硬盘上所有标记为空的空间
sswap
- 擦除交换空间中的所有数据。
来自手册页srm
srm 旨在以安全的方式删除介质上的数据,这样窃贼、执法人员或其他威胁就无法恢复。擦除算法基于彼得·古特曼 (Peter Gutmann) 在第六届 Usenix 安全研讨会上发表的论文“从磁性和固态存储器中安全删除数据”,彼得·古特曼是领先的民用密码学家之一。
srm的安全数据删除流程如下:
- 1 次通过 0xff
- 5 次随机传递。
/dev/urandom
用于安全 RNG(如果可用)。- 27 次传球具有由 Peter Gutmann 定义的特殊值。
- 5 次随机传递。
/dev/urandom
用于安全 RNG(如果可用)。- 将文件重命名为随机值
- 截断文件
作为额外的安全措施,文件以 O_SYNC 模式打开,每次传递后
fsync()
都会进行一次调用。srm
为了提高速度,写入 32k 个块,填充磁盘缓存的缓冲区以强制它们刷新并覆盖属于该文件的旧数据。
答案2
如果您只需要一次传递并且只想用零替换所有内容,那么最快的方法是:
cat /dev/zero > zero.file
sync
rm zero.file
(从您要擦除的文件系统上的目录运行)
(该sync
命令是一种确保所有数据都写入磁盘的偏执措施 - 智能缓存管理器可能会计算出当文件取消链接时它可以取消对任何待处理块的写入)
在此操作期间,文件系统上可能会有一段时间完全没有可用空间,如果生成的文件很大且碎片化,则可能需要数十秒的时间才能删除,因此需要一段时间。要减少可用空间完全为零的时间:
dd if=/dev/zero of=zero.small.file bs=1024 count=102400
cat /dev/zero > zero.file
sync
rm zero.small.file
rm zero.file
这应该足以阻止某人读取旧文件内容,而无需进行昂贵的取证操作。对于稍微安全但速度较慢的变体,请用 替换/dev/zero
。/dev/urandom
对于更谨慎的人,请使用 运行多个步骤/dev/urandom
,但如果您需要那么多努力,那么shred
coreutils 包中的实用程序才是最佳选择:
dd if=/dev/zero of=zero.small.file bs=1024 count=102400
shred -z zero.small.file
cat /dev/zero > zero.file
sync
rm zero.small.file
shred -z zero.file
sync
rm zero.file
请注意,在上面的例子中,小文件在创建大文件之前被粉碎,因此可以在大文件完成后立即删除小文件,而不必等待大文件被粉碎,从而导致文件系统在此期间没有可用空间。粉碎过程需要长的花费时间处理一个大文件,除非你想向美国国家安全局隐瞒某些事情,否则在我看来这没有必要。
以上所有内容都适用于任何文件系统。
文件大小限制:
正如 DanMoulding 在下面的评论中指出的那样,这可能会对某些文件系统上的文件大小限制造成问题。
对于 FAT32 来说确实由于 2GiB 文件限制,这是一个值得关注的问题:如今大多数卷都大于此大小(如果我没记错的话,8TiB 是卷大小限制)。您可以通过管道传输大cat /dev/zero
输出以split
生成多个较小的文件并相应地调整粉碎和删除阶段来解决此问题。
对于 ext2/3/4 来说,这个问题就没那么严重了:对于默认/常见的 4K 块,文件大小限制为 2TiB,因此你必须有一个巨大的卷,这是一个问题(这些条件下的最大卷大小为 16TiB)。
使用(仍处于实验阶段的)btrfs,最大文件和卷大小都达到了惊人的 16EiB。
在 NTFS 下,最大文件长度在某些情况下甚至大于最大卷长度。
更多信息的起点:
http://en.wikipedia.org/wiki/Ext3#Size_limits
http://en.wikipedia.org/wiki/Btrfs
http://en.wikipedia.org/wiki/Ntfs#Scalability
虚拟设备
正如最近的评论中提到的那样,虚拟设备还有一些额外的考虑因素:
对于稀疏分配的虚拟磁盘,其他方法(例如使用的方法)
zerofree
会更快(尽管不像cat
并且dd
这不是您可以依赖于几乎任何类 unix 操作系统的标准工具)。请注意,将稀疏虚拟设备上的块清零可能不会擦除底层身体的设备,事实上我甚至可以说这不太可能——虚拟磁盘管理器只会将块设置为不再使用,以便以后可以将其分配给其他设备。
即使对于固定大小的虚拟设备,您也可能无法控制设备的物理位置,因此它可能会随时在当前位置移动或移动到一组新的物理磁盘上,并且您最多可以擦除当前位置,而不是块过去可能驻留的任何先前位置。
对于虚拟设备上的上述问题:除非您控制主机并且可以在擦除虚拟机中的磁盘或移动虚拟设备之后安全地擦除其未分配的空间,否则事后您对此无能为力。唯一的办法是使用全盘加密从头开始因此首先不会将任何未加密的内容写入物理介质。当然,可能仍需要清除虚拟机内的可用空间。还要注意,FDE 会使稀疏虚拟设备变得没那么有用,因为虚拟化层无法真正看到哪些块未使用。如果操作系统的文件系统层向虚拟设备发送修剪命令(就像它是 SSD 一样),并且虚拟控制器解释这些命令,那么这可能会解决这个问题,但我不知道这种情况实际发生的任何情况,对此进行更广泛的讨论是其他地方的问题(我们已经快要偏离原始问题的主题了,所以如果这引起了你的兴趣,可能需要进行一些实验和/或提出后续问题)。
答案3
警告
我对文件的数量感到震惊照相记录即使擦除后,也可以从我的磁盘中检索。
究竟是只用 0x00 填充“自由空间”一次更安全,还是用不同的神秘标准填充 38 次更安全,这更多的是一个学术讨论。1996 年关于碎纸的开创性论文的作者为自己写了一篇结语认为这对于现代硬件来说已经过时且没有必要。目前还没有记录数据被物理替换为零并在之后恢复的案例。
真正的脆弱环节在这个过程中文件系统一些文件系统会保留一些空间供特殊用途,这些空间不会作为“可用空间”提供。但你的数据可能在那里。其中包括照片、个人纯文本电子邮件等等。我刚刚在 Google 上搜索了 reserved+space+ext4,发现我的home
分区有 5% 被保留了。我猜这就是photorec
我找到这么多东西的地方。结论:粉碎方法并不是最重要的,即使是多遍方法仍然会保留数据。
您可以# tune2fs -m 0 /dev/sdn0
在挂载之前尝试一下。(如果重启后这将成为根分区,请确保在卸载后运行-m 5
或)。-m 1
但不管怎样,可能还留有一些空间。
唯一真正安全的方法是擦除整个分区,重新创建文件系统,然后从备份中恢复文件。
快速方法(推荐)
从要擦除的文件系统上的目录运行:
dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file
注意:小文件的目的是为了减少可用空间完全为零的时间;同步的目的是确保数据确实被写入。
对于大多数人来说这应该已经足够了。
慢行(偏执)
目前还没有记录显示上述清理后数据能够恢复。即使有可能,恢复过程也会花费高昂且耗费资源。
然而,如果你有理由认为秘密机构会花费大量资源来恢复你的文件,那么这应该足够了:
dd if=/dev/urandom of=random.small.file bs=1024 count=102400
dd if=/dev/urandom of=random.file bs=1024
sync ; sleep 60 ; sync
rm random.small.file
rm random.file
这需要更长的时间。
警告。如果您选择了偏执的方式,在此之后您仍然会想要进行快速擦除,而这并不是偏执。纯随机数据的存在很容易且成本低廉地被检测到,并且会让人怀疑它实际上是加密数据。您可能会因不透露解密密钥而死于酷刑。
非常慢(疯狂偏执)
甚至 1996 年有关粉碎的开创性论文的作者也在后记中写道,这对于现代硬件来说已经过时且没有必要。
但是如果你有很多空闲时间,并且不介意浪费磁盘进行大量覆盖写入,那么可以这样做:
dd if=/dev/zero of=zero.small.file bs=1024 count=102400
sync ; sleep 60 ; sync
shred -z zero.small.file
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
shred -z zero.file
sync ; sleep 60 ; sync
rm zero.file
注意:这基本上相当于使用安全删除工具。
在编辑之前,这篇文章是 David Spillett 的重写版。“cat”命令会产生错误消息,但我无法对其他人的文章发表评论。
答案4
您可以使用安全删除包擦除您的可用空间。
在该软件包中,您可以找到sfill
一个工具,该工具旨在以安全的方式删除介质上可用磁盘空间上的数据,这些数据无法被小偷、执法人员或其他威胁恢复。
在Linux(Ubuntu)中安装安全删除包,请通过以下命令安装:
$ sudo apt-get install secure-delete
然后擦除您的数据没有可用空间,请尝试以下命令:
sfill -f -v -ll /YOUR_MOUNTPOINT/OR_DIRECTORY
其中 /YOUR_MOUNTPOINT/OR_DIRECTORY 是您的挂载点 ( df -h
, mount
) 或要擦除可用空间的目录。
阅读手册http://manpages.ubuntu.com/manpages/hardy/man1/sfill.1.html