完全搞乱了sudoers文件和su操作。

我现在的状况非常糟糕。我正在记录下我为自己陷入这种境地所采取的步骤。
我的目标是在我的机器上禁用sudo。
我正在运行Amazon Ec2 Ubuntu 12.04。
  1. 我使用以下命令创建了一个root密码。

    sudo passwd
    

    当时我是“ubuntu”用户。

  2. 我用nano编辑了我的/etc/sudoers文件,并进行了以下操作。

    #ubuntu ALL=(ALL) NOPASSWD:ALL----这样可以不需要密码
    ubuntu ALL=(ALL) ALL---这样可以需要密码
    

    所以在我退出之前,我的文件看起来像:

    #ubuntu ALL=(ALL) NOPASSWD:ALL
    #ubuntu ALL=(ALL) NOPASSWD:ALL----这样可以不需要密码
    ubuntu ALL=(ALL) ALL---这样可以需要密码
    
现在当我使用sudo命令时,我会得到以下明显的错误,因为我搞砸了文件:
ubuntu@ip-10-144-143-249:~$ sudo
sudo: >>> /etc/sudoers.d/90-cloudimg-ubuntu: syntax error near line 4 <<<
sudo: parse error in /etc/sudoers.d/90-cloudimg-ubuntu near line 4
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

当我使用这些命令susu root时,它要求我输入在第一步设置的密码。
但是每次我输入密码后,都会收到身份验证失败的消息,尽管我百分之百确定我输入的密码是正确的。
ubuntu@ip-10-144-143-249:~$ su
Password:
su: Authentication failure

我现在不知道该怎么办。我在网上查了一些解决方案,其中一种方法建议是分离和重新连接卷。虽然这样做是可行的,但由于这是一个生产环境,会出现很多问题。 有没有一种方法/技巧可以让我能够使用sudo操作?
3个回答

这是我解决这个问题的步骤:
  1. 启动一个与出问题的硬件相同的实例。
  2. 停止出问题的实例。
  3. 通过ssh复制完整的Ubuntu文件夹(其中包含所有所需的文件)。
  4. 启动副本服务器,并确保一切正常运行。(我们使用Mongo、Mysql、Tomcat和Java)。
  5. 完成后,将用于出问题实例的弹性IP分离并附加到副本实例上。

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

耗时30分钟。


首先,Rahul,你应该修复 sudoers 文件。

在桌面上创建一个 sudoers 文件,并将以下行粘贴到其中:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

好的,现在你需要用新文件替换原来的sudoers文件,使用ctrl + F1切换到tty,尝试成为root用户并输入
mv /home/RAHUL/Desktop/sudoers /etc/sudoers 

如果你无法成为root用户,那么你需要从live Ubuntu启动,并按照上述步骤进行。

谢谢Rahul,但我使用的是亚马逊EC2实例。如何在CD启动或恢复模式命令行中进行呢? - ratr
你怎么安装Ubuntu?o.O只需使用Ubuntu启动盘创建器(从Ubuntu中)制作一个USB启动驱动器,如果你有Windows系统,可以使用RUFUS工具创建启动盘,然后从该启动盘引导。 - Rahul V Sharma

你输入了错误的密码。`sudo passwd` 是用来更改 root 用户的密码,而不是用来执行 sudo 命令所需的密码。此外,在 Ubuntu 中通常会锁定 root 账户,因此无法通过 `su` 或 `su root` 成为 root 用户,请参考这里
你对 90-cloudimg-ubuntu 所做的任何操作可能与身份验证失败无关。你确定 `ubuntu ALL=(ALL) ALL---this enables password` 的语法正确吗?首先,注释应该以 `#` 开头。
为了防止任何用户执行 `sudo` 命令,可以在 `/etc/group` 文件中将所有用户从 sudo 组中移除。你打算之后以 root 用户登录吗?

嗯,我不能再使用sudo了,因为sudoers文件已损坏。而且root账户已启用。我使用sudo passwd命令设置了密码,以设置root密码。现在我无法执行'su'命令,因为它显示身份验证失败,并且无法执行sudo操作,因为sudo文件损坏。 - ratr
如果启用了root账户,请以root身份登录并再次清理您的90-cloudimg-ubuntu文件。您是如何启用root账户的? - noleti
这就是问题所在,它不接受根密码。我设置了密码并编辑了sudoers文件中的启用密码。现在文件损坏了,所以我无法执行sudo操作,当我尝试以root身份运行时,它不接受我设置的密码。 - ratr
@Rahul 如果它不接受你设置的根密码,那么你就完蛋了。你将不得不分离。 - muru
谢谢muru。我的错。我认为分离是唯一的选择。谢谢大家的帮助。 - ratr