如果我使用会发生什么
sudo dd if=/dev/zero of=/dev/sda
从 Ubuntu 安装逃离 /dev/sda
?
我在虚拟机中尝试过,出现正确擦除磁盘。每次都是这样吗?这是“擦除”Ubuntu 安装和所有数据的安全方法吗?
我的问题在某种程度上受到以下启发:
答案1
实际上,文件系统仍处于挂载状态,并且一些写入操作处于缓冲状态,这意味着它们仍在 RAM 中等待写入磁盘。假设dd
正确地覆盖了所有内容,紧接着缓冲区被刷新,一些潜在的敏感数据被写回到磁盘。所以,这不是一种安全的擦除磁盘的方法。
您可以通过首先以只读模式重新挂载根文件系统和磁盘上的任何其他文件系统(或完全卸载它们,但您无法使用根文件系统)来避免此问题,然后,根本不应该允许在文件系统上进行任何写入(因此没有缓冲区可以刷新)所以您的命令现在应该是安全的,即使在出现恐慌的情况下这仍然是一个坏主意,因为它需要很长时间。
如果你想要某种紧急删除功能,我建议使用 LUKS 加密你的磁盘(Ubuntu 安装程序可以做到这一点),然后执行以下操作我在 Security Stack Exchange 上回答过这个问题。这涉及擦除只有 2MB 大小的 cryptheader,并且只需不到一秒钟即可覆盖。然后重新启动系统,磁盘加密密钥将从内存中消失,并且无法恢复它们,因为 cryptheader 本身也消失了。
答案2
我牺牲了一个虚拟机,使用稍微更高级的用法,dd
借用并稍加修改Arch Wiki 页面。
首先安装一个好的进度计:
sudo apt-get install pv
然后运行“增强”dd
命令
sudo openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null \
| base64)" -nosalt </dev/zero \
| pv -bartpes "$(sudo blockdev --getsize64 /dev/sda)" \
| sudo dd bs=64K of=/dev/sda
这将使磁盘充满 AES 密文。完整且安全的磁盘擦除?可能比您自己的dd
示例更好,但没有什么是完全安全或有保证的……
你还欠我一台虚拟机:)
参考:
答案3
简短回答:它大致会按照您的要求执行,然后什么都行不通了。使用dd
您在文件系统以下级别进行操作,这意味着任何适用的约束都不再相关(这并不意味着内核无法阻止您这样做 - 但事实并非如此)。文件系统中的某些内容已经在内存中,例如内核和程序dd
本身,而有些内容将在缓存中。如果系统处于多用户模式,则某些文件可能会在进行过程中被写回dd
,假设它们实际上已经更改,并且如果您面临内存压力,那里的某些页面也可能会被换出(它们应该被加密,因此在重启后无法使用)。
您在执行此操作后发出的大多数命令(包括reboot
)都不会在缓存中,因此无法工作。因此,如果您处于单用户模式,它会表现得非常好,如果您处于多用户模式,它会擦除绝大多数数据。理想情况下,您应该从其他介质启动它(甚至可能停止在 initrd 上),这样您就可以确定所有写入来自何处。
如果您想要安全擦除,那么这种方法行不通,因为如果您将其归零,原始数据仍会留下一些痕迹。通常,您需要最多三次随机写入,这意味着从中复制/dev/urandom
而不是从中复制/dev/zero
- 速度慢得多但更安全。有些人可能会建议您使用/dev/random
用于“纯”随机数据的设备 - 而不是伪随机 - 但出于此目的,有人设法破解 PRNG 种子并成功掩盖数据的可能性基本上可以忽略不计。
如果你是真的偏执狂,你需要将存储设备扔进炉里,这样它就会消磁/放电。
答案4
它应该可以工作,运行过程保存在 Ram 中,不需要磁盘。无论如何,我都会使用从 cd 或 usb 运行的实时系统。甚至还有 dban,一种专门用于磁盘擦除的实时 linux。
用零覆盖磁盘是安全的,但如果您足够偏执或有法律规则,您可以多次用随机数据覆盖。
使用 SSD 时要小心,由于磨损均衡,覆盖不能保证删除所有数据。
如果您使用全盘加密(luks),则不必删除整个磁盘,删除 luks 标头就足够了。