ARTICLE DETAIL

资讯详情

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

银河麒麟V10 SP3双密码遗忘救援:GRUB与root密码重置实战指南

银河麒麟V10 SP3双密码遗忘救援:GRUB与root密码重置实战指南 前阵子帮一家客户处理了一台银河麒麟V10 SP3服务器情况很典型上一任管理员给GRUB启动菜单加了密码又把系统root密码改了然后人直接失联。设备摆在机房里业务验收在即开机到GRUB菜单这一步就卡死按e要密码按c也要密码现场同事对着屏幕干瞪眼最后只能把问题抛给我远程加现场配合处理。这种“双密码遗忘”故障在麒麟系统运维里其实并不冷门。GRUB密码和系统密码是两层独立的认证任何一个忘了都进不了系统两个一起忘就是完全锁死。这篇指南就围绕V10 SP3的实测救援展开会一步步讲清楚如何借助安装镜像进入救援模式、通过chroot清理GRUB密码配置、重置root密码也会覆盖GRUB命令行手动引导、grub minimal bash故障修复、磁盘加密等特殊场景的处理办法。不管你是刚接手二手服务器还是自己手抖把密码弄丢了只要设备在物理上可触碰照着做大概率能救回来。整套操作仅适用于自有设备或已获授权的运维场景。1. 双密码遗忘先把救援思路理清楚1.1 双密码到底锁在哪个环节先明确一个概念银河麒麟V10 SP3的双密码和Windows那种“双账户”不是一回事。它指的是GRUB引导器的超级用户密码加上系统的root或普通用户登录密码两层独立认证叠在一起。GRUB密码是写死在启动器配置里的。常见的设置方式是管理员在/etc/grub.d/00_header里追加set superusers和password_pbkdf2配置然后用update-grub把脚本合并生成/boot/grub/grub.cfg。一旦设置生效在GRUB菜单里按e要密码、按c进命令行也要密码相当于把系统引导入口焊死。很多人不理解为什么GRUB也要锁密码其实它的意义在于防止有人通过修改内核启动参数绕过系统登录认证——这是Linux救援逻辑里最经典的一条后门路径。系统登录密码是用户认证层的东西由PAM和/etc/shadow管理。理论上GRUB没锁的情况下只要能在菜单里编辑内核参数就能想办法绕过认证进入系统。但GRUB密码一锁这条后门也被堵上这就是双密码同时遗忘时一定要从引导器层开始解的根本原因。我从实战角度把救援逻辑总结成一句话GRUB密码本质上只是配置文件里的字段我们要做的不是“破解”它而是绕开它进入一个能写文件系统的环境把这个字段删掉或替换。理解了这点后面所有操作都不会乱。1.2 三种现场情况对应三条救援路线实际操作之前先按你手头的现场条件对号入座。不同情况的操作路径差很多选错了会白白浪费时间现场情况推荐做法需要的前提GRUB密码、系统密码都忘了用系统ISO进救援模式chroot后清理GRUB密码并重置root密码有同大版本的系统镜像、能插U盘或光驱GRUB没锁root密码忘了在GRUB菜单按e修改内核参数进入bash重置密码有物理控制台或IPMI远程控制台GRUB配置损坏出现minimal bash提示在GRUB命令行手动指定分区、内核和initrd引导记得系统盘分区结构、内核版本号拿到故障机先别急着做启动盘。按电源开机看它在哪一步停下来。如果卡在GRUB菜单要求输用户名密码基本判断是GRUB配置还在只是被密码锁住走ISO救援最稳。如果开机直接黑屏、光标闪烁或者跳出grub minimal bash like line editing is supported这种提示那是引导配置本身出问题了处理思路要换成手动引导。先把现场情况摸清楚能省掉至少两小时的盲目尝试也避免反复重启对磁盘文件系统造成二次损伤。2. 救急启动盘这样准备救援才不卡壳2.1 为什么用Ventoy而不是直接写盘救援的第一步是做一个能启动的介质。很多人习惯用dd把ISO二进制写入U盘或者用各种刻录工具直接烧录这两个办法在麒麟系统救援场景下都不够灵活。我实测下来最推荐Ventoy。它的原理是把U盘做成一个引导管理器你只需要把ISO文件拷贝到U盘根目录开机选择对应ISO就能启动。好处有三个第一U盘可以同时放多个版本的ISO比如V10 SP3桌面版和服务器版各放一个现场缺什么都能应对第二U盘剩余空间还能正常存文件不用专门准备一个“纯启动盘”第三Ventoy对麒麟这类Debian系镜像的兼容性已经比较成熟不用反复试验写盘方式。如果你手头实在没有第二个可用U盘又赶时间也可以用装系统时留下的安装光盘或者用iLO、iDRAC这类带外管理工具的虚拟光驱挂载ISO道理一样。重点是确保介质能引导版本最好和故障机同属V10系列。跨大版本进入救援模式不是不行但后面chroot时可能遇到库里依赖差异没必要给自己加难度。2.2 UEFI和Legacy启动模式别搞混启动盘做好之后在BIOS/UEFI设置里把启动顺序调整成U盘优先。这里有个特别容易踩的坑UEFI和Legacy两种固件引导模式。麒麟V10 SP3服务器版默认多是UEFI引导老设备才是传统BIOS。从U盘启动时如果固件菜单里出现同一U盘的多个启动项一个带UEFI前缀一个不带一定要选和原系统安装方式一致的那个。选择错误最典型的影响是救援模式能进、系统盘能挂载、命令全部正常但最后重新安装GRUB时会因为固件接口不匹配而写错位置甚至直接导致启动条目丢失救援变二次事故。快速判断原系统引导模式的土办法进救援模式挂载系统后看/boot/efi目录是否存在。如果存在且里面有grub或EFI/kylin之类的文件说明是UEFI没有的话基本是传统BIOS。后面执行grub-install时UEFI平台要加--targetx86_64-efi传统BIOS不加。这一条记不住的话很容易在最后关头功亏一篑。3. 全程实测ISO救援模式重置GRUB密码与root密码3.1 进救援模式把原系统盘挂载起来这是整个救援过程的核心动作我把执行过程一步步拆开讲。用Ventoy启动盘选择麒麟V10 SP3 ISO后会看到安装器菜单。菜单里一般有安装项也可能有“系统修复助手”或类似修复救援入口。优先选修复类入口如果ISO没有单独提供修复模式就选试用或Live桌面环境在终端里操作效果一样。进到救援环境后第一步是识别硬盘和设备节点。执行lsblk和fdisk -l先把所有磁盘和分区结构看清楚。常见布局有两种一种是/boot和根分区在同一块盘上只是普通分区另一种是服务器版常用的LVM布局/boot单独分出来根分区是逻辑卷。普通分区布局的执行参考以根分区为nvme0n1p2为例mkdir -p /mnt/sys mount /dev/nvme0n1p2 /mnt/sys mount /dev/nvme0n1p1 /mnt/sys/boot # 有独立boot分区才需要 mount --bind /dev /mnt/sys/dev mount --bind /proc /mnt/sys/proc mount --bind /sys /mnt/sys/sys mount --bind /run /mnt/sys/run chroot /mnt/sys /bin/bashLVM布局则要先激活卷组再挂载vgscan vgchange -ay ls /dev/mapper/ mkdir -p /mnt/sys mount /dev/mapper/kylin-root /mnt/sys # 实际卷名以vgdisplay输出为准 mount /dev/nvme0n1p1 /mnt/sys/boot # 后续bind和chroot命令同上这里有个很容易被忽略的细节挂载根分区之后/dev、/proc、/sys这些目录必须全部就位chroot进去才能正常执行命令。尤其是/proc和/sys不bind的话update-grub或grub-mkconfig很可能报奇怪错误你会误以为是配置文件坏了其实只是虚拟文件系统没挂全。3.2 用chroot清理GRUB密码配置chroot成功进入原系统后先确认GRUB密码写在哪里。不同管理员习惯不同有人写到/etc/grub.d/00_header有人单独建了/etc/grub.d/01_users还有人直接修改/boot/grub/grub.cfg。所以在chroot环境里先做一次全目录搜索grep -rn password_pbkdf2\|superusers /etc/grub.d/ grep -n set superusers\|password_pbkdf2 /boot/grub/grub.cfg定位到位置后先把文件备份再删除或注释密码配置。以修改/etc/grub.d/00_header为例cp /etc/grub.d/00_header /etc/grub.d/00_header.bak sed -i /password_pbkdf2/d;/superusers/d /etc/grub.d/00_header update-grubupdate-grub的执行逻辑是把/etc/grub.d/下的脚本合并生成新的/boot/grub/grub.cfg。因为密码字段已在源头清理新生成的配置文件自然没有密码。这是最稳妥的比你直接手改grub.cfg干净也经得起系统更新时重新生成配置的考验。如果不想彻底删除GRUB密码只想换成自己知道的新密码可以用grub-mkpasswd-pbkdf2生成新的密文把00_header里的password_pbkdf2字段替换后再update-grub。这种方式适合有安全基线、要求GRUB必须开启密码的企业环境密码被人为清掉反而违反合规要求。3.3 顺手完成root密码与普通用户密码重置GRUB密码清理完之后在同一个chroot环境里接着做系统密码重置两步不用分开跑passwd root passwd kylin # 换成实际需要重置的用户名执行过程中会要求输入两次新密码。这里提醒一下新密码尽量不要和旧密码太相似也别用公司名加年份这类容易猜的组合。麒麟系统对密码复杂度校验普遍比较严格设置太简单会被PAM策略直接拒绝。如果不知道系统里有哪些普通用户可以看/etc/passwd里uid在1000以上的条目或者直接翻/home目录确认getent passwd | awk -F: $3 1000 {print $1}重置完成后退出chroot、卸载所有挂载点然后正常重启exit umount -R /mnt/sys reboot到这一步GRUB菜单密码和系统密码都已经恢复正常。重启后进GRUB不需要密码系统用新密码也能登录。整体看下来救援过程核心依赖的就三件事能进救援环境、能挂载文件系统、会操作chroot。这也是Linux系统管理员早晚要熟练掌握的基本功。4. 不依赖镜像的备选方案GRUB命令行硬核引导4.1 菜单能进但root密码忘了改内核参数偷渡如果没有安装镜像但GRUB菜单没有被密码锁住还有一条更快的路。开机到GRUB菜单后选中要进入的内核条目按e进入编辑界面。菜单文本里找到以linux开头的那一行行尾追加一个内核参数init/bin/bash然后按CtrlX或F10引导。引导完成后会直接进入bash shell但这时根文件系统多半还是只读状态先重新挂载成读写再执行passwd重置mount -o rw,remount / passwd root exec /sbin/init使用这条路线有两点要注意。第一只对没有开启完整磁盘加密的系统有效如果根分区是LUKS加密的启动过程中不输入密码无法解锁改内核参数也没用。第二部分安全策略较严的版本会对启动参数做检查init/bin/bash可能被安全模块拦下这种情况不要硬用老老实实回第3节的ISO救援路线。顺便说一句很多人问能不能用single参数代替init/bin/bash。麒麟系统上single进入的确实是单用户模式同样能重置密码但有些版本在单用户模式下会要求先输入root密码才给shell等于白搭。init/bin/bash直接跳到bash会话实际用下来更省事。4.2 遇到minimal bash手动指定内核启动如果开机后看到grub minimal bash like line editing is supported这种黑底白字提示说明GRUB能找到自身代码但找不到grub.cfg配置文件掉进了一个功能受限的最小shell。这种情况不能等它自己恢复得手动引导系统进到运行环境再从系统内部修复配置。手动引导的思路是告诉GRUB根分区在哪、内核文件在哪、initrd文件在哪然后boot。用Tab键做补全能帮你快速定位可用分区和文件grub ls (hd0) (hd0,gpt1) (hd0,gpt2) grub set root(hd0,gpt2) grub linux /boot/vmlinuz-4.19.90-89.11.v2101.ky10.x86_64 root/dev/mapper/kylin-root ro grub initrd /boot/initrd.img-4.19.90-89.11.v2101.ky10.x86_64 grub boot内核版本号要根据机子上实际安装的来填不用照抄。如果/boot是独立分区上面linux和initrd两行的路径要去掉/boot前缀写成/vmlinuz-...和/initrd.img-...。进系统之后重新生成GRUB配置并安装引导器恢复后续启动能力update-grub grub-install /dev/sda如果需要把引导器安装到主驱动器安装时注意设备名要写整块磁盘比如/dev/sda不是分区/dev/sda1。麒麟安装器检测到引导缺失时通常也会提示“将grub启动引导器安装至您的主驱动器”顺着引导执行一次就好。这类损坏多半是升级中断、意外断电或磁盘调整导致处理完这步就能恢复正常冷启。5. 实测中踩过的坑整理成速查表给你5.1 grub minimal bash故障与修复要领minimal bash这个报错我在救援现场见过很多次而且常常和密码问题一起出现。典型场景是管理员用分区工具调整分区大小或者把系统盘clone到新硬盘后UUID对不上GRUB在启动时找不到配置文件直接掉shell。修复要领就四条先ls看清分区存在与否摸清哪个分区是/boot再用set root把根分区指对然后按第4.2节手动boot进系统最后一定记得update-grub并检查grub.cfg里的UUID。检查命令cat /boot/grub/grub.cfg | grep search\|uuid | head -20 lsblk -f对比blkid输出和grub.cfg里的UUID不一致就重新生成配置或重装引导。很多人在手动引导进去后忘了重建配置结果下次开机又掉回minimal bash白忙一场。如果你用的是克隆盘或迁移过的系统这一步尤其不能省。5.2 磁盘加密和安全模块拦路怎么办如果装系统时勾了磁盘加密救援难度会上升一个档次。LUKS加密状态下用ISO救援模式挂载根分区时系统会提示输入加密口令。这一步绕不过去不存在“忘记口令还能解开LUKS”的通用办法。所以操作前务必确认要么记得加密口令要么系统没开加密。遇到加密口令也忘了的现实中基本只能走数据恢复或重建系统别指望任何救援命令能帮你绕过。另一个拦路的是安全增强模块。麒麟V10 SP3部分版本会启用内核安全模块对启动参数和系统配置有较严格的完整性约束。实测中init/bin/bash方式在某些内核参数策略下会被拒绝表现就是看起来引导成功却卡在空壳shell或者直接重启。我的经验是遇到安全策略拒绝不要反复换参数硬试直接转ISO救援模式加chroot方案。后者面对安全模块时要可靠得多因为是以挂载编辑原系统文件的方式操作不涉及启动参数层面的绕过。5.3 重置后黑屏、引导丢失的善后处理密码重置成功并不代表万事大吉重启阶段还可能遇到两种情况我在不同机器上都踩过。第一是系统启动到一半黑屏或卡在桌面加载之前。这多半不是救援操作的问题而是显示驱动或图形服务状态异常。处理方式是进GRUB菜单按e在linux那行末尾追加nomodeset参数先绕过显卡驱动强制加载的问题进系统后更新驱动或调整显卡配置。第二是重启后提示找不到操作系统或引导器损坏。这通常发生在对UEFI设备执行了错误平台参数的grub-install之后。解决思路是重新进救援环境挂载系统盘确认/boot/efi和/run这些目录都挂载到位再执行一次正确平台参数的安装。UEFI机器大致如下mount /dev/nvme0n1p1 /mnt/sys/boot/efi mount --bind /dev /mnt/sys/dev mount --bind /proc /mnt/sys/proc mount --bind /sys /mnt/sys/sys chroot /mnt/sys /bin/bash grub-install --targetx86_64-efi --efi-directory/boot/efi --bootloader-idkylin update-grubSecure Boot相关提示也常在这环节冒出来。固件开了Secure Boot的话引导器要经过签名校验麒麟官方驱动器和模块一般没问题但手动重建引导器时有可能因为ESP分区没挂载到位而报错。把/boot/efi这类ESP分区挂对是排查这类报错的第一动作。6. 救援成功后的防锁死策略6.1 密码分层保管别把鸡蛋放一个篮子救援完成之后很多人过两天又开始裸奔等下次密码丢了再来一轮。与其反复折腾不如趁这次把密码管理机制建立起来。GRUB密码和系统密码属于不同安全层级不要存在同一张便签、同一个记事本里。企业内部建议放到两个独立保管人手里一个管BIOS/GRUB这层物理引导口令一个管系统账户口令。这样既避免单人全知全能也防止权限交接时一次性把所有秘密带走。对于个人管理的小规模机器至少也要把密码写进正规密码管理工具并开启双因子验证而不是记在手机备忘录里。如果负责设备较多建议给每台机器做一张信息卡记录主机名、IP、磁盘分区布局、LVM卷组名、是否启用LUKS、GRUB是否加锁等。密码本身不在这张卡上但它能让你在下一次救援时省掉大量摸索时间——比如直接知道卷组叫什么、boot分区在哪不用临时翻fdisk输出。6.2 预留一个不用密码也能走通的恢复通道最后分享一个自己坚持的做法每台重要服务器都会额外准备一个不被GRUB密码和系统密码双重锁死的恢复通道。最简单的形式是一个标好版本号、固定存放的Ventoy启动U盘里面放好对应系统的麒麟ISO外加一张纸质的引导备注写上分区结构和LVM卷组名。别小看这个动作成本几乎为零但在双密码遗忘、grub配置损坏这类绝境里往往是唯一能把你从机柜前捞回来的东西。虚拟化平台上的虚拟机则给虚拟光驱挂一个常用救援ISO并确认带外管理控制台能访问物理机把IPMI、iLO的账号密码单独归档。我在实际救援过程中最深的体会是双密码问题的难度往往不在技术上而在对设备细节的熟悉程度上。每次帮人救完我都会建议他们把分区结构、引导方式、密码分层这三样东西固定记录。准备工作做得越细现场需要试错的次数就越少。下次再遇到锁机直接照本指南走一遍基本半小时内能重获控制权。
返回列表