忘记Linux root密码时,只需重启Linux系统,然后引导进入Linux的单用户模式(init 1),由于单用户模式不需要输入登陆密码,因此,可直接登陆系统,修改root密码即可解决问题。需要说明的是,CentOS6和CentOS7下修改root密码的方式是不同的。
一、RHEL/CentOS6.x及之前修改root密码
操作步骤如下:
1.重启系统,待系统启动到grub引导菜单时,按Esc键,找到当前系统引导项。如果有多个可用内核,则会有多个引导选项。
2.通过方向键定位到需要使用的系统引导内核选项上,然后按键盘e键,进入编辑状态。
3.然后通过上下方向键,选中带有kernel指令的一行,继续按e键,编辑该行,在行末尾价格空格,然后添加single。
4.修改完成后,按Enter键,返回到刚才的界面。
5.最后按b键,系统开始引导。
这样就切换到单用户模式下,单用户模式与Windows的安全模式类似,只启动最基本的系统,网络以及应用服务均不启动。单用户模式启动完毕,系统自动进入命令行状态下,输入passwd,系统提示输入两次新的密码,就可修改密码。
如果需要正常启动系统,只需输入init 3,切换到多用户模式下。用root登陆系统即可。
二、RHEL/CentOS7中修改root密码
在CentOS7.0版本之后,Linux的机制发生了变化。在系统引导方面,使用grub2代替了之前的grub的引导,init初始化程序也更换成了systemd初始化程序,随之而来,root密码重置的方法也发生了变化。
操作步骤如下:
1.重启系统,待系统启动到grub2引导菜单时,找到当前系统引导选项(如果有多个可用内核,则会有多个引导选项),按e键,进入编辑模式。
2.然后通过上下方向键将光标定位到kernel引导行所在行尾,然后添加以下内容
init=/bin/sh
3.添加完成,按Ctrl+x组合键启动shell引导,最后进入单用户模式
4.要挂载根分区为可读写模式,执行如下命令
mount -o remount,rw /
5.这里需要注意,如果系统已开启了SELinux,还需要在根分区中创建autorelabel文件,否则系统无法正常启动。
查看SELinux是否开启
/usr/sbin/sestatus
(如果SELinux开启),创建autorelabel文件(我在操作时,检测到SELinux未开启,但也进行了下面的操作,否则最后一步可能无法重启。不知道不能重启的原因是不是这里)
touch /.autorelabel
6.然后就可以执行passwd命令重置密码了。
passwd
提示输入两次新密码即可。
7.密码修改完后,需要重启
直接执行reboot命令已经无效,需要输入全路径命令
exec /sbin/init
或
exec /sbin/reboot
这样就完成了密码重置,正常登陆系统,查看密码是否修改成功。
(注意:我在输入exec /sbin/init命令后,虚拟机中centos一直没反应,等了差不多一两分钟后才有反应。)
参考:
《循序渐进Linux》第2版 10.1.2章节 P326