完整的故事:
我启动了运行 RHEL 7.1 的 Amazon EC2“层”(VPS) 并创建了 ssh 密钥。
EC2 自动为新的 Rhel VPS 创建一个名为 ec2-user 的用户,并且它具有权限(在 sudoers 文件中):
ec2-user ALL = NOPASSWD: ALL
我创建了一个名为“e”的新用户(带有密码),并尝试将其添加到 sudoers 文件中。
当我尝试使用 VI 编辑 /etc/sudoers 文件时,它说该文件是只读的,所以我将其权限更改为 600,现在每次我尝试使用“sudo”命令执行某些操作时,我都会收到错误:
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
我无法将其改回 440,因为我需要 root 才能执行此操作,而且我无法执行“sudo”。
我在某处读到解决方案是运行
pkexec chmod 0440 /etc/sudoers
但它要求没有任何密码的 ec2 用户输入密码:
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run `/usr/bin/chmod' as the super user
Authenticating as: Cloud User (ec2-user)
Password:
polkit-agent-helper-1: pam_authenticate failed: Authentication failure
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized
This incident has been reported.
现在怎么办?有人知道如何继续制作 sudoers 文件 440 agin 吗?
答案1
是的 - 这肯定是一个“陷阱”。visudo
以后使用可以避免这个问题。我有一个 CentOS 7 虚拟机,它与 RHEL7 本质上是一样的;我能够su -
在不使用的情况下成为 root sudo
,因为我知道 root 密码。您知道 root 用户的密码吗?
答案2
通常,sudo
这是提升 EC2 实例权限的唯一方法,因为 Amazon 方便地为用户 ( ec2-user
) 提供 sudo 权限。可能很少有人费心为 设定密码root
,因为大多数人都使用预定义的用户。这个问题就是这样。
恢复这台机器的方法是
- 关闭机器
- 将其
"/"
磁盘从损坏的机器上分离(记住哪个设备,可能/dev/sda1
) - 将该磁盘附加到工作机器(这会分配一个设备)
mount
工作机器上的磁盘(使用设备)- 修复权限(您
sudo
在工作机器上有权限) umount
磁盘- 从工作机器上拆下并重新连接到损坏的机器上
- 启动工作机
拥有多台机器会有所帮助,但即使仅需要一台机器进行维修,也可以在大约一小时内创建、使用和删除。
进一步阅读:
答案3
如果该实例不包含任何重要内容,我建议将其记为一次学习经历,然后将其抛弃并重新开始。如果必须修复它,您可以关闭该实例,保存磁盘映像,然后将其安装到另一个实例上并修复权限。
答案4
如果启用了 root 用户,请使用“su”命令或“login root”命令进入 root shell。然后尝试
chmod 440 /etc/sudoers