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

224 security

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

如您所知,按 shift-del 或使用垃圾箱删除文件并不意味着该文件永远消失了。它驻留在计算机中的某处。

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

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

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

注意:我不想要像首先使用恢复程序然后用 shred 擦除该文件这样的答案。只需一个程序,我就想擦除计算机上所有未使用/已删除的文件。

Tak*_*kat 211

撕碎

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

快速粉碎

shred -vzn 0 /dev/sdc1
Run Code Online (Sandbox Code Playgroud)

通过0在一次迭代中用s覆盖所有内容来擦除整个分区。如果没有法律方面需要其他程序,那么这样做很可能安全地删除您的私人数据。
来自Craig Wright 计算机科学讲义,2008, 5352 , 243-257

安全粉碎

shred -vzn 3 /dev/sdc1
Run Code Online (Sandbox Code Playgroud)

使用随机数进行 3 次迭代擦除整个分区。此外(选项-z)这会在最后写入零以隐藏粉碎过程。这将比快速方法长 4 倍。

注意:通过粉碎一个分区,我们将用0或 随机数覆盖该分区。因此,它会永久删除该分区上的所有内容,包括文件系统缓存。这也可用于删除已删除文件的不需要的残留物。我们要保留的文件必须在粉碎之前进行备份。


擦拭

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

wipe filename
wipe -r dirname
Run Code Online (Sandbox Code Playgroud)

关于日志文件系统和 SSD 的附加说明:

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

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

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

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

添加(加号)

命名“粉碎文件”

描述任何你喜欢的

操作“粉碎 -u %f”

对于wipe.

选择“外观条件”并选择“其他文件”

  • 可能还值得注意的是,如果您使用的是固态驱动器,它也可以作为一个简单的日志结构化文件系统,并且可能不会覆盖数据。 (6认同)
  • 关于 SSD 的一条评论:覆盖 **整个** 驱动器不会真正有帮助。简而言之:您无法可靠地从闪存中删除数据。始终以加密方式存储机密文件。(参见 Wei 等人,从基于闪存的固态驱动器中可靠地擦除数据:http://www.usenix.org/events/fast11/tech/full_papers/Wei.pdf) (4认同)
  • @shred,“擦除 1.44MB 大约需要 20 分钟”。大约一生要擦除 640 GB :) 。对于擦除,“......我们不能保证擦除会真正擦除数据,或者擦除的数据无法通过高级方法恢复。” 换句话说,擦除对内存没有真正的/全功率。 (3认同)
  • 请注意,虽然您也可以对单个文件使用 shred,但如果您使用现代日志文件系统,则无法保证 shred 会导致不可恢复的删除。你必须吹掉整个分区。我认为美国政府的标准是随机数据 7 次通过。 (2认同)
  • @freddyb:我知道目前尚不清楚如何从 SSD 安全擦除数据。加密总是更好 - 这也包括传统驱动器!然而,问题是如何安全地**擦除**数据(暗示它们之前可能未加密)。 (2认同)

fla*_*ark 42

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

正如其他人所说,使用 shred 或srm 之类的工具可以让您通过实际覆盖来删除特定文件,而不仅仅是将其从文件系统中删除。如果您觉得大胆,可以将rm命令替换为shredsrm以安全地删除文件。这意味着每当您(或其他程序)尝试使用 删除某些内容时rm,安全删除命令将改为运行。

但是,如果您使用的是固态磁盘,甚至是一些较新的机械磁盘,碎纸和其他基于覆盖的方法可能无效,因为磁盘实际上可能不会写入您认为写入的位置(来源)。


全盘加密

更方便的选择是全盘加密。如果您使用备用安装程序,Ubuntu 可以自动为您设置一个完全加密的磁盘,但您也可以自己自定义和配置设置。一旦安装,加密对你来说几乎是不可见的:当你输入密码后(一定要选择一个好的、长的),当计算机启动时,一切看起来和感觉都和普通的 Ubuntu 一样。

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

如果您的整个磁盘 - 以及所有可移动媒体 - 都已加密,则无需担心。小偷或警察需要在您的计算机打开时刷卡(或者在关闭计算机后的一两分钟内,如果他们非常好)才能访问您的数据。如果您在不使用计算机时休眠(而不是挂起)计算机,那么您应该非常安全。

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


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

备份完所有内容后,您可能需要积极擦除硬盘驱动器,以确保将来无法恢复现有数据。如果您使用的是 SSD,则该过程更具挑战性,因此取决于您想在该过程中投资多少,可能值得销毁您当前的磁盘(一个具有挑战性的提议)并从新磁盘开始。

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


Mat*_*att 23

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

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

$ dd if=/dev/zero of=/path/to/mounted/partition/tmp_file bs=1M count=999999999999
Run Code Online (Sandbox Code Playgroud)

让它运行直到它抱怨直到它得到磁盘写入错误[空间不足]。然后删除文件!这样做只是用 000 填满你的空磁盘,所以你以前的所有文件都会被覆盖。确保立即删除该文件,否则您将没有任何磁盘可用。如果你真的很偏执,你可能想这样做几次。或者,如果您想将随机写入磁盘,我建议将其替换/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
Run Code Online (Sandbox Code Playgroud)

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

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


blu*_*ast 16

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

您可以像这样安装安全删除工具:

apt-get install secure-delete
Run Code Online (Sandbox Code Playgroud)

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

sudo sfill -f <directory>
Run Code Online (Sandbox Code Playgroud)

这将需要一些时间,因为它使用加密技术来填充磁盘。

警告:这会贯穿你的整个文件系统,而且你是 root。小心使用!

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

  • 我质疑这是否真的安全。在现代文件系统(ext2/3/4、ntfs 等)上,有一个日志可以帮助防止意外的数据丢失。因此,即使您擦除了可用空间,也不能保证该文件已从日志中删除。此外,我知道某些文件系统的工作级别足够高,以至于很难保证您实际上会覆盖写入的物理磁盘扇区。AFAIK,安全擦除某些内容的唯一方法是擦除整个分区及其上的所有文件。 (6认同)
  • 这个程序花费了太多时间。对于 80 GB,我已经等了大约 18 个小时。此外,没有显示进度的工具。 (4认同)
  • 但它是安全的,您可以删除文件或目录。 (2认同)

val*_*dao 11

一个用于此的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 安全删除特定文件和文件夹的详细信息,请参阅此答案


M. *_*its 7

如果您想要一个不会被病态痴迷者阻挠的解决方案,那么您应该考虑以下组合(受货币资源限制):

  • 消磁——磁力擦除硬盘
  • 物理禁用硬盘驱动器——即工业打孔器
  • 酸浴<--你不能从一堆粘液中得到碎片。

这些解决方案在成本和独创性方面差别很大。一些:

  • 有趣的答案,但我认为提问者希望在删除后能够继续使用他的硬盘。 (3认同)
  • 哪里有意志有办法:为什么不是原子弹? (3认同)
  • OP 想要破坏数据——而不是他/她的国家!:P (2认同)
  • 我发现 15 磅的大锤非常有效……而且有治疗作用。 (2认同)

Dav*_*ter 5

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

\n\n

SSD 和许多其他闪存存储介质使用一种名为 \xe2\x80\x9cwear levelling\xe2\x80\x9d 的技术,该技术根据先前写入周期的数量重新分配未使用的存储单元块,以延长驱动器\xe2\x80\x99s 的使用寿命时间。因此,覆盖块范围不能像硬盘驱动器那样安全(甚至有效)地擦除存储内容。另一方面,闪存存储允许更快、更高效地安全擦除块、块范围或整个驱动器。

\n\n

擦除整个驱动器

\n\n
\n

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

\n\n
    \n
  1. 确保驱动器安全性支持安全擦除1并且不是 \xe2\x80\x9cfrozen\xe2\x80\x9d。如果是,暂停和恢复计算机可能会有所帮助。

    \n\n
    $ sudo hdparm -I /dev/sdX | grep frozen\n       not     frozen \n
    Run Code Online (Sandbox Code Playgroud)\n\n

    (已过滤的)命令输出意味着该驱动器支持安全擦除,\xe2\x80\x9d 未冻结\xe2\x80\x9d,您可以继续。

  2. \n
  3. 设置用户密码Eins在本例中)。该密码也被清除,确切的选择并不重要。

    \n\n
    sudo hdparm --user-master u --security-set-pass Eins /dev/sdX\n
    Run Code Online (Sandbox Code Playgroud)
  4. \n
  5. 发出 ATA 安全擦除命令。

    \n\n
    sudo hdparm --user-master u --security-erase Eins /dev/sdX\n
    Run Code Online (Sandbox Code Playgroud)
  6. \n
\n\n

请参阅Linux 内核 wiki 中的ATA 安全擦除文章,了解包括故障排除在内的完整说明。

\n
\n\n

来源

\n\n

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

\n\n

擦除驱动器分区

\n\n

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

\n\n
sudo blkdiscard --secure /dev/sdXN\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
\n\n

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

\n\n

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

\n