打破我的/ etc / sudoers文件在亚马逊EC2

我使用vim / etc / sudoers编辑了我的Linux Amazon EC2实例,并尝试将另一个帐户添加到列表中。 我现在意识到这是一个可怕的错误。 我不能再从任何帐户sudo(这意味着我不能再编辑文件),我没有root帐户密码。 有什么我可以做的纠正这个?

谢谢。

希望你正在使用EBS根卷。 如果是这样,解决scheme不是太困难。

实质上,您将EBS卷附加到另一个实例进行更改,并将其重新附加到原始实例:

  • 停止(不要终止)原始实例
  • 分离EBS卷
  • 启动另一个实例
  • 将当前EBS卷附加到新实例
  • SSH到新实例中,挂载EBS卷并进行所需的更改
  • 卸载EBS卷(例如, umount -d /dev/xvdhumount -d /dev/sdh
  • 从新实例中分离EBS卷,并将其作为旧实例的根卷(例如/dev/sda1 )附加
  • 启动旧的实例
  • 如果一切正常,终止新的实例

这个工作的原因是,在新的实例上,你有适当的权限 – 它的根卷是完整的 – 这使得你的原始实例中的sudoers文件就是你可以编辑的另一个文件。

如果您有一个实例存储根卷,不幸的是,您可能无法解决问题,并且必须恢复到之前作为备份创build的AMI。

这取决于它是AMI还是EBS根设备。

如果它是一个AMI,并且你没有root密码,并且AMI没有configuration根SSH访问,那么你就什么也做不了。

如果是EBS根目录,则可以终止它并将该卷附加到其他实例(作为附加磁盘,而不是根目录)。 然后,您可以访问数据,或更正sudoers文件并使用该卷启动新的实例。

即使实例存储是根卷,您也可以将此根卷作为另一个实例(如/ dev / xvdh)中的辅助卷附加到某个文件夹,并在sudoers中进行更改。

这是我所做的为了解决这个问题,

  1. 推出了一个相同的硬件像(被搞砸的)实例。
  2. 停止混乱的实例。
  3. SSH完整的Ubuntu文件夹(其中有所有需要的文件)。
  4. 启动副本服务器,确保一切正常(我们使用Mongo,Mysql,Tomcat和Java)。
  5. 一旦完成,我分离出用于混乱的实例的弹性IP,并将其附加到副本实例。

Voila现在你有一个新的运行实例,具有相同的configuration和IP。

花费30分钟