如何将自己重新添加为超级用户?

我今天重新安装了Ubuntu 11.10,并安装了VirtualBox。这要求我将自己添加到vboxusers组中,由于11.10似乎不再有一个图形应用程序来添加用户到组中,所以我运行了以下命令:
sudo usermod -G vboxusers stephane

这是一个问题。我现在明白我应该运行的是什么:
sudo usermod -aG vboxusers stephane

最终结果是我不再在应该加入的群组中,包括运行“sudo”所需的任何群组。现在,当我以sudo身份运行任何命令时,会出现以下情况:
$ sudo ls
[sudo] password for stephane: 
stephane is not in the sudoers file.  This incident will be reported.

有没有办法修复这个问题,还是我需要重新从头安装?
5个回答

在启动时,按住左边Shift键,你应该会看到GRUB菜单。
选择包含(恢复模式)的条目并等待。
现在应该会出现一个菜单。选择:
remount 重新挂载/读写和挂载所有其他文件系统
等待文件系统以读写权限挂载,然后按下Enter键。
如果此选项不出现或无法工作,您可以选择root选项,并使用以下命令挂载系统分区:
mount -o remount /
您可以使用fsck命令或查看/etc/mtab来查看您的系统分区。
成功运行挂载命令后(即没有错误消息),直接进行下面的第5步。
选择remount选项后,菜单再次出现。选择:
root 切换到root shell提示符
现在输入以下命令之一,将您的用户重新添加到admin组(适用于Ubuntu 11.10及更早版本):
adduser admin
或者添加到sudo组(适用于Ubuntu 12.04及更高版本):
adduser sudo
重新启动,您应该能够再次使用sudo

3如果您没有看到“重新挂载”菜单, 您可以先选择“fsck”,它将重新挂载您的文件系统以进行读写操作。之后,您可以在root模式下添加您的用户。 - Jiejing Zhang
1这对我有用,只是我不得不使用命令mount -o remount,rw /来挂载文件系统。 - Passuf
这个功能完美运作。而且,看起来是一个很大的安全问题。我猜你应该在敏感的机器上禁用这个功能吧?-- 当处于恢复模式时,我从来不能重新启动。我总是不得不使用reboot -f - Romain Vincent

如果您的系统启用了root登录,只需通过Control+Alt+F1切换到终端而无需登录到X。以root身份登录,然后将所需用户添加到admin组(适用于Ubuntu 11.10及更早版本)。
adduser desired_user_name admin

对于Ubuntu 12.04及更高版本,请将用户添加到sudo组中。
adduser desired_user_name sudo

如果您没有启用root登录,只需从Grub中选择恢复模式,然后尝试root shell即可。

Root Shell

挂载文件系统为读写模式:
mount -o rw,remount /

之后,您可以将所需的用户重新添加到“admin”(或“sudo”)组中。

但是我无法从我的用户访问sudo! - Jamie Hutber

我在12.10版本中尝试了各种组合,因为重新挂载菜单选项似乎不可用。我已经从根目录尝试了这篇帖子中的其他方法。最后一种方法是...
umount -a
mount -o -w /<path> /

这导致文件系统仍然是只读的,可能是由于fstab中的设置在文件系统错误时引导为只读,它在挂载后似乎也是只读的。
我最终成功地解决了这个问题。
mount -o rw,remount /

虽然我不确定这与之前的一组命令有何区别。
应用此变化后,将用户添加到“admin”(11.10及更早版本)或“sudo”(12.04及以后版本)组的方法相同:
adduser username admin    # 11.10 and earlier

adduser username sudo     # 12.04 and later

老问题,但我也遇到了(Ubuntu 14.04)。
我无法登录恢复模式并获得root shell访问权限,就像这里和其他地方的许多答案描述的那样:GRUB中的root shell访问似乎受到密码保护。
所以我是这样解决这个问题的:
1. 启动一个Live USB 2. 打开一个shell 3. 访问主硬盘上的Linux文件系统(你可以在GUI文件浏览器的地址栏中找到它的挂载点,通常在按下CTRL-L后显示)。进入该目录。 4. 编辑文件etc/group(使用nano etc/group或其他任何编辑器) 5. 找到“sudo”行。应该看起来像sudo:x:27:admin,bob,alice 6. 将自己添加到sudo行中,用逗号分隔
当然,这意味着文件etc/sudoers仍然包含该行。
%sudo   ALL=(ALL:ALL) ALL

这意味着组中的所有成员sudo都具有完全控制权。首先检查一下。

顺利完成。


我犯了同样的错误,将我的账户添加到一个组中(忘了 -a)。我把我的系统安装时锁定了root登录,并且我的账户是机器上唯一的账户。

接受的答案对我没有帮助。在进入恢复模式时,我只收到了一个无用的信息:

Cannot open access to console, the root account is locked. See sulogin(8) man page for more details
Press ENTER to continue

按下回车键后,系统正常启动:没能幸运地获得root权限来解决问题。我将保留这个答案,以防有人遇到和我一样的问题。只有当你通过Grub菜单无法进入恢复模式时,请使用以下方法

获取root访问权限的步骤:

  1. 进入Grub菜单,并突出显示(但不要按下Enter键!)正常(默认,非恢复)的启动选项。
  2. 按下e。Grub将显示一个带有多行的命令行编辑器,每一行都可能看起来陌生或令人生畏。不用担心,您所做的任何更改都不会永久保存。
  3. 找到包含linux ... ro ...的行。这是内核命令行。将ro替换为rw,使根文件系统可读写,并添加另一个内核命令行参数init=/bin/sh。这指示内核执行sh而不是/sbin/init。最后,该行应该如下所示:linux ... rw init=/bin/sh ...注意:即使只有裸露的grub>提示符也可以继续。如果您遇到其他问题,我很乐意逐步解释如何操作;只需在此答案下留言。
  4. 更改完成后,按下F10使用编辑器中的命令来启动系统(或者如果您的Grub编译方式不同,请阅读编辑器窗口下方的说明)。您将获得根shell提示符,因为init进程以root身份运行。
  5. 进行您想要的更改,例如usermod -a -Gadm,sudo YOURUSERID。使用id -a YOURUSERID确认您已恢复sudo成员身份。如果出现“命令未找到”错误,请使用/sbin/usermod/bin/id
  6. 此时无法正常关闭或重启系统。 reboothaltpoweroff都不起作用,从shell中退出将导致内核恐慌,因为PID 1进程不应该只是退出。因此,您必须执行以下两个命令:

    sync
    exec /sbin/init
    

    sync用于防止发生任何问题,将所有更改保存到磁盘上,而exec则用真正的init(可以是systemd、upstart或System V init,但始终称为/sbin/init)替换shell。系统很可能会继续正常启动(没有恢复模式)。

  7. 登录并重新启动系统,例如sudo reboot——您应该已经恢复了sudo权限。建议重新启动,因为(虽然非常罕见)在正常启动过程中可能会向init传递其他参数,而我们没有这样做。如果exec失败,只需重置机器并让其正常启动。所有现代日志文件系统(如ext4、xfs和btrfs)都能快速恢复自身(在重置之前进行了同步),您将一切就绪。

一点背景

关于这个问题,在Debian的错误报告中有一个讨论,据我所知,这被决定为一个功能而不是一个错误,我认为这是一个相当大的错误。作为从业25年的老手,我完全不同意Michael Biebl在31楼消息中的观点:

考虑一下:你有一台拥有锁定root账户的笔记本电脑。默认情况下, grub引导加载程序会为救援模式生成一个启动项。 因此,即使你将BIOS锁定以防止从光盘或 USB启动,并且对grub设置了密码保护,如果你把笔记本电脑短暂离开, 某人仍然可以轻易获取root权限。

70楼消息中,Felipe Sateler提出了正确的、尽管不够普遍的反对意见:

对于许多(大多数?)计算机来说,物理接触意味着安全性丧失,因为你可以拆开机箱并取出硬盘。
这对于笔记本电脑尤其如此,正如迈克尔所说的:如果你将它短暂地离开一会儿,而有人想要获取你的数据,那么笔记本电脑将会消失得无影无踪。而对于任何机器来说,不仅仅是“许多”或“大多数”,即使那些通过8个点固定在机架上的机器,一旦攻击者获得物理接触机器的机会,游戏就真的结束了。

这是对我有效的解决方案。感谢你提供详细的步骤和讨论。 - ali14