假设我有一个虚拟机,并且无法以任何方式访问虚拟机管理程序。另外,我无法更改任何系统参数,例如使用 LUKS 设置密码保护启动或任何其他参数。不过,我可以安装任何我想要的工具并拥有完全的 root 访问权限。使用 dd 在设备上写入零或随机最终会失败,并且不会使系统为空。您对如何解决这个问题有什么建议吗?也许当我重新启动系统时我可以在启动时运行一些脚本?
答案1
基本思想
- 制作一个 ram 磁盘——或者 tmpfs
- 在 ram 磁盘上安装静态链接的 busybox。
- 在 ram 磁盘上为您的磁盘和 /dev/null 等创建 dev 节点。
pivot_root
到 RAM 磁盘。exec
一个 busybox 外壳。kill
机器上运行的任何其他阻止下一步的操作。您可能还需要在 ram 磁盘上放置一个 ssh 服务器,或者使用类似的东西busybox nc -l -l -p1234 -e busybox sh
来为您提供备用访问权限。- 卸载“真实”磁盘。
- 使用 busybox
dd
来擦除“真实”磁盘。
请注意,busybox 行不会给你一个“终端”,只是一个 shell,所以很多东西都很奇怪。如果你习惯telnet
连接它,它会变得更奇怪。具体来说,您会在每次换行之前得到回车符,因此输入pwd
会失败,但之后添加空格可以。我建议使用nc
或busybox nc
作为您的客户。
问题
你实际上不能杀死 init 并逃脱它。您可能能够也可能无法通过终止从该磁盘启动的内容来卸载磁盘。
我认为有两种选择。
- 更改启动脚本以设置隧道,或为您执行磁盘擦除。有些磁盘擦除工具包可能有一个版本可以与您的内核模块结合起来执行后续操作。
- 尝试在不卸载磁盘的情况下擦除它们。如果您这样做,请确保您
poweroff -fn
.