ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Kylin v11忘记root密码?rd.break救援模式完整重置指南

Kylin v11忘记root密码?rd.break救援模式完整重置指南 1. 先捋清楚现在的单用户救援模式还灵不灵麒麟Kylin v11的root密码忘了第一反应肯定是进单用户救援模式重置root密码。这个思路没错但现在的Kylin v11不像老版本那样敲个single就能免密登进去了。新版系统基于systemd启动链路由initramfs、systemd、target逐级拉起传统的单用户模式已经变成rescue.target而且默认情况下进入这种模式系统会要求你输root口令。这就尴尬了root密码都忘了还怎么进救援模式所以真正干活的思路要改一下不是去等系统把服务拉起来再弹一个登录框而是想办法在内核初始化的早期阶段拿到一个shell。这个阶段系统里还没有用户态认证逻辑root密码校验根本没机会执行我们就能在这个shell里直接把密码改掉。整篇文章围绕的就是这条技术路线通过修改GRUB启动参数借道initramfs里的rd.break钩子进入救援shell再chroot到真实系统完成root密码重置。这条路在Kylin v11的物理机、虚拟机上都实测可行背后涉及的内容包括GRUB参数写法、sysroot挂载、passwd命令、SELinux标签处理、LUKS加密盘限制等下面逐步拆开讲。这套方法不只有忘密码这一个用途。如果你遇到系统起不来、rsyslog挂了但登录后shutdown命令又不好使或者只想去掉某个异常的开机自启动服务也可以用这里的思路。只要你能在GRUB菜单里编辑启动项后面的大多数维护操作就都能做了。1.1 重新理解Kylin v11的启动链路要不再翻旧手册掉坑得先看明白Kylin v11启动时到底做了哪些事。以UEFI引导为例整个启动顺序大致是固件 - GRUB2 - 内核与initramfs - systemd - 各target。GRUB读取/boot/grub2下的配置文件加载内核镜像和initramfs。initramfs是一个微型根文件系统里面包含了磁盘驱动、LVM、加密模块这些基础组件任务是把真正的系统盘识别并挂载起来然后切根switch_root进入你的系统根目录再交给systemd继续启动。rd.break这个参数的作用就是在initramfs完成了一半工作、但还没有做switch_root之前打断它直接给你一个root shell。这个阶段你的真实系统根目录已经在/sysroot下只是通常以只读方式挂着。这就是救援模式的本质不是传统意义上的登录框而是让你在用户态服务全都还没起来的时候手动干活。1.2 什么时候才用这套方案一说重置root密码很多人条件反射就是重装系统。重装确实快但生产环境里的业务数据、应用配置、数据库实例全都得迁移代价往往比想象中大得多。root密码丢失属于典型的能修就不重装场景单用户救援模式就是用来处理这类问题的。用这套方法的前提条件也很明确你至少得能操作机器的控制台或虚拟机管理终端能看到并编辑GRUB菜单。如果机器已经进了顽固的启动死循环或者磁盘物理故障那就不是密码恢复能解决的了别硬套。另外如果这台机器用了LUKS整盘加密在rd.break之前系统会先弹加密口令输入界面。只用知道加密盘密码才能继续往下走如果加密盘密码也忘了那下面的操作就做不到。这属于一个很关键的边界条件。2. 动手前先花两分钟做确认准备工作往往比操作本身更能决定成败。很多教程上来就让你改GRUB结果一顿操作后发现连菜单都进不去或者进去后不知道哪个设备是根分区最后卡在半路。下面这几件事建议先走一遍。2.1 确认你的系统版本和引导方式麒麟操作系统的发行型号很多Kylin v11这个叫法在不同场景里可能对应桌面版、服务器版、ARM版、AMD64版引导方式有可能是传统的BIOSMBR也可能是UEFIGPT。不过对于重置root密码来说核心操作是一致的都是编辑GRUB启动条目。区别只在你按e进入编辑界面后启动行是叫linux还是linuxefi以及要不要去掉rhgb quiet这种图形参数。用下面命令可以快速确认版本但如果你已经进不了系统就只能靠回忆或者另一台同版本机器来判断了。cat /etc/kylin-release cat /etc/os-release grub2-editenv list我建议你在有条件的机器上提前把这些信息记下来尤其是根分区是什么类型。比如根是LVM逻辑卷、还是普通ext4分区、还是btrfs子卷这会影响到一会chroot之后要不要激活卷组。多数Kylin v11默认安装会走LVM但在initramfs阶段LVM其实已经被激活了所以大部分时候不用手动处理。2.2 需要的工具其实就这两样不要被救援模式四个字吓住需要的东西不多能显示控制台的屏幕和键盘或者虚拟机的VNC/vSphere控制台一条可以稳定打字的手GRUB编辑界面没有复制粘贴依赖键盘不需要U盘不需要LiveCD也不需要任何外接介质。整个操作发生在本机系统内部只要你还进得了GRUB菜单就够用了。如果机器在机房可以提前告诉自己要盲操作开机后不停按Esc或F2看厂商固件习惯严格说GRUB菜单出现前一般会有提示但响应窗口很短。2.3 优先建立备份意识和风险清单虽然操作核心只是改密码但涉及GRUB参数和内核引导万一改错可能导致系统起不来。我的习惯是在动手前先把GRUB里当前启动项的完整命令行用手机拍下来或者抄在纸上。这样就算改坏了也可以按原样敲回去。另一个保险是如果机器有快照功能虚拟机都有先打个快照物理机没有快照就得谨慎点别在没确认磁盘状态的情况下乱敲命令。3. 逐步实操从GRUB参数到root密码重置下面进入正题。以一个典型的Kylin v11 AMD64系统为例完整流程分四步。每一步我都把可能遇到的分叉写法写出来你对照自己的情况选。3.1 在GRUB菜单里修改内核启动参数重启机器在GRUB菜单出现时用方向键选中默认启动项按下字母e进入编辑模式。这时候你会看到一堆以set、insmod、linux、initrd开头的内容我们要改的是那个以linux开头的行也可能是linuxefi取决于平台。把光标移动到该行末尾在最后的参数后面加一个空格然后输入rd.break顺便建议把同一行里的rhgb和quiet去掉。rhgb是图形化启动画面quiet是隐藏内核日志去掉之后你能看到滚动输出出问题时更容易定位。修改完之后按CtrlX或者F10执行启动。这时候系统会加载内核进入initramfs随后停在rd.break中断点弹出一个root shell。需要注意GRUB编辑改动是临时的只针对本次启动有效不会写入grub.cfg重启后自动恢复。这一点既是优点也是陷阱优点是改错了重启一下还能回到原样缺点是如果你这次没把密码改成功下次开机还要再进一遍GRUB。3.2 在initramfs的shell里挂载真实根文件系统进入rd.break的shell后你可能看到提示符类似switch_root:/#这就是initramfs环境。在这个环境里你的真实系统根目录已经被挂到了/sysroot下。先确认一下当前状态mount | grep sysroot ls /sysroot正常情况下/sysroot下就是Kylin系统的目录结构bin、etc、usr这些目录都在。不过当前一般是只读挂载。要修改里面的东西先给它重新挂载为读写mount -o remount,rw /sysroot这一步很关键漏掉的话后面chroot进去一执行passwd就会报read-only file system错误。如果你用了LVM但到这里还没激活卷组可以手动激活一下lvm vgscan lvm vgchange -ay在大多数默认安装场景下这一步不需要如果发现/sysroot是空的多半是逻辑卷没起来激活之后再检查。3.3 chroot到真实系统并重置root密码挂载状态没问题后用chroot把当前shell的根目录切换到/sysroot这样后续所有命令都作用在真实系统上chroot /sysroot /bin/bash进入之后可以先加一条环境变量避免后续出现奇怪的locale问题:LANGen_US.UTF-8 export LANG然后就是非常普通的改密码命令passwd root系统会提示输入两次新密码。这里我多说一句Kylin默认对密码复杂度有要求别设一个太短的弱密码。命令执行成功后会显示类似all authentication tokens updated successfully的输出。这是整个流程最关键的一步看到这个提示后密码就已经改掉了。如果你还想顺手做点别的维护现在也可以做。比如查看系统日志或者排查某个服务为什么起不来。但注意chroot环境里不是所有命令都能直接跑很多systemctl操作要依赖完整的systemd运行状态这种场景下不一定好使。3.4 处理SELinux上下文并安全退出如果你的Kylin启用了SELinux强制模式直接改了/etc下文件的安全上下文之后重启时系统可能因为文件标签不对而拒绝登录或起不来。稳妥做法是在chroot环境里执行touch /.autorelabel这个操作会告诉SELinux在下次启动时自动重新标记文件系统。不用纠结你有没有启用SELinux没启用的话这个空文件存在那里也无害下次启动就会消失启用的话这步绝对能帮你省掉一次重装。所有事情处理完后连续输入两次exit退出chroot和initramfs的shell。如果想稳妥地让系统重新引导可以执行reboot -f。注意别直接在chroot里用reboot因为此时你还在initramfs环境里直接重启会中断得比较粗暴。我习惯是回到switch_root提示符后执行reboot -f。机器重新启动后正常进入登录界面这时候用小键盘输你刚设置的新root密码就行。如果一切正常就完事了。4. 常见问题与我踩过的那些坑这部分是实际操作里最容易卡住人的地方。我把自己遇到和见过的问题整理成一张速查表后面再补几条经验。4.1 问题速查表现象可能原因解决办法按e没反应GRUB菜单出不来开机阶段手速不够GRUB菜单超时被跳过开机后连续点按Esc或Shift有的UEFI机器要按F12进启动菜单选GRUB加rd.break后黑屏rhgb、quiet没去掉内核日志被隐藏删除这两个参数重新引导对照串口或截图看卡在哪一步进shell后发现/sysroot是空目录LVM卷组没激活执行lvm vgscan; lvm vgchange -ay再查看chroot后执行passwd报read-only file system根文件系统还是只读挂载检查是否执行了mount -o remount,rw /sysrootpasswd成功了重启后还是旧密码没真正保存到/etc/shadow确认是在chroot /sysroot后的真实系统里执行不是initramfs的临时环境系统有LUKS加密盘卡在解密界面磁盘加密口令无法绕过解密口令没忘才可能继续整盘加密口令丢失只能走备份恢复路径重启后进不去SELinux策略下的桌面修改过的文件安全上下文异常启动时在内核行再加入enforcing0临时关闭进系统执行restorecon -Rv /etc或setenforce 14.2 几条不写在官方文档里的经验第一GRUB编辑界面的键盘布局可能是英文如果你的root密码里本来带中文相关字符设置新密码时最好只用ASCII字符免得在密码框里找不到对应键。第二很多系统改完密码不成功核心原因都是没理解chroot边界。你看到shell提示符再花哨只要没做chroot改动就落在initramfs内存盘里重启必然丢。第三RD.break中断点出现的提示符虽然不起眼但这里实际上拥有完整的磁盘驱动和基础命令集能做的事情比想象得多不只改密码。还有一个很容易被忽略的细节如果你是在虚拟机里操作并且虚拟机接入了云平台的密码管理服务重置密码后最好去云平台侧也同步更新一下托管密码否则下次平台侧自动同步时又可能把密码覆盖回去。物理机的话就没这个问题但要注意管理卡和BIOS的口令别和系统root口令混着用否则又得一轮新的忘记密码流程。另外GRUB本身也可能设了密码。如果这台机器在安装后刻意对GRUB做了口令保护你会发现连按e都进不去编辑界面那就只能找有GRUB口令的人协助或者通过物理介入手段恢复了。绝大多数默认安装不会有这个问题但高安全要求的服务器上必须提前想到。我在实际运维里还试过另一条路径不打断initramfs而是用systemd.unitrescue.target直接进救援模式。但对忘了root密码的机器来说这条路可能卡在密码提示上还不如rd.break来得干净。后来我基本固定就用rd.break方案逻辑简单步骤少唯一要记住的就是root系统是挂在/sysroot下的。操作过几次之后整套流程大概两三分钟就能走完几乎不会出岔子。后面如果你遇到类似的系统维护场景比如想修改某个grub启动参数做临时调试这套思路是完全通用的。
返回列表