我编辑/etc/sudoers.d/google_sudoers
并/etc/sudoers.d/90-cloud-init-users
删除了免密码 sudo 访问。我使用 SSH 访问密钥登录,但(显然)我不知道登录密码。这意味着我已将自己锁定在服务器的 root 访问权限之外。
关于如何在不重建实例的情况下进行恢复,您有什么想法吗?我可以在云控制台中执行哪些操作?
(编辑:是在 Google 云平台上。它在标签中,但不在文本中)
答案1
这很容易处理。你只需使用 Google Cloud Console 添加一个以高于 root 权限运行的启动脚本,即可“重置” sudo 以在“安全模式”下运行。
从 VM 实例启动
单击“名称”列下的虚拟机实例
点击顶部的“编辑”
向下滚动到底部的“自动化”
在‘启动脚本’框中粘贴以下内容:
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
重新启动虚拟机实例以运行上述启动脚本
通过 SSH 正常连接到虚拟机实例和 CLI。Sudo 处于一种“安全模式”
修复导致 sudo 崩溃的问题,根据需要使用 sudo visudo
sudo visudo -f /etc/sudoers.d/broken-one
或者
sudo visudo -f /etc/sudoers.backup.xxxxxxxxxxx
- 恢复原始的现在无错误的 /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 手动修复文件。