我应该使用:
find / -type f -exec shred -uvz -nX
或者只是好老
dd if=/dev/urandom of=/dev/sda
其中一个比另一个更快或更安全吗?
答案1
表现...
每当使用 时dd
,请使用较大的块大小。 4MiB 就足够了。使用默认块大小(512 字节)会明显变慢。
dd if=/dev/urandom of=/dev/sda bs=4M
如果您试图覆盖无法恢复的数据,那么,dd
像上面这样简单的操作和锤子就可以解决问题。如果没有锤子,您将始终存在可能可读的坏块,或者SSD内容等,这些内容在设备级别不可见,但在物理级别存在。
如果你只是想让它变得非常非常困难,那么就不要使用 urandom,而只需使用 /dev/zero
dd
(适当大小)会更快。- 安全是一个概念,其含义与一个人在获取数据时愿意付出的努力有关。从这个角度来看
dd
,并且shred
可能具有相同的近似安全性。
新驱动器的成本可能低于更安全的擦拭器的成本,因此,从那时起,锤子就是正确的解决方案。
更新:撕碎是没有意义的。
从粉碎的文档,它有很多限制:
请注意,shred 依赖于一个非常重要的假设:文件系统会就地覆盖数据。这是传统的处理方式,但许多现代文件系统设计并不满足这个假设。例外情况包括:
- 日志结构或日志文件系统,例如 AIX 和 Solaris 提供的文件系统,以及 JFS、ReiserFS、XFS、Ext3(在 data=journal 模式下)、BFS、NTFS 等(当它们配置为日志数据时)。
- 即使某些写入失败也能写入冗余数据并继续运行的文件系统,例如基于 RAID 的文件系统。
- 制作快照的文件系统,例如 Network Appliance 的 NFS 服务器。
- 在临时位置缓存的文件系统,例如 NFS 版本 3 客户端。
- 压缩文件系统。
您可以为此添加 ext4(默认情况下启用日志记录)。
此外,对单个文件进行粉碎不会达到从文件中删除所有相关元数据的程度。您可能有其他硬链接等指向相同的索引节点,并且元数据仍然存在。有时甚至知道文件的存在也是一个安全问题。
回到锤子......
答案2
该dd
方法将:
- 速度更快,因为不需要遍历目录结构
- 覆盖当前未被文件占用的磁盘区域
该shred
程序会反复用随机数据覆盖该文件,这可能会使其比 更“安全” dd
,具体取决于您的要求。
然而,其有效性shred
取决于文件系统。从手册页:
注意:请注意,shred 依赖于一个非常重要的假设:文件系统会就地覆盖数据。这是传统的处理方式,但许多现代文件系统设计并不满足这个假设。
特别是,shred
最终可能不会在 SSD 上做任何有用的事情。
答案3
另外一个选择我昨天刚读到:
openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > randomfile.bin
当然,你可以randomfile.bin
用类似的东西替换/dev/sda
这应该比让内核给你随机数据更快。
答案4
该shred
方法仅覆盖当前存在的文件。它不会擦除已删除的文件,包括恰好位于尚未重用的空间中的当前现有文件的旧版本。
该dd
方法会覆盖整个磁盘。
该dd
方法速度过慢,因为它会用随机数据覆盖。用零覆盖同样有效:
dd if=/dev/zero of=/dev/sda
您也可以使用以下方法执行此操作cat
;它可能会稍微快一些。
cat /dev/zero >/dev/sda
用随机数据而不是零重复覆盖的建议对于 20 年前的磁盘技术来说是正确的——即使在那时,用零覆盖也效果很好。对于现代硬盘,用零覆盖就足够了。看为什么在硬盘驱动器上多次写入零(或随机数据)比只写入一次更好?。
SSD 是比硬盘更新的技术,人们对其写入后的剩磁知之甚少。据我所知,还没有关于在任何闪存技术上恢复被零覆盖的数据的公开报告(我不能代表政府机构发言 - 但无论如何他们可能已经拥有您的数据)。您可能想观看安全擦除 EEPROM 和闪存用于更新。
重新分配扇区的闪存技术(例如 SSD 驱动器)还有一个额外的问题:在软件中覆盖整个表面后,有些扇区当前未映射,但仍然拥有自己的内容。这些扇区无法使用普通接口读取,但可以通过探测存储设备内部来读取。 (据我所知,这是一种已知的技术,但根据闪存设备型号的不同,价格从中等到非常昂贵)。原则上,要完全擦除闪存驱动器,您需要发出安全擦除命令;然而[许多设备没有正确执行此命令](SSD 上的 ATA 安全擦除),因此请务必先进行软件擦除。