破坏了我在 Amazon EC2 上的 /etc/sudoers 文件

破坏了我在 Amazon EC2 上的 /etc/sudoers 文件

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

谢谢。

答案1

希望您使用的是 EBS 根卷。如果是这样,解决方案就不太难。

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

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

这种方法之所以有效,是因为在全新的实例上,您拥有适当的权限 - 其根卷是完整的 - 这使得原始实例中的 sudoers 文件成为您可以编辑的另一个文件。

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

答案2

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

如果它是 AMI,而您没有 root 密码,并且 AMI 没有配置 root SSH 访问权限,那么您就无能为力。

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

答案3

虽然这篇文章很旧,但这个问题最近才出现,如果您知道导致问题的部分代码,下面是一个解决方案。如果它符合您的需求,这将使您无需卸载分区并安装到另一个分区,然后更改文件,然后反转该过程。

来源:https://aws.amazon.com/premiumsupport/knowledge-center/ec2-sudo-commands/

这适用于:

  • 基于 Red Hat 的发行版,例如 SUSE、CentOS、Amazon Linux 1、Amazon Linux 2 和 RHEL。
  • 基于 Debian 的发行版(例如 Ubuntu)。

脚步:

  1. 停止实例
  2. 停止后,转到“操作”->“实例设置”->“编辑用户数据”
  3. 粘贴以下代码(前后没有空格)。最后两行添加了一个文件,这样即使 sudoers 更改出现问题,您也知道它已成功运行,并且它还将删除 /etc/sudoers 中包含字符串“string-unique-to-line”的任何行。启动实例您现在应该能够运行 sudo visudo,这样您就不会再次损坏文件
    内容类型:multipart/mixed;边界=“//”
    MIME 版本:1.0
    
    --//
    内容类型:text/cloud-config;字符集="us-ascii"
    MIME 版本:1.0
    内容传输编码:7位
    内容处置:附件;文件名=“cloud-config.txt”
    
    #云配置
    云最终模块:
    - [脚本用户,总是]
    
    --//
    内容类型:text/x-shellscript;charset="us-ascii"
    MIME 版本:1.0
    内容传输编码:7位
    内容处置:附件;文件名=“userdata.txt”
    
    /bin/bash #!/bin/bash
    /bin/echo “Hello World”>>/tmp/testfile.txt
    sed -i'/字符串唯一到行/d'/etc/sudoers
    --//--

答案4

以下是我为解决这个问题所做的事情-

  1. 启动了一个与硬件相同(搞乱了的那个)的实例。
  2. 停止混乱的情况。
  3. ssh 完整的 ubuntu 文件夹(其中包含需要的所有文件)。
  4. 启动副本服务器并确保一切正常。(我们使用 Mongo、Mysql、Tomcat 和 Java)。
  5. 完成后,我分离了用于混乱实例的弹性 IP,并将其附加到副本实例。

现在您有一个具有相同配置和 IP 的新运行实例。

耗时 30 分钟。

相关内容