我正在禁用 AWS EC2 实例上的 root 登录。在设置 PermitRootLogin no 并重新启动 sshd 后,我意外关闭了终端——在设置具有 sudo 权限的用户之前。结果是我以 root 身份进入实例的密钥不起作用(sshd 禁止这样做),当我使用我的普通用户登录实例时,我无法获得 root 权限(从未设置 root 密码)。该实例正在运行 ubuntu 8.10。有人知道我该如何解决这个问题吗?
答案1
不,不要终止实例,一切都还没有丢失!!
- 启动另一个实例并关闭损坏的实例。
- 从损坏的实例中分离 EBS 卷并将其附加到新实例。
- 将其挂载到新实例中(例如,类似 sudo mount /dev/xvdf1 /mnt/ )
- chroot 进入它(sudo chroot /mnt)并输入 passwd。
- 重置密码或进行任何其他您喜欢的更改(例如 vi /etc/ssh/sshd_config!)
- 按 control-D 或输入 exit 退出 chroot。
- 卸载 /mnt
- 将 EBS 卷从临时实例中分离出来
- 重新连接或拍摄快照并根据该快照创建新的 AMI
- 重新启动修复后的盒子!
PS下次尝试用户化管理用户的密钥:)
答案2
如果不找到漏洞,在 Linux 机器上获取 root 访问权限的唯一方法是启动到单用户模式并重置密码。但是,您在 EC2 实例上没有 KVM 级访问权限,因此这是不可能的。
您需要终止该 EC2 实例并启动另一个实例。但禁用 root 登录违反了 EC2 的一般范式。Amazon 建议您在实例启动时提供公钥,并让 init 脚本将其安装到 /root/.ssh/authorized_keys 中,并将 sshd 配置为“PermitRootLogin without-password”以强制仅使用密钥对登录。这样,您就永远不会意外将自己锁定在 root 帐户之外(前提是您没有丢失私钥)。
将来,我建议您创建一个具有 sudo 访问权限的用户,然后在登录后立即启动“screen”会话,这样断开连接就不会停止/破坏您的工作。配置和安装应用程序后,捆绑、上传和捆绑 AMI,以便您可以在需要时启动新实例。
答案3
在禁用根登录之前,您是否保存了对实例所做的任何更改的 AMI?如果没有,您将必须返回到您开始使用的基本 AMI 并创建一个新的 EC2 实例。
答案4
一种方法是找到系统中可以授予您 root shell 的本地漏洞。获取安装在盒子中的软件列表,然后对每个软件进行 google/securityfocus 搜索。