能正常登录时用passwd命令即可重置密码;若root密码彻底丢失,则必须通过GRUB编辑启动参数(如rd.break或init=/bin/bash)进入救援模式,在SELinux系统中还需执行touch /.autorelabel并正确重启。

如果你能正常登录系统(哪怕只是普通用户),passwd 命令就能解决绝大多数密码修改需求;但一旦 root 密码彻底丢失且无其他可用账户,就必须通过 GRUB 启动参数干预——这不是“教程”,而是紧急救援操作,每一步都影响系统能否恢复。
普通用户或 root 登录后改密码:用 passwd 就够了
只要当前 shell 有对应权限,passwd 是唯一需要的命令:
- root 用户改任意用户密码:
passwd username,输两次新密码即可 - 普通用户改自己密码:
passwd(不带参数),会校验旧密码再设新密码 - 想绕过旧密码校验(需 root 权限):
echo "newpass" | passwd --stdin username,但 CentOS/RHEL 8+ 默认禁用--stdin,得先确认系统支持 - 密码太简单被拒绝时,提示里写的是
BAD PASSWORD: The password fails the dictionary check,不是错误,继续输完两次仍会生效,但建议避开字典词和序列如123456
GRUB 编辑启动参数:选 rd.break 还是 init=/bin/bash
两者都能进单用户环境,但适用场景和风险点不同:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
rd.break是 RHEL/CentOS/麒麟等 systemd 系统的标准救援方式,进入的是 initramfs 环境,根文件系统还没挂载,必须执行mount -o remount,rw /sysroot和chroot /sysroot才能操作真实系统 -
init=/bin/bash更“粗暴”,直接跳过 systemd,挂载根目录后就能用passwd root,但 Ubuntu/Debian 系统可能因缺少/bin/bash或 SELinux 上下文异常而卡住 - 编辑时务必在内核行末尾加空格再追加参数,例如原行结尾是
quiet splash,要改成quiet splash rd.break,少一个空格会导致内核参数解析失败,直接黑屏 - 某些虚拟机(如 VMware)在
init=/bin/bash模式下执行reboot容易卡死,此时应关机再开机,而非软重启
SELinux 环境下重置密码后必须做 touch /.autorelabel
如果你的系统启用了 SELinux(默认开启于 RHEL/CentOS/麒麟),仅改密码不重建上下文,重启后可能卡在登录界面或 SSH 拒绝连接:
- 执行
touch /.autorelabel是告诉 SELinux:下次启动时自动重新标记所有文件的安全上下文 - 这步不能省,也不能用
restorecon -Rv /替代——因为此时文件系统还没完全挂载,restorecon会报错 - 执行完
touch后,必须用exec /sbin/init或reboot -f重启,不能只输exit就退出——否则系统停留在 initramfs 里,无法真正重启 - 如果不确定是否启用 SELinux,可在救援模式下运行
getenforce,返回Enforcing或Permissive就必须加touch
别碰 /etc/shadow 手动清空密码字段
网上有些教程教人用 vi /etc/shadow 把 root 行第二个字段(密码哈希)删成空,这看似快,但实际埋雷:
- 清空后 root 可免密登录,但多数发行版(尤其是启用了 PAM 的)会直接拒绝空密码,导致根本登不进去
- 手动编辑容易误删其他字段(比如第 3–7 字段是密码老化策略),造成后续
passwd命令异常或账户锁定 - 在
rd.break模式下,真实/etc/shadow位于/sysroot/etc/shadow,编辑错路径等于白干 - 正确做法永远是走
passwd root,它会自动处理加密、盐值、PAM 钩子和 shadow 字段更新,不会出兼容性问题
最常被忽略的其实是键盘布局和输入法——救援模式下默认是 US 键盘,按 Shift + 2 出来的是 @ 而不是 ",输密码时若习惯性用中文符号,会输错却毫无提示。建议重置前先敲几个字符确认回显是否符合预期。

















