如何在没有root和重启的情况下修复虚拟机上的sudoers文件

raa*_*cer 5 virtual-machines sudo

我在重载服务器上破坏了我的 sudoers 文件,并出现语法错误。不幸的是,我丢失了 root 密码。服务器很重要,我想避免重新启动。所以,没有sudo,没有root,没有重启,没有kdesudo 或gksu。服务器是运行在 kvm 上的虚拟机。

你会如何解决这个问题?

raa*_*cer 1

幸运的是我们的服务器是虚拟服务器,我可以访问主机系统。我通过编辑原始磁盘数据解决了这个问题。您也可以尝试这种方式,但要非常小心。该方法很危险。您可能会损坏其他文件、分区甚至整个硬盘驱动器。因此,请自行承担风险,并确保您有最近的备份。

  1. 在主机系统上安装 hexedit。
  2. sync在访客上运行。
  3. 使用 hexedit 打开访客高清设备。
  4. 找到损坏的字符串并记下它的位置(例如屏幕底部的 0x29221D2B8)。
  5. 使用一些 calc 或 util 将数字转换为十进制(我使用过 kcalc)。
  6. 尝试阅读损坏的文本并dd确保数字正确。跳过=位置/IBS。

    sudo dd if=/dev/vg0/vm-100-disk-1 计数=1 bs=10 ibs=10 跳过=1104162476

  7. 以某种方式覆盖损坏的文本来修复错误。就我而言,我只是用“#”替换了第一个符号来注释掉损坏的东西。使用 /obs/seek 参数代替具有相同数字的 if/ibs/skip。小心换行符和 eof。

    回声“#nincludedir”| sudo dd of=/dev/vg0/vm-100-disk-1 计数=1 bs=10 obs=10 寻求=1104162476

  8. 您可以使用 dd 再次阅读并检查是否执行了您需要的操作。

  9. 现在返回虚拟机终端并尝试使用 sudo。也许您需要以某种方式清空磁盘读取缓存。祝这一步好运!:)