近来遇到一个安全需求,需要让上传到Linux的文件做到被“毁尸灭迹”。
如果只是简单地删除文件
rm -f file
别人拿到磁盘后,可以通过数据恢复软件,就能轻松地恢复出来旧数据。
那么,有没有更完善的方式呢?
最开始想到的办法,很简单粗暴,就是进行硬盘低级格式化。但是,这个操作伤害性有点大!样机的所有权在友商手中,我们仅仅是试用而已。
有没有影响更小一点的方法呢?当时,想到的方案,就是删除文件后,通过拷贝低敏感文件,让新文件逐渐充满所在的分区。
底层逻辑来讲,此操作是利用磁盘区块被重新覆盖的原理。在计算机中,磁盘上存储信息,和在墙上刷了层白漆,再刷一层黑漆还有深刻的不同。在墙上刷漆覆盖,人们通过仔细的观察方法和分层揭示,依然能够分析到原来墙上白漆上的信息,就像考古地下年代分层一样,但磁盘存储区块仅能保存最后一次的数据信息,并不能追溯历史!
但,这个方案,趣味性比较弱,而且不尽能够保证敏感数据的彻底无迹可寻,是否会遗漏掉某些碎片的磁盘区段,并不能被完全覆盖?
所以,就在网上搜搜,看看linux下有什么彻底删除文件的方案:)
有个博文就介绍到了“shred”,根据man shred的介绍,它是将文件原地随机填充,然后就可以再安全删除了。在英文中,shred就有粉碎的含义!
#随机填充且最后清零后,删除某些文件
shred -zuv file...# 利用模糊匹配,清除目录下全部文件
shred -zuv *
当时,看到这个命令介绍,觉得它太适合我所遇到的场景了,而且友我双方都可以接受!
自诩已对Linux Shell入门我,对这个命令还不尽知,这让我不禁想到一句很具“营销学”的话:如果称它为Linux的文件粉碎机,估计它的名声会更外大!
题外话
- 根据man shred上介绍,对于某些不能原地改写填充的文件系统,“shred”并不能做到很有效;但是,这种文件系统应用面也比较小,也可能并不经常涉及敏感数据,或可以采取更外暴力的物理毁伤方法
- 在windows中也可以通过git bash这个类*nix命令行辅助工具,使用“shred”文件粉碎机