修复 Google Cloud Ubuntu 18 实例上的 sudo 访问

修复 Google Cloud Ubuntu 18 实例上的 sudo 访问

我编辑/etc/sudoers.d/google_sudoers/etc/sudoers.d/90-cloud-init-users删除了免密码 sudo 访问。我使用 SSH 访问密钥登录,但(显然)我不知道登录密码。这意味着我已将自己锁定在服务器的 root 访问权限之外。

关于如何在不重建实例的情况下进行恢复,您有什么想法吗?我可以在云控制台中执行哪些操作?

(编辑:是在 Google 云平台上。它在标签中,但不在文本中)

答案1

这很容易处理。你只需使用 Google Cloud Console 添加一个以高于 root 权限运行的启动脚本,即可“重置” sudo 以在“安全模式”下运行。

  1. 从 VM 实例启动

  2. 单击“名称”列下的虚拟机实例

  3. 点击顶部的“编辑”

  4. 向下滚动到底部的“自动化”

  5. 在‘启动脚本’框中粘贴以下内容:

   mv /etc/sudoers /etc/sudoers.backup.$(date +"%s") && echo "%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers && chown 0:0 /etc/sudoers && chmod 0440 /etc/sudoers 
  1. 重新启动虚拟机实例以运行上述启动脚本

  2. 通过 SSH 正常连接到虚拟机实例和 CLI。Sudo 处于一种“安全模式”

  3. 修复导致 sudo 崩溃的问题,根据需要使用 sudo visudo

  sudo visudo -f /etc/sudoers.d/broken-one

或者

   sudo visudo -f /etc/sudoers.backup.xxxxxxxxxxx
  1. 恢复原始的现在无错误的 /etc/sudoers 如下:
   sudo mv /etc/sudoers.backup.xxxxxxxxxx /etc/sudoers 

Sudo 现已修复。如果不再需要,可以删除启动脚本

答案2

如果您损坏了sudoers文件并且没有 SSH 访问权限,您很可能已经将自己锁定在机器之外。

我编辑了 /etc/sudoers.d/google_sudoers 和 /etc/sudoers.d/90-cloud-init-users

使用passwd命令来执行此操作。没有必要手动编辑这些文件。


值得通过GCE 串行控制台看看您是否可以访问所需的内容,但我不知道您是否能够在没有有效超级用户的情况下升级到 root 权限。如果磁盘未加密,您可以卸载磁盘并尝试从其他 VM 手动修复文件。

相关内容