安全删除 btrfs 文件系统上的文件

安全删除 btrfs 文件系统上的文件

有时,需要删除文件系统中的文件,并确保该文件确实消失了。例如,包含敏感密码的文件应该从磁盘上彻底擦除。

在典型的文件系统上发出简单命令rm会删除文件的索引节点(“指针”),但它不删除文件在物理磁盘中的内容 - 这些内容会保留在那里,直到文件系统需要可用空间时被覆盖。

在许多文件系统上,碎纸程序实现这种安全删除。然而,在 CoW 文件系统(例如 btrfs)上,这种方法没有用。该文件可能存在于卷快照上,这一事实加剧了该问题。

有没有办法安全删除一份文件在 btrfs 文件系统上?删除所有指针(在所有卷上)是否足够?用零填充可用空间

答案1

对于任何文件系统来说,安全删除都是一项艰巨的任务。除非文件系统非常特殊并保证周围没有该文件的其他副本,否则您需要清除设备上的所有可用空间。虽然您更有可能在写时复制文件系统上找到文件的许多位,但实际上更“静态”的文件系统并没有这种保证,因为许多文件都被编辑了,所以有来自以前版本的位。文件随处可见。

请注意,用零擦除与用随机字节擦除一样好,并且不需要多次擦除。用零擦除留下的残留数据可以在实验室条件下使用 1980 年代的硬盘技术部分恢复;这在今天不再适用。看为什么在硬盘驱动器上多次写入零(或随机数据)比只写入一次更好?

您可以通过加密磁盘上的所有内容来摆脱明文机密数据。设立一个加密文件系统该文件系统上的卷并将所有(机密)文件移至其中。然后覆盖文件系统所有未使用的空间。您可以通过用 填充文件系统来擦除大部分内容cat /dev/zero >zero。不完整的块中可能仍然留有一些信息(包含文件最后一块的块,后面跟着一些垃圾——可能是机密文件的剩余部分)。为了确保没有不完整的块,请将文件系统上的所有内容移动到 ecryptfs(ecryptfs 的文件使用整个块,至少在块为 4kB 的典型设置上)。确保将此应用到所有卷并删除包含纯文本机密数据的所有快照。

日记中可能还残留着一些信息。我不知道如何擦掉它。

在 SSD 上,由于块重新分配,可能会留下无法通过正常软件方式读取的数据,但可以通过破解固件或物理访问来恢复。您唯一的办法就是完全擦除 SSD。

答案2

嗯,btrfs 似乎击败了所有常用的粉碎方法......

  • 有一个名为的安装选项nodatacow,但似乎不会影响已经存在的文件。
  • 由于您的磁盘上已经有敏感文件,因此btrfs 常见问题解答进入也不会帮助你。
  • 然后是debugfs.它仅适用于 ext 文件系统,但有一个修补因为它可能有效。您可以使用它找出受影响的块地址,然后直接在 /dev/sdXY 上覆盖它们。但这非常危险并且可能不起作用(特别是如果文件有更多快照)
  • 编写一个 btrfs 补丁,允许修改(或粉碎)特定快照或整个文件
  • 最干净的尝试(对于真正敏感的数据)是:

    • 购买另一个磁盘(除非您有足够的可用空间来保存第一个磁盘上受影响分区的副本)
    • 设置全盘加密和文件系统
    • 将a盘的所有内容复制到b盘
    • 启动进入系统 b 并粉碎整个磁盘 a...

    这可能不是最便宜的方法,但考虑到当今的低存储成本以及其他选项可能带来的麻烦,它实际上可能是最便宜的方法(就工时而言)。

答案3

适用shred(1)于 Unix/Linux(应该在您的发行版的软件包中)。我就是 EFF推荐

相关内容