在CentOS 7.4系统中,忘记root密码是一个常见但棘手的问题,由于系统默认启用了SELinux和GRUB2引导加载程序,传统的单用户模式破解方法已不再适用,本文将详细介绍通过GRUB2引导菜单重置root密码的完整流程,同时涵盖必要的安全注意事项和操作细节,帮助用户在不破坏系统安全性的前提下恢复访问权限。

准备工作:启动与中断引导
在开始密码破解操作前,需要确保能够访问服务器的物理控制台或远程控制台(如iDRAC、iLO或KVM),重启CentOS 7.4系统,在出现GRUB引导菜单时,迅速按下e键进入编辑模式,GRUB2菜单通常在启动后几秒内显示,具体时间可通过/etc/default/grub文件中的GRUB_TIMEOUT参数调整,进入编辑模式后,你会看到以linux16或linuxefi开头的内核参数行,这是我们需要修改的关键部分。
修改内核参数以进入紧急模式
定位到以linux16或linuxefi开头的行,使用方向键将光标移动到该行末尾,添加rd.break参数,这个参数会中断正常的引导流程,进入系统的紧急模式(emergency mode),此时系统会以只读挂载根文件系统,并允许执行有限的修复操作,修改完成后,按下Ctrl+X或F10键以修改后的参数启动系统。
重新挂载根文件系统为可读写模式
系统进入紧急模式后,会自动切换到一个临时的switch_root环境,此时需要重新挂载根文件系统为可读写模式,以便修改密码文件,执行以下命令:
mount -o remount,rw /sysroot
该命令会重新挂载/sysroot目录(即系统的根分区)为读写模式,如果系统提示设备已挂载为只读,可能是SELinux上下文限制导致,可尝试使用chcon -t file_contexts /sysroot命令调整安全上下文后再执行挂载操作。
切换到系统根环境并修改密码
完成根文件系统重新挂载后,需要通过chroot命令切换到系统的实际根环境:

chroot /sysroot
执行此命令后,命令提示符会变为sh-4.2#,表示已进入系统的根环境,现在可以使用passwd命令重置root密码:
passwd root
根据提示输入两次新密码,如果密码过于简单,系统可能会给出警告,但不会阻止设置,为了确保密码安全性,建议使用包含大小写字母、数字和特殊字符的组合密码。
更新SELinux安全上下文(重要步骤)
CentOS 7.4默认启用SELinux,直接修改密码文件会导致SELinux标记异常,可能导致系统服务异常,在退出chroot环境前,必须执行以下命令更新SELinux上下文:
touch /.autorelabel
该命令会在下次重启时自动重新标记所有文件的安全上下文,确保系统安全性,如果省略此步骤,系统可能会在后续启动过程中出现权限错误,导致SSH登录失败或其他服务异常。
重启系统并验证密码
完成所有操作后,依次执行以下命令退出并重启系统:

exit reboot -f
系统会重启并进入正常引导流程,由于设置了.autorelabel文件,首次启动可能会比平时耗时更久,这是正常现象,重启后,使用新设置的root密码登录系统,验证登录是否成功,如果登录失败,可检查/var/log/secure日志文件排查问题。
安全注意事项与最佳实践
密码破解操作涉及系统底层修改,存在一定风险,建议在操作前备份重要数据,特别是如果系统运行关键业务,破解完成后应立即检查系统日志,确认是否有异常登录尝试或系统配置变更,对于生产环境,建议配置SSH密钥认证而非密码认证,并启用failban等工具防止暴力破解,定期更新系统密码和启用双因素认证(2FA)是提升安全性的有效措施。
相关问答FAQs
Q1:如果GRUB菜单没有出现,无法进入编辑模式怎么办?
A1:如果GRUB菜单默认隐藏,可在启动时按下Esc键强制显示,若仍无法显示,可在重启时长按Shift键,对于虚拟机,可通过控制台设置调整GRUB显示时间,如果问题持续,可能需要通过救援模式(rescue CD)或PXE网络启动进行修复。
Q2:重置密码后系统无法启动,提示SELinux错误如何处理?
A2:这通常是由于未正确执行touch /.autorelabel命令导致,可通过CentOS安装光盘进入救援模式,执行chroot /mnt/sysimage后手动运行touch /.autorelabel,然后重启系统,若问题依旧,可能需要使用restorecon -Rv /命令手动恢复SELinux上下文,或检查/etc/selinux/config文件确保SELINUX=enforcing设置正确。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复