Answers:
警告:现代磁盘/ SSD硬件和现代文件系统可能会将数据保存在无法删除的地方,因此此过程可能仍将数据保留在磁盘上。擦除数据的唯一安全方法是ATA安全擦除命令(如果正确实施)或物理破坏。另请参阅如何可靠地擦除硬盘驱动器上的所有信息?
您可以使用一套称为安全删除的工具。
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块,填充磁盘高速缓存的缓冲区以强制其刷新和覆盖属于该文件的旧数据。
cat /dev/zero >nosuchfile; rm nosuchfile
。
如果您只需要单次通过并且只想将所有内容替换为零,则最快的方法是:
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
请注意,在上面,小文件在创建大文件之前已被切碎,因此可以在较大文件完成后立即将其删除,而不必等待其被切碎,从而使文件系统在可用时间上具有零可用空间。切碎过程要花很长时间才能处理一个大文件,除非您真的想从NSA中隐藏某些内容,否则IMO并不是真正必要的。
以上所有内容均适用于任何文件系统。
文件大小限制:
正如DanMoulding在下面的评论中指出的那样,这可能在某些文件系统上的文件大小限制方面存在问题。
对于FAT32,由于2GiB文件的限制,肯定会引起关注:如今大多数卷都超过了此限制(8TiB是卷大小限制IIRC)。您可以通过将较大的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-a的操作系统中使用该工具)。
请注意,将稀疏虚拟设备上的块置零可能不会擦除基础物理设备上的块,实际上,我什至会说这不太可能-虚拟磁盘管理器只会使该块不再使用所以以后可以分配给其他东西。
即使对于固定大小的虚拟设备,您也可能无法控制设备的物理位置,因此可以随时将其移动到当前位置或移动到一组新的物理磁盘上,并且可以擦除的最大位置是当前位置,而不是该区块过去可能已驻留的任何先前位置。
对于虚拟设备上的上述问题:除非您控制主机,然后在擦除VM中的磁盘或移动虚拟设备后可以安全擦除其未分配的空间,否则在此之后您将无能为力事实。唯一的办法是从一开始就使用全盘加密因此,首先,所有未加密的内容都不会写入物理介质。当然,在VM内仍然可能需要擦除自由空间。还要注意,FDE可以使稀疏虚拟设备的使用效率大大降低,因为虚拟化层无法真正看到哪些块未使用。如果操作系统的文件系统层将修整命令发送到虚拟设备(好像它是SSD),并且虚拟控制器解释了这些命令,则可以解决此问题,但是我不知道在任何情况下实际上会发生修整命令,并且范围更广。讨论在其他地方是个问题(我们已经快要脱离原来的问题了,因此,如果这激起了您的兴趣,那么可能需要进行一些实验和/或跟进的问题)。
secure-delete
工具来完成简单的调零:使用sfill -llz
可以将整个过程减少到只写“ 0”的一遍。
cat
它dd
几乎可以在任何类似unix-a的操作系统上使用,因为它们被视为标准工具,zerofree
除非明确添加,否则可能不会。
zerofree
当然会一定的工作,在手册页(几乎但不完全在我的例子中small.file jiggery pokery缓解)中提到的“整个文件系统暂时已满”的东西是一个真正的关心如果您正在当前活动的系统上执行此操作,并且zerofree
确实在特定实例中会更快,则针对以下情况进行了优化:稀疏分配的虚拟块设备。尽管出于安全性考虑,您不能依靠对虚拟设备进行任何擦除:在这种情况下,唯一的正确答案是从一开始就对整个设备进行加密。
即使擦拭后,photorec仍能从磁盘上检索到多少文件,我感到非常震惊。
在用0x00填充1次“自由空间”还是用不同的标准应用38次填充“自由空间”是否具有更高的安全性,这在学术上更具争议。1996年开创性的关于粉碎的论文的作者给自己写了一个结尾,说这对于现代硬件来说已经过时且没有必要了。没有记录在案的数据被物理替换为零并随后恢复的情况。
此过程中真正的脆弱链接是文件系统。某些文件系统保留特殊用途的空间,而不能将其作为“可用空间”使用。但是您的数据可能在那里。其中包括照片,个人纯文本电子邮件等。我刚刚搜索了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”命令产生一条错误消息,但是我无法在其他人的帖子上发表评论。
cat
在我的示例中,该命令在运行结束时应给出“无空间”错误。/dev/null
如果有问题,可以通过将stderr重定向到来隐藏它。为了获得有用的进度指示,我通常使用pv
而不是cat
或dd
用于此类事情。
...raises the suspicion that it is actually encrypted data. You may die under torture for not revealing the decryption key.
呵呵,这正是我的想法。我想那意味着我很偏执……
dd
以root身份运行比dd
没有root 身份可以访问更多文件系统?我想相信这是事实,但目前尚无理由。
至少在Ubuntu中有Zerofree实用程序:
http://manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html
zerofree — zero free blocks from ext2/3 file-systems
zerofree finds the unallocated, non-zeroed blocks in an ext2 or ext3
filesystem (e.g. /dev/hda1) and fills them with zeroes. This is useful
if the device on which this file-system resides is a disk image. In
this case, depending on the type of disk image, a secondary utility may
be able to reduce the size of the disk image after zerofree has been
run.
The usual way to achieve the same result (zeroing the unallocated
blocks) is to run dd (1) to create a file full of zeroes that takes up
the entire free space on the drive, and then delete this file. This has
many disadvantages, which zerofree alleviates:
· it is slow;
· it makes the disk image (temporarily) grow to its maximal extent;
· it (temporarily) uses all free space on the disk, so other
concurrent write actions may fail.
filesystem has to be unmounted or mounted read-only for zerofree to
work. It will exit with an error message if the filesystem is mounted
writable. To remount the root file-system readonly, you can first
switch to single user runlevel (telinit 1) then use mount -o remount,ro
filesystem.
还要检查一下有关zerofree的链接:保持文件系统映像稀疏 -来自作者-Ron Yorston(2012年8月9日)
这是使用GUI的方法。
当磁盘最终已满时,BleachBit相对于dd的进步(否则非常好)是,BleachBit创建小文件以擦除inode(其中包含文件名等元数据)。
我dd
用来分配一个或多个大文件来填充可用空间,然后使用安全的删除实用程序。
要使用dd分配文件,请尝试:
dd if=/dev/zero of=delete_me bs=1024 count=102400
这将生成一个名为delete_me
100 MB 的文件。(这里bs
的“块大小”设置为1k,count
是要分配的块数。)
然后shred
对这样创建的文件使用您喜欢的安全删除实用程序(我一直在使用)。
但是请注意:缓冲意味着即使您处理整个磁盘,也可能无法获得所有内容!
scrub
一次,它破坏了整个文件系统。幸运的是,我有一种先在测试文件系统上进行实验的感觉,而不是在我的真实数据上进行实验。
以最高速度擦拭驱动器。
如今,有关加密驱动器的典型说明将告诉您首先擦除驱动器。
下面的命令将用AES密文填充驱动器。
如果需要擦除主引导驱动器,请使用实时CD。
打开终端并提升您的权限:
sudo bash
为了安全起见,让我们列出系统上的所有驱动器:
cat /proc/partitions
注意:更换/dev/sd{x}
您要擦拭的设备。
警告:这不适合业余爱好者!您可以使系统无法启动!!!
sudo openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > /dev/sd{x}
我为之如此之快而惊讶。
您可以使用安全删除程序包擦除可用空间。
在该软件包中,您可以找到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上的手册
使用dd并将可用空间调零。这是一个神话,数据需要被多次重写(请问peter guntmann)和随机数据,而不是1到0意味着不自然的活动。那么最终结果是一个干净的驱动器,而花费的时间更少。此外,安全的删除程序无法保证它们甚至会覆盖现代文件系统上的真实文件(已日记)。帮自己一个忙,得到photorec,扫描驱动器以查看混乱,用1和零(可选)将其擦拭,以使其看起来未受影响。如果photorec仍然找到东西,请记住它正在扫描可用的所有内容,因此请与root用户再次仔细进行此操作。
请记住,cia / fbi / nsa没有可以读取您的磁性媒体位的实际状态的高档机器。那只是很久以前写的一篇论文。一个“假设”。您只需要擦拭1次即可。
使用scrub更容易:
scrub -X dump
这将dump
在当前位置创建一个文件夹并创建文件,直到磁盘已满。您可以使用-p
选项(nnsa|dod|bsi|old|fastold|gutmann
)选择一种模式。
安装scrub并不容易(请参见上的Ubuntu论坛),但是一旦安装完成,您手中就会有一个非常简单高效的工具。
scrub
一次,它破坏了整个文件系统。幸运的是,我有一种先在测试文件系统上进行实验的感觉,而不是在我的真实数据上进行实验。
scrub -X dump_dir
,它似乎运行良好。顺便说一句,安装在Ubuntu 14.04是非常简单的:apt-get install scrub
。
这是我使用的“ sdelete.sh”脚本。有关详细信息,请参见评论。
# Install the secure-delete package (sfill command).
# To see progress type in new terminal:
# watch -n 1 df -hm
# Assuming that there is one partition (/dev/sda1). sfill writes to /.
# The second pass writes in current directory and synchronizes data.
# If you have a swap partition then disable it by editing /etc/fstab
# and use "sswap" or similar to wipe it out.
# Some filesystems such as ext4 reserve 5% of disk space
# for special use, for example for the /home directory.
# In such case sfill won't wipe out that free space. You
# can remove that reserved space with the tune2fs command.
# See http://superuser.com/a/150757
# and https://www.google.com/search?q=reserved+space+ext4+sfill
sudo tune2fs -m 0 /dev/sda1
sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'
sudo sfill -vfllz /
# sfill with the -f (fast) option won't synchronize the data to
# make sure that all was actually written. Without the fast option
# it is way too slow, so doing another pass in some other way with
# synchronization. Unfortunately this does not seem to be perfect,
# as I've watched free space by running the "watch -n 1 df -hm"
# command and I could see that there was still some available space
# left (tested on a SSD drive).
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
sudo tune2fs -m 5 /dev/sda1
sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'
我有时会使用这种bash一线式:
while :; do cat /dev/zero > zero.$RANDOM; done
当开始显示磁盘已满时,只需按Ctrl+ C并删除创建的zero.*
文件。
它可以在任何系统上运行,无论文件大小有何限制。
忽略任何cat: write error: File too large
错误。
这不是答案!只是对那些希望使用pv
...的人的评论,所以不要打扰投票。
在Linux Mint 17.3上,您可以使用pv
(管道视图)获得编写进度。例如:
# Install pv (pipe view)
sudo apt-get install pv
# Write huge file of approximate size of /dev/sdb, using urandom data:
pv --timer --average-rate --progress --numeric --eta --interval 5 --size "$(blockdev --getsize64 /dev/sda )" /dev/urandom >rand.file
这样做的好处是您可以获得进度条,ETA和不断更新的数据速率。缺点是这是写在一行上的,当磁盘已满(返回错误)时,它会消失。发生这种情况是因为整个大小是近似值,因为在进行这种非常长的操作时(尤其是在OS卷上),OS可能会使用磁盘。
在一个很旧的HD,我得到的数据速率约13 MB / s的使用/dev/urandom
,以及约70 MB /秒,用时/dev/zero
。当使用raw dd
或cat
not 时,这可能会进一步改善pv
。
一旦文件脱离了文件系统的记录,硬盘上剩余的数据就毫无意义地由1和0组成。如果您要用另一个无意义的序列替换该无意义的序列,我可以建议一些用于安全擦除驱动器的商业产品,例如arconis。