我在将帐户添加到网上论坛时犯了同样的错误(忘记了-a
)。我安装了系统,并锁定了root登录名,而我的帐户是计算机上唯一的帐户。
被接受的答案对我没有帮助。进入恢复模式时,我得到的只是一条无用的信息
根帐户已锁定,无法打开对控制台的访问。有关更多详细信息,请参见sulogin(8)手册页。
按ENTER键继续
在按ENTER键之后,系统正常启动:不能获得root用户访问权限来解决问题。如果有人到此为止都没穿上鞋子,我将留下这个答案。仅当无法通过Grub菜单进入恢复模式时,才使用以下选项。
获得根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
,halt
否则poweroff
将无法正常运行,并且exit
由于不希望PID 1进程直接退出,因此从外壳程序将导致内核崩溃。因此,您必须发出的下两个命令是:
sync
exec /sbin/init
sync
以防万一出问题,将所有更改保存到磁盘,然后exec
用real替换外壳程序init
(可以是systemd,upstart或System V init,但始终称为/sbin/init
)。系统很可能会继续正常启动(无恢复模式)。
- 登录并重新启动系统一次,例如
sudo reboot
--您应该已经获得了sudo特权。建议重新启动,因为(尽管很少)init
可能会在正常启动期间传递其他参数,而我们没有这样做。万一exec
发生故障,只需重置计算机并使其正常启动即可。所有现代日志文件系统(例如ext4,xfs和btrfs)都可以快速恢复自身(如果sync
在重置之前使用ed ,最多需要几秒钟的日志检查时间),您便会万事俱备。
有点背景
在Debian错误报告中,有一个关于此问题的讨论,据了解,这被确定为功能而非错误,我认为这是一个错误。从事这项业务已有25年,我不禁完全不同意该线程中消息#31中Michael Biebl的说法:
请考虑以下问题:您有一台笔记本电脑的root帐户已锁定。默认情况下,grub引导加载程序会生成用于救援模式的引导条目。因此,即使您锁定BIOS不允许从CD-Rom或USB引导,并且使用密码保护grub,如果您暂时不使用笔记本电脑,也可以轻易获得root访问权限。
费利佩·萨特勒(Felipe Sateler)在消息70中给出了正确的IMO(即使不够普遍)的反对意见:
对于许多(大多数?)计算机而言,物理访问意味着游戏失去了安全性,因为您只需拆开包装盒并获得硬盘驱动器即可。
迈克尔的论点中提到的笔记本电脑尤其如此:如果您暂时将其放在无人看管的地方,并且有人在追寻您的数据,那么笔记本电脑将被淘汰,再也不会被看到。对于任何机器,不是“很多”或“最多”的机器,即使是那些用8点螺栓固定在机架上的机器,一旦攻击者获得对机器的物理访问权,游戏就真正结束了。