忘记root密码解决方案
新版的systemd管理机制中,默认的rescue模式无法直接获取root权限,还是得要使用root才能登入rescure环境! 通过一个名为rd.break的内核参数来处理即可!只是需要注意的是, rd.break是在Ram Disk里面的操作系统状态,因此你不能直接取得原本的linux系统操作环境。 所以,还需要chroot的支持! 由于SELinux的问题,可能还得要加上某些特殊的流程才能顺利的搞定root密码的恢复!
(1)systemctl reboot重启;
(2)进入到开机画面,在可以开机的选单上按下e来进入编辑模式,然后就在 linux16 的那个内核项目上面使用这个参数来处理:
图 19.4.1、通过 rd.break 尝试救援 root 密码
改完之后按下 [crtl]+x 开始开机,开机完成后屏幕会出现如下的类似画面,此时请注意, 你应该是在RAM Disk 的环境,并不是原本的环境, 因此根目录底下的东西跟你原本的系统无关喔! 而且,你的系统应该会被挂载到/sysroot目录下,因此,你得要这样作:
Generating "/run/initramfs/rdsosreport.txt" Enter emergency mode. Exit the shell to continue. Type "journalctl" to view system logs. You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot after mounting them and attach it to a bug report. switch_root:/# # 无须输入密码即可取得 root 权限! switch_root:/# mount # 检查一下挂载点!一定会发现 /sysroot 才是对的! .....(前面省略)..... /dev/mapper/centos-root on /sysroot type xfs (ro,relatime,attr,inode64,noquota) switch_root:/# mount -o remount,rw /sysroot # 要先让它挂载成可擦写! switch_root:/# chroot /sysroot # 实际切换了根目录的所在!取回你的环境了! sh-4.2# echo "your_root_new_pw" | passwd --stdin root sh-4.2# touch /.autorelabel # 很重要!变回 SELinux 的安全本文~ sh-4.2# exit switch_root:/# reboot上述的流程你应该没啥大问题才对~比较不懂的,应该是(1)chroot是啥? (2)为何需要 /.autorelabel这个文件?
chroot目录:代表将你的根目录暂时切换到chroot之后所接的目录。 因此,以上表为例,那个/sysroot将会被暂时作为根目录, 而我们知道那个目录其实就是最原先的系统根目录, 所以你当然就能够用来处理你的文件系统与相关的账号管理啰!
为何需要 /.autorelabel:在rd.break的RAM Disk环境下,系统是没有SELinux的,而你刚刚更改了/etc/shadow(因为改密码啊!), 所以这个文件的SELinux安全本文的特性将会被取消喔! 如果你没有让系统于开机时自动的回复SELinux的安全本文, 你的系统将产生无法登入的问题 (在 SELinux 为Enforcing 的模式下!) 加上/.autorelabel就是要让系统在开机的时候自动的使用预设的SELinux type重新写入SELinux安全本文到每个文件去!。
不过加上/.autorelabel之后,系统在开机就会重新写入 SELinux 的 type 到每个文件,因此会花不少的时间喔! 如果你不想要花太多时间, 还有个方法可以处理:
在rd.break模式下,修改完root密码后,将/etc/selinux/config内的SELinux类型改为permissive
重新启动后,使用root的身份下达restorecon -Rv /etc仅修改/etc底下的文件;
重新修改/etc/selinux/config改回enforcing ,然后setenforce 1即可!
initroot编辑整理,转载请注明www.initroot.com
100次点赞
100次阅读