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