【问题标题】:Securely remove file from ext3 linux从 ext3 linux 安全删除文件
【发布时间】:2012-08-02 06:29:52
【问题描述】:

这个问题在过去被问到不同程度的成功......

是否有可以调用的工具或 C/C++ unix 函数使我能够检索文件在磁盘上的位置?不是文件的某个虚拟地址,而是文件所在的磁盘/扇区/块?

这里的目标是能够覆盖磁盘上存在的实际位。我可能需要一种方法来绕过内核的地址叠加。我愿意考虑基于 x86 asm 的解决方案...

但是,我觉得已经有一些工具可以很好地做到这一点。

感谢您对此的任何意见。

【问题讨论】:

  • 尽管问题包括询问有关编程 API 函数的建议,但重量似乎在工具上,这就是为什么我投票将其移至 superuser.com
  • shred 已经这样做了,我相信。
  • 当您考虑到数据可能在某些媒体上没有固定位置,并且并非所有媒体都具有扇区和块的概念时,这个问题变得有些毫无意义(最接近通用位置描述符的是一维比特流中的偏移量)。现在,如果您愿意将您的问题范围限制在标准机械硬盘上...
  • 所以这让我想到了下一个问题,似乎更紧迫的问题... shred 之类的工具如何执行此任务?还是他们撒谎?
  • 为了便于讨论,我们假设数据位于“标准机械硬盘”上。还有……也许我很天真,但数据一直都在……它可能在多个地方,它可能在任意时间移动到不同的地方,但它仍然存在,因此它可以被删除。

标签: c file unix


【解决方案1】:

只有在非常特殊的情况下才能安全地删除文件:

  • 操作系统和实际存储介质之间没有不受控制的间接层。

    在无法再假设的现代系统上。带有固件磨损均衡代码的 SSD 驱动器不能这样工作;他们可以随意移动或复制数据,没有记录或外部控制的可能性。即使是磁盘驱动器也会例行地将现有数据留在故障后重新映射的扇区中。混合驱动器兼具...

    ATA 规范确实支持擦除整个驱动器的SECURE ERASE 命令,但我不知道现有的实现有多彻底。

  • 文件系统驱动程序始终具有稳定且唯一的文件到物理块的映射。

    我相信ext2fs 确实有这个功能。我还认为ext3fsext4fs 在默认日志模式下也可以这样工作,但在使用允许文件数据存储在日志中的data=journal 选项时不会这样,而不仅仅是元数据。

    另一方面,reiserfs 的工作方式肯定不同,因为它与元数据一起存储少量数据,除非使用 notail 选项挂载。

如果满足这两个条件,那么像shred 这样的程序可能能够通过多次覆盖文件的内容来安全地删除文件的内容。

这个方法还是没有考虑到:

  • 备份

  • 虚拟化存储

  • 交换空间中的剩余数据

  • ...

底线:

  • 您不能再假设安全删除是可能的。最好假设这是不可能的并使用加密;如果您正在处理敏感数据,您可能还是应该使用它。

  • 有关敏感数据的协议要求对存储介质进行物理销毁是有原因的。有些公司实际上将他们的硬盘驱动器消磁,然后切碎它们,然后再焚烧残骸......

【讨论】:

  • 感谢您提供的信息量很大的帖子。 “安全”删除一个文件的一种方法可能是将所有已知的好文件(目标文件除外)复制到外部磁盘,擦除包含目标文件的磁盘(将原始垃圾写入整个文件),然后移动您复制回目标磁盘的文件...假设目标磁盘已完全擦除,我觉得这会起作用。我绝对同意在处理敏感数据时使用加密是必要的。我问更多是出于好奇,而不是因为我自己确实需要这样做。
  • @DeshBanks:只要您的文件没有碰巧位于重新映射的扇区中,您建议的方法可能就可以工作 - 在这种情况下,您将依赖 ATA SECURE ERASE是彻底的,我不愿意假设......
猜你喜欢
  • 2010-12-15
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
相关资源
最近更新 更多