这个问题在过去被问到不同程度的成功......
是否有可以调用的工具或 C/C++ unix 函数使我能够检索文件在磁盘上的位置?不是文件的某个虚拟地址,而是文件所在的磁盘/扇区/块?
这里的目标是能够覆盖磁盘上存在的实际位。我可能需要一种方法来绕过内核的地址叠加。我愿意考虑基于 x86 asm 的解决方案...
但是,我觉得已经有一些工具可以很好地做到这一点。
感谢您对此的任何意见。
只有在非常特定的情况下才能安全地删除文件:
操作系统和实际存储介质之间没有不受控制的间接层。
在无法再假设的现代系统上。带有固件磨损均衡代码的 SSD 驱动器不能这样工作;他们可以随意移动或复制数据,没有记录或外部控制的可能性。即使是磁盘驱动器也会例行地将现有数据留在故障后重新映射的扇区中。混合驱动器兼具...
ATA 规范确实支持擦除整个驱动器的SECURE ERASE命令,但我不知道现有的实现有多彻底。
文件系统驱动程序始终具有稳定且唯一的文件到物理块的映射。
我相信ext2fs
确实有这个功能。我也认为,ext3fs
并且ext4fs
在默认日记模式下也可以这样工作,但在安装data=journal
允许文件数据存储在日记中的选项时不是这样,而不仅仅是元数据。
另一方面reiserfs
,工作方式肯定不同,因为它存储少量数据以及元数据,除非安装了该notail
选项。
如果满足这两个条件,那么诸如此类的程序可能能够通过多次覆盖文件的内容来安全地删除文件的内容。shred
这种方法仍然没有考虑到:
备份
虚拟化存储
交换空间中的剩余数据
...
底线:
您不能再假设安全删除是可能的。最好假设这是不可能的并使用加密;如果您正在处理敏感数据,则可能无论如何都应该使用它。
有关敏感数据的协议要求对存储介质进行物理销毁是有原因的。有些公司实际上将他们的硬盘驱动器消磁,然后在焚烧残骸之前将它们切碎......