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