我今天全新安装了 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.
有没有办法解决这个问题,还是我需要从头开始重新安装?
答案1
在启动过程中,按住左边 Shift键,您应该会看到 GRUB 菜单。
选择包含 (恢复模式)并等待。
现在您应该会看到一个菜单。选择:
remount Remount / read/write and mount all other file systems
并等待您的文件系统以读/写权限挂载,然后按Enter。
如果此选项未出现或不起作用,您可以选择该
root
选项并使用以下命令来挂载系统分区:mount -o remount /
fsck
您可以使用命令或查看来检查您的系统分区/etc/mtab
。成功运行mount命令后(即没有错误信息),直接执行下面的第5步。
选择
remount
选项后,菜单再次出现。选择:root Drop to root shell prompt
现在输入以下命令之一将您的用户重新添加到
admin
组(适用于 Ubuntu 11.10 及更早版本):adduser <USERNAME> admin
或者添加到
sudo
组(适用于 Ubuntu 12.04 及更高版本):adduser <USERNAME> sudo
重新启动后您就可以
sudo
再次使用。
答案2
如果您的系统上启用了 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。
将文件系统挂载为读写:
mount -o rw,remount /
此后,您可以再次将所需的用户添加到admin
(或sudo
)组。
答案3
在执行相同的操作后,我尝试了各种组合,因为重新安装菜单选项似乎不在 12.10 中。我已经从 root 尝试了这篇文章中的所有其他操作。最后一个是
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
答案4
我在将我的账户添加到组中时犯了同样的错误(忘记了-a
)。我的系统安装时已锁定 root 登录名,我的账户是机器上唯一的账户。
接受的答案对我没有帮助。在启动恢复模式时,我收到的只是一条无用的消息
无法打开控制台访问权限,root 帐户已被锁定。有关更多详细信息,请参阅 sulogin(8) 手册页
按 ENTER 继续
按下 ENTER 后,系统正常启动:无法获得 root 访问权限来修复问题。我留下这个答案,以防有人在这时候遇到我的情况。使用以下仅当您无法通过 Grub 菜单进入恢复模式时。
获取 root shell 的步骤:
- 启动进入 Grub 菜单,并突出显示(但不要按Enter!)正常(默认,不是恢复!)启动选项。
- 按
e
。Grub 将显示一个包含多行的命令行编辑器,每行看起来可能都不熟悉,但又不吓人。不用担心,您所做的任何更改都不会永久保存。 - 找到 行
linux ... ro ...
。这是内核命令行。将标记替换ro
为rw
,以使根文件系统可读/写,并添加另一个内核命令行参数init=/bin/sh
。这指示内核执行sh
而不是/sbin/init
。最后,该行应如下所示linux ... rw init=/bin/sh ...
。笔记:即使只有简单的提示,你也可以通过grub>
。如果其他方法都失败了,我很乐意一步一步地解释如何操作;只需在这个答案下留言即可。 - 更改后,按F10使用编辑器中的命令来启动系统(或者,如果您的 Grub 编译方式不同,请阅读编辑器窗口下方的启动说明)。您将获得 root shell 提示符,因为 init 进程以 root 身份作为 PID 1 运行。
- 进行您想要的更改,例如
usermod -a -Gadm,sudo YOURUSERID
。使用 确认id -a YOURUSERID
您已恢复 sudo 会员资格。如果您收到“未找到命令”错误,请使用/sbin/usermod
和/bin/id
。 此时您无法彻底关闭或重新启动系统。
reboot
或不起作用,并且从 shellhalt
执行将导致内核崩溃,因为 PID 1 进程不应直接退出。因此您必须发出的下两个命令是:poweroff
exit
sync exec /sbin/init
sync
以防万一出现问题,将所有更改保存到磁盘,并exec
用真实 shell 替换 shellinit
(可以是 systemd、upstart 或 System V init,但始终称为/sbin/init
)。系统很可能会继续正常启动(无恢复模式)。- 登录并重启系统一次,例如
sudo reboot
--您应该已经恢复了 sudo 权限。建议重启,因为(虽然很少见)init
在正常启动期间可能会传递其他参数,而我们没有这样做。如果exec
失败,只需重置机器并让其正常启动。所有现代日志文件系统(如 ext4、xfs 和 btrfs)都可以快速恢复(如果在重置之前进行了日志检查,最多需要几秒钟sync
),然后您就万事俱备了。
背景介绍
有一个关于 Debian 错误报告的讨论关于这个问题,据我所知,这被认定为一个功能,而不是一个错误,我认为这是一个错误。在这个行业工作了 25 年,我不得不完全不同意 Michael Biebl 在消息 #31在该主题中:
考虑一下:您有一台锁定了 root 帐户的笔记本电脑。默认情况下,grub 引导加载程序会为救援模式生成一个引导项。因此,即使您锁定 BIOS 以不允许从 CD-Rom 或 USB 启动,并且您用密码保护 grub,如果您将笔记本电脑暂时无人看管,其他人也可以轻松获得 root 访问权限。
我认为,正确的反对意见(如果不够普遍的话)是在消息 #70作者:Felipe Sateler:
对于许多(大多数?)计算机来说,物理访问意味着游戏在安全性方面丢失,因为您只需拆开盒子并取出硬盘即可。
对于 Michael 的论点中提到的笔记本电脑尤其如此:如果你把它放在一边不管,而有人想偷你的数据,那么笔记本电脑就会消失得无影无踪。而对于任何机器,而不是“很多”或“大多数”,即使是那些用 8 个点螺栓固定在机架上的机器,一旦攻击者获得对机器的物理访问权,游戏就真的结束了。