如何以安全方式删除文件?


205

有没有办法确保无法恢复已删除的文件?

如您所知,通过按shift键或使用垃圾桶删除文件并不意味着该文件永远消失了。它位于计算机中的某个位置。

在日常生活中,执法人员或小偷使用恢复程序来泄露我们的私人数据或其他内容。

他们可以恢复驻留在硬盘,RAM甚至USB中的所有数据。

为了保护我们免受这些人的侵害,该怎么办?一个应该使用哪个程序?

注意:我不希望像先使用恢复程序然后使用碎纸擦除该文件这样的答案。我只想用一个程序来删除计算机上所有未使用/已删除的文件。


不幸的是,赏金是自动授予的,即使对于固态硬盘的时代似乎没有任何答案。除非进行了驱动器制造商特定的API调用,否则SSD字节不会真正被覆盖(除非您进行整个驱动器过程)。请参阅答案之一中引用的文章。
马特

Answers:


191

切碎

已经从Ubuntu的核心实用程序中安装了此命令行工具,以使用Gutman方法安全地擦除和覆盖单个文件。

快速切碎

shred -vzn 0 /dev/sdc1

通过0在一次迭代中用s 覆盖所有内容来擦除整个分区。如果没有法律问题,需要另一种方法,这样做是最有可能安全地安全地删除您的私人数据在计算机科学,2008年,克雷格·赖特讲义5352,243-257

安全切碎

shred -vzn 3 /dev/sdc1

使用带有随机数的3次迭代擦除整个分区。另外(option -z)会写入零以隐藏最后的切碎过程。这将比快速方法花费4倍的时间。

注意:通过切碎分区,我们将使用0或随机数覆盖此分区。因此,它可以永久有效地删除该分区上的所有内容,包括文件系统缓存。这也可以用来删除已删除文件的多余部分。我们要保留的文件必须在粉碎之前备份。


擦拭 安装抹布

此命令行实用程序提供了更多选项,以及删除单个文件之外的目录的可能性。

wipe filename
wipe -r dirname

有关日记文件系统和SSD的其他说明:

  • 请阅读链接的联机帮助页中有关删除单个文件时由于日记文件系统中仍可恢复的备份而引起的安全性问题的说明。即使使用日记文件系统,覆盖整个分区而不是单个文件也可以有效擦除所有数据。

  • 擦除固态磁盘(SSD)上的数据只能通过多次迭代覆盖整个驱动器(不仅是单个分区)来完成。某些SSD可能具有删除数据的内置功能,但这可能并不总是有效的(请参阅注释中的链接)。目前,对于安全删除所有可用SSD上的所有数据残留所需的擦除过程或擦除迭代次数,没有普遍的建议。

可以在Nautilus和Thunar的上下文菜单中添加这些选项。

  • 在Thunar中,打开“编辑”,然后打开“配置自定义操作”

加(加号)

名称“切碎文件”

描述你喜欢的

动作“切细-u%f”

同样适用于wipe

  • 对于鹦鹉螺,请参阅此问题和相关内容

选择“外观条件”,然后选择“其他文件”


6
可能还值得注意的是,如果您使用的是固态驱动器,它还可以充当简单的日志结构文件系统,并且可能不会覆盖数据。
詹姆斯·亨斯特里奇

3
@shred,“大约需要20分钟才能擦除1.44MB”。关于一生要擦除640 GB :)。对于擦除,“ ...我们不能保证擦除会真正擦除数据,或者擦除的数据无法通过高级方式恢复。” 换句话说,擦除没有真正/完全的内存存储能力。

2
请注意,虽然您也可以对单个文件使用碎片,但是如果您使用现代的日记文件系统,则不能保证碎片将导致不可恢复的删除。您必须删除整个分区。我认为美国政府的标准是随机数据通过7次。
Scott Severance

4
关于SSD的一种评论:覆盖整个驱动器并没有真正的帮助。简而言之:您无法可靠地从闪存中删除数据。始终存储加密的机密文件。(请参阅Wei等人的文章,可靠地从基于闪存的固态驱动器中删除数据: usenix.org/events/fast11/tech/full_papers/Wei.pdf
freddyb 2011年

2
@freddyb:我知道目前尚不清楚如何安全地从SSD擦除数据这一事实。加密总是更好-包括传统驱动器!但是,问题在于如何安全地擦除数据(暗示它们以前可能没有被加密)。
塔卡特2011年

39

您没有一个可以运行的命令,可以轻松地为您清除所有已删除的文件。但是,您可以采取许多措施来减少将来遭受此类攻击的可能性。

就像其他人所说的那样,使用shred或srm之类的工具可让您通过实际覆盖特定文件来删除它,而不仅仅是从文件系统中删除它。如果您感觉粗体,可以rmshred或替换命令,srm以安全地删除以后的文件。这意味着每当您(或另一个程序)尝试使用删除某些内容时rm,都会运行secure delete命令。

但是,如果您使用的是固态磁盘,甚至是某些较新的机械磁盘,则切碎和其他基于覆盖的方法可能无效,因为磁盘可能实际上并未写入您认为要写入的位置()。


全盘加密

更为方便的选择是全磁盘加密。如果使用备用安装程序,Ubuntu可以自动为您设置一个完全加密的磁盘,但是您也可以自己定制和配置设置。一旦安装,加密对您几乎是不可见的:在计算机启动时,输入密码短语(确保选择一个不错的,较长的密码)后,一切看起来和感觉都与普通的Ubuntu相似。

您还可以使用Ubuntu的磁盘工具对外部介质(如USB驱动器)进行加密。设置加密的外部磁盘就像格式化磁盘时选中“加密底层文件系统”框一样简单。您甚至可以将密码短语存储在(加密的)密钥环上,这样就不必在每次将该磁盘插入计算机时都输入该短语。

如果您的整个磁盘以及所有可移动媒体都已加密,则无需担心太多。小偷或警察需要刷卡你的电脑,而它的上(或将其关闭,如果他们的一两分钟内非常好,以访问您的数据)。如果在不使用计算机时使其休眠(而不是挂起),则应该很安全。

如果您需要完全销毁所有数据,则无需对整个磁盘进行Gutmann擦除。只需覆盖磁盘的最开始,即可破坏加密卷的标头。与常规文件系统不同,这实际上将使其无法恢复数据。


那么,如何从当前设置转到安全加密的磁盘?改造当前安装的操作系统以使用加密磁盘是一个很大的挑战。最简单的方法是备份所有数据和设置,然后使用加密磁盘重新安装。备份时,请确保将数据备份到加密的外部驱动器,但不要将密码短语保存在密钥环中。

备份完所有内容之后,您可能需要大刀阔斧地擦拭硬盘驱动器,以确保将来无法恢复任何现有数据。如果您使用的是SSD,则该过程更具挑战性,因此,根据要在该过程中投入多少资金,可能有必要破坏当前的磁盘(具有挑战性的主张)并从新磁盘开始。

重新安装操作系统时,如果尚未主动擦除磁盘,则应确保完全填充新的加密分区,该分区将覆盖所有旧数据。还原备份后,您可能希望积极擦除备份磁盘的开头,以破坏加密头,以便无法再次对其进行恢复。


您能解释一下“仅覆盖磁盘的开头以破坏标题...”这一部分吗?我一直只是在加密驱动器发生故障时丢弃或返回加密驱动器,假设没有人可以恢复数据。这是一个错误的假设吗?它具有64个字符的随机十六进制密码,因此没有人破解它们。
汤姆·布鲁斯曼

1
您链接的幻灯片(pdf)得出的结论是,可靠地切碎SSD的唯一方法是从字面上(物理上)切碎它。
泰特斯(Titus)

19

更新:如果您尚未删除想要不可恢复的文件,请使用已接受的答案。但是,如果您已经删除了文件,那么这是我所知道的下一个最佳方法。

如果我没看错,您想删除所有以前删除的文件。这是一种简单的方法:

$ dd if=/dev/zero of=/path/to/mounted/partition/tmp_file bs=1M count=999999999999

让它运行直到它抱怨直到它得到磁盘写入错误[空间不足]。然后删除文件!这样做只是用000s填充了空磁盘,因此所有以前的文件都将被覆盖。确保立即删除文件,否则将没有任何磁盘。如果您真的很偏执,您可能需要这样做几次。或者,如果您想随机写入磁盘,建议使用替换/dev/zero/dev/urandom

但是,这将花费更长的时间,因此我将其运行一整夜。另外,如果您要使用进度表,请执行以下操作:

$ free=$( df {PARTITION OR MOUNTPOINT}  |awk '{print $3}'|tail -1 )
$ dd if=/dev/zero bs=1M count=999999999999 | pv -s "$free" > /path/to/mounted/partition/tmp_file

首先,使用du,awk和tail获取可用的磁盘空间,然后使用dd获取/ dev / zero,将pv其表示“管道查看器”的管道传输,将所有内容重定向到,tmp_file 再次删除该文件。 $ rm tmp_file

无论如何,希望有人觉得这有用!:)


1
是否有命令行实用程序为您执行此操作?再说了,overwrite_empty_space /dev/sdb1
landroni 2014年

@landroni,我不知道这样的实用程序。但是,您可以轻松地将其放入BASH脚本中。[如果您这样做,我建议您不要使用“ / dev / sdb1”,而是给它一个指向大文件的路径。无论将其安装在何处,都将清洁该磁盘。]这需要一些工作,因此在这里我将不做详细介绍。我相信您可以通过搜索找到信息。
马特

如果您确实要确保无法恢复该文件,为什么不将磁盘中的tmp_file切碎?
SPRBRN

13

首先,在终端上使用rm删除文件,或者在nautilus上使用shift-delete删除文件。更重要的是,使用srm,从安全,删除工具包。

您可以安装安全删除工具,如下所示:

apt-get install secure-delete

其次,使用sfill擦除磁盘上未使用的空间:

sudo sfill -f <directory>

这将花费一些时间,因为它正在使用加密技术来填充磁盘。

警告:这将遍历整个文件系统,并且您是root用户。小心使用!

这将创建一个文件,该文件将清除所有先前存在的数据。该文件将在中创建<directory>


4
该程序花费太多时间。对于80 GB,我已经等待了大约18个小时。而且,没有工具可以显示进度。

我忘了补充;仅用/000.0文件填充磁盘需要18个小时

2
但它是安全的,您可以删除文件或目录。
RusAlex

6
我怀疑这是否真的安全。在现代文件系统(ext2 / 3/4,ntfs等)上,有一种日志可帮助防止意外数据丢失。因此,即使擦除可用空间,也不能保证从日志中删除该文件。另外,我了解到某些文件系统的工作水平足够高,因此很难保证您实际上覆盖了写入的物理磁盘扇区。AFAIK,安全擦除某物的唯一方法是擦除整个分区及其上的所有文件。
Scott Severance

1
即使在日志文件系统中,也应该有可能覆盖可用的群集和空闲空间。尽管对于松弛空间,您可能希望在使用新文件时将其清除。无论如何,您必须在启动时刷新日志,并可能在此期间暂停正常的文件系统操作。
rsaxvc 2015年

10

一个GUI程序BleachBit(也在源代码中)。BleachBit Sourceforge页面上的更新版本(deb文件)。

除了简单地删除文件之外,它还包括一些高级功能,例如切碎文件以防止恢复,擦除可用磁盘空间以隐藏其他应用程序删除的文件的痕迹。

“ BleachBit可以快速释放磁盘空间,并不懈地保护您的隐私。释放高速缓存,删除Cookie,清除Internet历史记录,粉碎临时文件,删除日志并丢弃您不知道的垃圾。它专为Linux和Windows系统而设计,可清除干净90个应用程序,包括Firefox(希望使其速度更快),Internet Explorer,Adobe Flash,Google Chrome,Opera,Safari等。” (来自http://bleachbit.sourceforge.net/

BleachBit具有几种高级清洁器:

  • 清除内存并在Linux上交换
  • 在Linux上删除损坏的快捷方式
  • 删除Firefox URL历史记录而不删除整个文件-可选的切碎
  • 查找广泛使用的垃圾文件,例如Thumbs.db和.DS_Store文件。
  • 删除OpenOffice.org最新文档列表,而不删除整个Common.xcu文件
  • 覆盖可用磁盘空间以隐藏以前的文件
  • Vacuum Firefox,Google Chrome,Liferea,Thunderbird和Yum数据库:在不删除数据的情况下缩小文件以节省空间并提高速度
  • 通过删除整个文件,从.ini和JSON配置文件中删除私人信息

有关如何使用Bleachbit删除安全的特定文件和文件夹的详细信息,请参见此答案


7

如果您想要一个不受病态困扰的人无法阻止的解决方案,则应考虑以下几种组合(受货币资源的限制):

  • 消磁-磁擦硬盘
  • 物理禁用硬盘驱动器-即工业打孔
  • 酸浴<-您不能从一堆粘糊中弄碎东西。

这些解决方案的成本和精巧程度大相径庭。一些:


3
答案很有趣,但是我认为提问者希望在删除后能够继续使用他的硬盘。
Christopher Kyle Horton

3
哪里有办法:为什么不发射原子弹?

2
OP希望销毁数据-而不是他/她的国家!:P
John Rix

2
我发现15磅的大锤非常有效...而且可以治疗。
user535733 '17

Thermite是彻底消除的另一种替代方法(德语文章,但包含该过程的精美图片)。
David Foerster '18

3

我会说解决方案是这里给出的几个答案的组合。对于仍在使用中的已删除文件和分区,我同意Matt的观点。

然后,为了将来,我建议开始使用安全删除工具,而不是简单的“ rm”。

最后,当可以重新格式化分区时,应考虑对分区进行加密的选项。也许使用像Truecrypt这样的方法提供合理的可否认性


3

适用于SSD和其他闪存存储介质

SSD和许多其他闪存存储介质使用一种称为“损耗平衡”的技术,该技术会根据未使用的存储单元块之前的写入周期数对其进行重新分配,以延长驱动器的使用寿命。因此,覆盖块范围不能像硬盘驱动器那样有效地(甚至有效)擦除存储内容。另一方面,闪存可以更快,更有效地安全擦除块,块范围或整个驱动器。

擦除整个驱动器

您应该使用驱动器的安全擦除功能。

  1. 确保驱动器安全性支持安全擦除1且未“冻结”。如果是这样,则可能有助于挂起和恢复计算机。

    $ sudo hdparm -I /dev/sdX | grep frozen
           not     frozen 
    

    (已过滤的)命令输出表示此驱动器支持安全擦除,“未冻结”,您可以继续。

  2. 设置用户密码Eins在此示例中)。该密码也被清除,确切的选择无关紧要。

    sudo hdparm --user-master u --security-set-pass Eins /dev/sdX
    
  3. 发出ATA安全擦除命令。

    sudo hdparm --user-master u --security-erase Eins /dev/sdX
    

请参阅Linux内核Wiki中ATA安全擦除文章,以获取包括故障排除在内的完整说明。

来源

如果步骤1中的命令输出为空,则驱动器不支持安全擦除,但可能仍支持以下部分要求的TRIM命令。

擦除驱动器分区

2可以安全地擦除块设备,如果驱动器支持1blkdiscard(8)

sudo blkdiscard --secure /dev/sdXN

其中/dev/sdXN是指向要擦除的驱动器或分区的块设备节点的路径。


1如果驱动器位于具有USB或FireWire连接的外壳内,则转换芯片组可能会阻止对某些可选功能(如安全擦除和TRIM)的支持,即使随附的驱动器也支持该功能。

2自Ubuntu Xenial Xerus(16.04)起默认可用并已安装。


1

我将truecrypt文件映像用于此类重要数据。我不方便,免费,跨平台,不需要完整的磁盘,也不需要使用任何其他软件来“真正删除”文件。

只要确保您具有强密码,并备份图像文件即可。我将备份保存在云中。


2
警告:使用TrueCrypt并不安全,因为它可能包含未解决的安全问题。Microsoft终止对Windows XP的支持后,TrueCrypt的开发已于5/2014结束。
KrIsHnA '16

2
有多种TrueCrypt衍生产品仍在维护中,例如。VeraCrypt。顺便说一句,在微软停止XP和停止TrueCrypt开发之间没有任何联系-据我所知,围绕后者的情况仍然是个谜。
John Rix

1
  1. 第一个选项是切碎。关于碎纸的先前答案缺少一些必要的细节。如果在分区上运行shred(如的示例sdc5),则将无法克服文件系统的缓存,快照和日记等功能,并且数据将保留,其中很多是潜在的。

    为使切碎有效,尤其是在现代SSD上,切碎必须在设备而非分区上运行。这将是/dev/sdc...末尾没有数字(分区号)。

    如果您要清洁的驱动器是计算机的主要设备,则需要通过活动USB执行此操作。在这种情况下,最好在创建实时USB时向其添加持久性,以便您可以下载一些额外的工具来正确执行此工作。

    运行命令:sudo shred -vfxz /dev/sdcsda任何设备名称。如果不确定名称,请打开“磁盘”或“ GParted”以标识您的设备,或lsblk在终端中运行Command- 并在此处标识设备的名称。

    在命令上添加字母fx很重要,因为f =强制权限和x =文件的确切大小。没有这些,您可能会丢失需要读取或写入权限的数据,或者将文件四舍五入到块大小时会丢失数据。

    您可以通过添加-n(所需的数量)来添加所需数量的写入次数。例:sudo shred -vfxz -n 5 /dev/sdc

    这是擦除驱动器的第一个呼叫端口。运行灌木,安全删除和nwipe等类似工具可能会有所帮助。它们都以非常相似的命令以及略有不同的方法和模式以相同的方式工作。转到Linux手册页或Google,以快速熟悉如何使用这些命令。您不太可能需要超过标准的4条切碎通行证,但如果重要的话,您不妨多加努力,因为它可能会有所帮助。

  2. 您的RAM上可能有数据。安装安全删除后,为sdmem运行命令。这将擦除您的RAM内存。但是,您曾经用RAM填充的第一个数据,再加上任何长时间保留在RAM中的数据,都可能留下痕迹。

    当购买新的RAM(或HD / SSD)时,最好将驱动器填满几次。您可以使用shred,但在这里dd可能更好。命令:

    sudo dd if=/dev/urandom of=/dev/ # (insert your device partion name)
    

    如果要提高安全性,最好使用RAM在使用敏感数据之前重复此过程,并在之后尽快从RAM中擦除敏感数据。这次留在原地的原因是它留下痕迹的能力。

    剩下要做的就是创建一个分区或安装下一个发行版。

  3. 加密 -人们经常将其描述为一种可靠的方法,但是如果您要继续使用硬盘或将其传递给其他人,则这不是一个有效的选择。关于法律麻烦,通常无法选择不对加密设备进行解锁,并且在许多地方可能被认为有罪或构成实际犯罪。它可能会阻止小偷等(仅窃取数据,大声笑)。

    还要注意,加密的主文件夹有很大的不同,它不能保护您的计算机免受物理检查,本质上是为了在线/系统安全,可以绕开它。

  4. 如果要丢弃设备,请先使用碎纸擦拭,然后使用包含特殊字符(例如*等)的长密码进行加密,以破坏密码的字母和数字,然后再次使用碎纸,但您只需指定驱动器的前10gig (取决于大小,但这是一个很大的安全数字)。示例:sudo shred -vfxzs10G /dev/sdc在这些情况下,这比切碎整个驱动器更快,更有效。

    然后可以确定的是,取出硬盘驱动器和RAM,RAM很容易卡住和破坏,SSD也是如此。您可以发挥创造力并在打破它们的同时释放那种偏执的能量。


3
欢迎来到Ask Ubuntu! :-) OP正在询问要粉碎文件而不是设备...
Fabby

1
糟糕!迫切需要karel进行编辑。谢谢
杰伊

@Fabby-OP询问是否要粉碎所有已删除的文件,而不仅仅是一个。在这种情况下,切碎设备是合适的。即切碎可用空间。
狂欢1998年

1
+1解决为何无法解决加密问题的问题
马特

0

您可以使用DD来安全擦除文件,祝您好运。请参阅此站点上的示例。

这是安全擦除文件的命令(调整bs=xx参数)

dd if=/dev/urandom of=/tmp/test/myfile.txt bs=27 count=1 conv=notrunc

其中bs=##是多少随机数据写入到在字节的文件(必须的文件的大小相匹配被覆盖,以字节为单位输入的文件大小作为看到ls -l命令)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.