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

loo*_*bee 23 filesystems security data-recovery btrfs

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

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

在许多文件系统上,shred 程序可以实现这种安全删除。但是,在诸如 btrfs 之类的 CoW 文件系统上,这种方法是无用的。该文件可能存在于卷快照中这一事实加剧了该问题。

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

Gil*_*il' 9

安全删除在任何文件系统上都是一个艰难的提议。除非文件系统非常特殊并且保证没有其他文件副本存在,否则您需要清除设备上的所有可用空间。虽然您更有可能在写时复制文件系统上找到文件的许多位,但在实践中甚至更多的“静态”文件系统没有这种保证,因为许多文件被编辑,所以有一些来自以前版本的文件躺在身边。

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

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

日记中可能还剩下一些信息。不知道怎么刷

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

  • 零的缺点是它们可以被压缩或完全省略(SSD 可以 TRIM 而不是写入零,因为当您读取它们时,TRIM 的扇区会返回零)。这使得现在的零不安全。使用随机数据会强制文件系统和磁盘按原样实际写出数据。 (3认同)

mre*_*hub 6

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

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

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

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


von*_*and -7

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

  • 如果你仔细检查这个问题,你会发现我提到了碎片,以及为什么它不足以完成这项工作 (5认同)
  • “在许多文件系统上,shred 程序可以实现这种安全删除。但是,在 btrfs 这样的 CoW 文件系统上,这种方法毫无用处。” 那里也有两个链接。 (3认同)