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


22

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

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

在许多文件系统上,粉碎程序可实现这种安全删除。但是,在btrfs之类的CoW文件系统上,这种方法是无用的。该文件可能存在于卷快照中,这一事实使问题更加严重。

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


2
好问题,我以前从未考虑过这个问题。解决该问题的一种方法是加密此类文件。您还可以加密整个磁盘,但是如果攻击者获得了对正在运行的系统的根访问权限,那将对您没有帮助...
mreithub 2013年

@mreithub实际上,像FDE一样,首先加密此类文件始终是个好主意。但是,它不能考虑所有用例(例如,嵌入式系统-尽管这样的系统无论如何都将运行btrfs还是有争议的……)。我实际上是在问这个问题,因为我在复制敏感文件之前忘记设置加密,但是我想避免擦除整个分区
goncalopp 2013年

Answers:


9

安全删除是任何文件系统上的难题。除非文件系统非常特殊,并保证没有其他文件副本在附近,否则您需要清除设备上的所有可用空间。尽管您更可能在写时复制文件系统上找到文件的许多位,但实际上,更多的“静态”文件系统并没有这种保证,因为许多文件已被编辑,因此以前版本的文件中有一些位文件躺在附近。

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

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

日记中可能仍然有一些信息。我不知道该如何擦洗。

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


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

@frostschutz是否可以写其他字符0,并且不受TRIMing的影响,1而是写all ?还是某些驱动器对所有内容都使用压缩?
Xen2050

@frostschutz如果您用零填充ecryptfs卷(这是我认为答案在这里提出的,但是,在进一步检查时,我发现他的措辞实际上是模棱两可的),那么您将本质上是随机的(不可压缩/无法加热)数据到磁盘,不是吗?
JamesTheAwesomeDude

@JamesTheAwesomeDude不,我提议将零写入未加密的部分,但是我确实提到这在下面的SSD上还不够。
吉尔斯(Gillles)“所以-别再邪恶了”

6

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

  • 有一个名为mount的安装选项,nodatacow但似乎并不影响已经存在的文件。
  • 由于您的磁盘上已经有明智的文件,因此此btrfs常见问题解答条目也不会帮助您。
  • 然后是debugfs。它仅适用于ext文件系统,但有一个补丁可能有效。您可以使用它找出受影响的块地址,然后直接在/ dev / sdXY上覆盖它们。但这是非常危险的,可能无法正常工作(尤其是在文件快照更多的情况下)
  • 编写一个btrfs补丁程序,该补丁程序可以修改(或切碎)特定的快照或整个文件
  • (对于真正非常敏感的数据)最干净的尝试是:

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

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


nodatacow设置新创建文件的C标志的默认状态。当然可以,然后呢?chattr +C ~/.browser/logins.sqliteshred
JamesTheAwesomeDude

-6

shred(1)用于Unix / Linux操作系统(应该在你的发行版的包)。我是联邦军的建议


3
如果您仔细检查问题,您会看到我提到了切丝,以及为什么切丝还不够
goncalopp

出于您提到的原因,我发现的所有建议都是使用敏感文件加密的建议。
vonbrand 2013年

2
“在许多文件系统上,shred程序可以实现这种安全删除。但是,在诸如btrfs之类的CoW文件系统上,这种方法没有用。” 这里也有两个链接。
goncalopp 2013年
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.