在Linux系统管理中,忘记管理员密码是一个常见但令人头疼的问题,尤其是在CentOS这类企业级操作系统上,由于CentOS默认采用root权限进行核心操作,密码丢失可能导致系统无法正常维护,通过以下几种方法,你可以在不破坏系统数据的情况下安全重置密码,本文将详细介绍不同场景下的解决方案,并确保操作步骤清晰易懂。

进入单用户模式重置密码(适用于传统BIOS系统)
对于使用传统BIOS引导的CentOS系统,单用户模式是最直接的密码重置方式,具体操作步骤如下:
重启系统并进入GRUB菜单
开机后立即按下Shift或Esc键(具体按键取决于系统版本),进入GRUB引导界面,如果无法手动触发,可以尝试在启动时按住Esc键不放。编辑GRUB启动参数
在GRUB菜单中选择要启动的CentOS内核,按e键进入编辑模式,使用方向键找到以linux16或linux开头的行,在该行末尾添加init=/bin/bash参数,这会使系统启动至bash环境而非完整的多用户模式。以只读模式挂载根文件系统
默认情况下,系统以只读模式挂载根分区,输入命令mount -o remount,rw /重新挂载为读写模式,确保后续修改可以生效。修改密码
使用passwd root命令输入新密码并确认,完成后,输入exec /sbin/init或执行reboot -f重启系统,此时root密码已更新,正常登录即可。
注意事项:部分新版本CentOS可能启用了SELinux,重置密码后可能需要执行touch /.autorelabel让系统在下次启动时重新标记文件安全上下文,避免权限异常。
通过急救模式(Rescue Mode)重置密码(适用于UEFI系统)
对于采用UEFI引导的CentOS 7及以上版本,单用户模式可能被禁用或隐藏,此时可通过急救模式解决:
进入GRUB编辑界面
同样在开机时按下Shift或Esc键进入GRUB菜单,选择内核后按e键编辑。修改启动参数
找到以linuxefi或linux开头的行,删除ro参数并替换为rw init=/sysroot/bin/sh,同时添加rd.break参数,使系统在启动早期进入急救模式。
切换到系统根目录
系统会中断启动并进入switch_root:/#提示符,执行chroot /sysroot命令切换到系统的实际根目录。重置密码并更新SELinux
使用passwd命令修改root密码后,由于处于chroot环境,需执行touch /.autorelabel确保SELinux策略正确,最后输入exit退出chroot,执行reboot -f重启系统。
关键点:UEFI系统的启动参数修改逻辑与BIOS系统略有不同,需特别注意参数格式的准确性。
使用Live CD/USB介质重置密码(当GRUB无法访问时)
如果GRUB菜单被锁定或无法编辑,可通过Live CD或启动U盘进行密码重置:
准备启动介质
下载CentOS对应的ISO文件,使用工具如Rufus或Ventoy制作可启动U盘。启动Live环境
从U盘启动CentOS,选择“Troubleshooting”→“Rescue a CentOS system”进入急救模式,或直接选择“Run Live System”进入临时桌面环境。挂载原系统分区
使用fdisk -l或lsblk命令查看原系统分区,通常为/dev/sda2或/dev/nvme0n1p2,执行mount /dev/sda2 /mnt挂载根分区,若存在单独的/boot分区,需额外挂载。修改密码文件
切换到挂载点后,执行chroot /mnt进入系统环境,使用passwd命令修改密码,或直接编辑/etc/shadow文件,将root密码字段替换为$6$开头的加密字符串(可通过openssl passwd -1生成新密码)。重启并验证
退出chroot环境,执行reboot并移除U盘,使用新密码登录。
风险提示:直接编辑/etc/shadow文件需谨慎,错误的格式可能导致系统无法启动,建议优先使用passwd命令。
预防密码丢失的措施
为了避免再次遇到类似问题,建议采取以下预防措施:
启用GRUB密码保护
通过编辑/etc/grub.d/01_users文件并运行grub2-mkconfig,为GRUB菜单设置启动密码,防止未授权修改启动参数。配置密钥登录替代密码
使用SSH密钥对进行远程登录,禁用密码认证,在/etc/ssh/sshd_config中设置PasswordAuthentication no,并重启sshd服务。定期备份重要配置
定期备份/etc/shadow、/etc/grub.d/等关键文件,以便在紧急情况下快速恢复。使用密码管理工具
部署企业级密码管理器(如KeePass、Bitwarden),或利用系统自带的pwmake工具生成高强度密码并妥善存储。
FAQs
Q1:重置密码后无法登录,提示“Authentication failure”怎么办?
A:可能原因包括SELinux未正确标记、密码文件权限错误或密码格式异常,首先检查/etc/shadow文件权限是否为600,root用户权限为400,若使用chroot环境修改密码后未执行touch /.autorelabel,需在重启时进入单用户模式执行该命令,确认密码中无特殊字符或过长字符(超过256位),某些系统可能限制密码长度。
Q2:CentOS 8 Stream无法进入单用户模式,如何解决?
A:CentOS 8 Stream默认使用systemd,可通过在GRUB参数中添加systemd.unit=rescue.target替代init=/bin/bash,具体操作:编辑GRUB启动行,在末尾添加systemd.unit=rescue.target,启动后会进入emergency模式,执行mount -o remount,rw /后使用passwd修改密码,最后执行systemctl reboot重启,若仍无法进入,可尝试systemd.unit=emergency.target进入更基础的救援环境。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复