
1. 从“进不去系统”说起我为什么要把这个方案写成文档先说个真实场景。项目现场一台跑着麒麟信安系统的服务器因为之前运维同事把root密码设置得过于复杂还开了密码过期策略结果三个月后某天早上怎么输密码都提示错误直接卡在登录界面进不去。你说急不急业务系统还在上面跑着数据库备份、应用日志全都等着要这时候谁也没法淡定了。类似的情况在国产化替代推进之后变得越来越常见。麒麟信安系统作为国内主流的安全操作系统之一被大量部署在政府、金融、能源这些关键行业。但问题在于很多单位的运维人员对它的底层机制并不算特别熟悉平时用root密码登进去做点常规操作没问题一旦遇到密码丢失、密码过期、甚至临时被人改了密码这种突发状况就完全不知道怎么处理。这篇文章就是把我实际处理这类问题的流程完整地梳理一遍。我会讲到绕过登录验证的核心原理、如何进入单用户模式、如何正确地重置root密码以及操作完之后必须做的事项。适合谁看适合所有在项目上维护麒麟信安系统的工程师、刚接手国产化服务器的运维人员也包括那些只会在虚拟机里折腾Linux、但对安全启动和文件系统状态不熟悉的新人。先说清楚一个核心结论在麒麟信安系统上找回root密码靠的不是什么黑客技巧而是你熟悉Linux的启动机制和系统维护模式。方案本身不复杂复杂的是你需要在突发情况下保持冷静并且清楚每一步操作背后的原因。2. 准备工作确认系统版本、硬件环境和可用外设在动手之前有一件事必须提前做——确认你的系统版本和机器形态。麒麟信安系统的版本差异会直接影响启动菜单的展示方式和内核参数的处理逻辑。我见过有人在银河麒麟上用了ARM架构的方式去处理x86机器结果当然是白折腾半天。2.1 先看清系统版本和引导方式你可以在能登录的时候用以下命令确认基础信息cat /etc/os-release uname -a lsblk正常能看到类似这样的输出NAMEKylin Security OS VERSIONV10 IDkylinsec VERSION_IDV10如果连系统都进不去那也没关系我后面会讲在启动界面如何判断。另一个需要确认的是引导方式现在大部分麒麟信安系统默认使用GRUB 2作为引导管理器和传统CentOS 7时代的GRUB有所区别但操作逻辑基本一致仍然是开机时通过编辑启动项来干预引导过程。2.2 硬件形态不同操作入口也不同项目上常见的机器分为物理机和虚拟机两类。物理机的话你要提前了解服务器的管理接口。大部分x86服务器默认通过键盘连接本地终端操作但也有不少机器部署在机房深处只能靠带外管理卡如IPMI、iDRAC、iLO远程挂载虚拟控制台。我强烈建议你在系统正常时就把带外管理配置好否则等到进不去系统时再去翻管理界面那个压力是成倍增长的。虚拟机的话就简单很多。无论你用的是KVM、VMware还是VirtualBox都可以直接通过控制台界面模拟键盘输入。唯一需要注意的是虚拟机的启动速度可能很快你要在GRUB菜单出现的那一两秒内做出反应所以我建议在重置密码前先尝试重启一次观察一下启动节奏别等到正式操作时手忙脚乱。2.3 别忘了准备好键盘和确认重启时机听起来像废话但实际项目中真的有人因为无线键盘在GRUB界面不工作而卡住。建议准备一套有线USB键盘或者确保带外管理控制台的键盘输入切换正常。另外重启系统的时机也要选好。如果机器上跑着数据库或重要业务尽量先联系业务负责人确认可以中断服务或者选择业务低峰期操作。密码重置虽然不会触碰业务数据但重启本身对业务的影响是不可忽视的。提示如果机器处于内网环境、应用了强制访问控制策略如AppArmor或SELinux重置密码后还需重新校验策略操作步骤我会在文末专门说明。准备工作的最后一步是调整心态。密码丢失不是设备损坏数据不会丢系统不会废只要你按步骤来大概率十分钟内就能解决。但前提是你不要跳步每一步都看清楚界面提示再继续。3. 核心机制拆解为什么进入单用户模式就能重置密码很多人只知道“重启后按e编辑内核参数改成single或者init/bin/bash就行”但并不知道这背后的原理。如果只是照猫画虎一旦界面提示和网上的教程不完全一致就很容易放弃。所以这里我用尽量通俗的语言把机制讲透。3.1 Linux系统的运行级与维护模式Linux系统从开机到最终登录一共经历了固件BIOS/UEFI、引导管理器GRUB、内核初始化、init进程现代发行版中为systemd、服务启动这几个阶段。正常情况下init会拉起所有服务最终在tty上显示登录提示符。而单用户模式就是让init只启动最核心的环境不加载网络服务、不加载图形界面、不加载业务进程直接给root一个shell。为什么这样就能重置密码因为登录验证是由用户态程序比如getty、登录服务、PAM模块完成的而单用户模式下的shell是直接由内核或init交给root的不需要经过登录界面。你在那个shell里运行passwd命令修改的是/etc/shadow文件中的密码哈希字段本质上和你平常登录后修改密码的操作没有区别。这里有一个关键前提能够进入单用户模式说明你对这台机器拥有物理或远程终端级别的访问权限。这就是为什么信息安全管理规范里反复强调物理安全和带外管理通道的防护和root密码一样重要。如果任何人都有权限碰机器那密码其实已经失去了意义。3.2 单用户模式、救援模式和临时修改内核参数的区别很多人把这三个概念搞混处理问题时就会走弯路。我列个表格方便对照模式或操作本质适用场景注意事项单用户模式systemd进入isolate rescue.target修改密码、修复文件系统、排查启动故障不需要密码但必须有物理/带外访问权限救援模式通过安装介质进入一个更完整的环境系统GRUB损坏、内核崩溃需要安装镜像或LiveCD临时修改内核参数在GRUB启动项上追加rd.break、init/bin/bash等快速干预引导落地重置密码参数写法因发行版而异麒麟信安系统比较接近RHEL/Fedora的分支习惯常见做法是在GRUB启动项上按e进入编辑然后在linux开头的那一行末尾追加参数。至于具体追加什么我下面会分情况说明。3.3 SELinux和文件系统状态的影响这里必须提一个很多人踩过的坑如果你在单用户模式下修改了密码却没有处理SELinux的安全上下文重启后可能连登录界面都进不去直接掉到另一个故障里。麒麟信安系统默认开启了SELinux安全增强型Linux它以安全上下文标注文件。你在单用户模式下创建或修改/etc/shadow时这个文件的上下文有可能和正常启动时不一致。系统重启后SELinux策略在强制模式下会拒绝某些进程访问这个文件表现就是密码明明改成功了却依然无法登录。如果你确定系统开启了SELinux重置密码后要执行touch /.autorelabel这一个命令的作用是告诉系统在下一次启动时自动重建所有文件的安全上下文标签。不加的话后续的登录问题会非常隐蔽排查起来极其费时。这一点我在后面还会再强调。4. 单用户模式实操从GRUB菜单到密码重置的完整链路现在进入正题。下面这个流程我是在麒麟信安系统V10x86架构上实际跑通过的同时我也会标注哪些环节在不同版本上可能略有差异。4.1 第一步触发GRUB菜单重启系统在开机自检过后、系统进入内核加载之前GRUB菜单会出现。一般会在屏幕上方列出内核版本下方有启动、高级选项等条目。如果你的机器没有显示菜单而直接开始引导你可以尝试在BIOS/UEFI阶段按住Shift键传统BIOS机器或者迅速连续按Esc键某些UEFI固件逼迫GRUB显示菜单。这个时机很考验手感。我的习惯是从重启键按下开始就盯着屏幕以较快速度敲击方向键或Esc键不要等看到大段日志了才动手那样基本来不及。4.2 第二步编辑内核启动参数在GRUB菜单上选中默认的内核项不要直接回车而是按e键进入编辑界面。你会看到一段以linux或linuxefi开头、后面跟着一堆内核参数的行。不同系统的参数略有差异但核心思路一致在这行末尾追加我们需要的关键词。麒麟信安系统常见有两种做法我分别说明适用场景做法A追加single参数... rhgb quiet single这样会让系统进入单用户模式。如果系统正常进入该模式你会看到一个root shell提示符通常类似#开头。这个做法对改动系统状态最少也是我个人最推荐的。做法B改成init/bin/bash... rhgb quiet init/bin/bash这个做法是跳过init进程直接由内核拉起bash作为第一个进程。进入后文件系统是以只读方式挂载的你需要手动执行mount -o remount,rw /来重新挂载为可写状态。这个做法的介入深度更深在一些特殊环境下可能遇到更多兼容性问题建议新手优先用做法A。4.3 第三步执行密码重置进入单用户模式后你的shell环境非常精简很多命令的绝对路径可能没有加载到PATH中。先说一个经验如果提示command not found别慌直接写上完整路径执行常用的命令路径如下命令完整路径举例passwd/usr/bin/passwd 或 /bin/passwdmount/usr/bin/mount 或 /bin/mounttouch/usr/bin/touch 或 /bin/touch正常情况下直接执行passwd root按提示输入两遍新密码即可。如果系统对密码强度有策略限制比如要求至少8位且包含大小写和数字你设置的密码过于简单就会报错。不要图省事直接设置一个合规密码否则后续又要再折腾一遍。4.4 第四步处理SELinux和重启密码修改完成后务必要检查SELinux状态。你可以执行getenforce如果输出是Enforcing那么请按照前面说的执行touch /.autorelabel然后执行重启exec /sbin/init或reboot -f这里解释一下为什么不用普通的reboot命令。因为在某些临时状态下systemd环境不完整普通reboot可能会卡住或提示无法连接systemd。用强制的reboot -f或者exec /sbin/init更直接。重启后系统会正常启动并进入SELinux自动标记流程这个过程视磁盘速度可能持续几分钟耐心等待然后正常登录即可。5. 分支场景一系统启用了Secure Boot时怎么办我在实际的国产化项目中发现很多单位为了满足等保要求会在物理机上启用Secure Boot安全启动。Secure Boot本身是为了防止未签名引导程序被加载但它的副作用是在GRUB界面按e编辑内核参数后实际引导时会对被修改的内核命令行做签名校验。如果校验不通过内核会被直接拒绝加载表现就是黑屏或错误提示。5.1 判断是否启用了Secure Boot如果你在重启过程中看到类似Verification failed: (0x1A) Security Violation的提示或者系统直接卡在一个蓝屏界面不用怀疑大概率就是Secure Boot在起作用。5.2 绕过思路临时禁用Secure Boot在BIOS/UEFI设置界面中找到Secure Boot相关选项一般位于Security或Boot菜单下。把它设置为Disabled保存退出后再操作GRUB。这个操作是临时的等密码重置完成后建议重新开启Secure Boot以免系统安全基线降低。但这里有个问题部分单位对BIOS设置有严格管控不允许随意修改。这种情况你需要走设备厂商或安全管理员的手续在获得授权的前提下操作。不要为了图快私下关闭安全功能这是合规层面的大忌。5.3 另一个思路检查是否支持MOK管理有些Linux发行版提供了Machine Owner KeyMOK机制可以为自签名的GRUB模块或修改过的启动项提供签名。但麒麟信安系统在默认配置下对普通运维人员而言使用这个机制的门槛较高需要在系统内配置签名的efi stub、导入公钥等操作复杂度远超直接重置密码这个目标本身。所以我的建议是除非你对UEFI签名机制非常熟悉否则项目现场优先走临时禁用Secure Boot的路线。6. 分支场景二单用户模式进不去或无法重置密码并不是所有情况都那么顺利。我遇到过两次单用户模式根本进不去的情况这里把典型问题和对应处理写清楚。6.1 现象一进入单用户模式后卡在登录提示符按步骤追加了single参数但系统没有直接给我们root shell而是仍然出现了密码输入提示或登录提示符。这通常是PAM配置或systemd服务策略导致的。麒麟信安系统出于安全考虑某些版本可能要求单用户模式也需要验证root密码这就绕回了原点。替代方案是使用rd.break强制在切换根文件系统之前中断引导在GRUB启动项上找到linux开头的那一行在末尾追加rd.break保存后启动系统会在内存根文件系统initramfs阶段停下来出现一个提示符并显示类似switch_root:/#的界面。此时根文件系统还没有切换你需要手动把实际的系统盘挂载过来mount -o remount,rw /sysroot chroot /sysroot如果/sysroot目录里没有内容说明系统盘挂载不对可以先执行lsblk查看磁盘分区把根分区手动挂载到/sysroot下再chroot。进入chroot环境后执行passwd root然后退出chroot并重启exit reboot -f6.2 现象二文件系统以只读方式挂载如果你用了init/bin/bash方式进入执行passwd时报错cannot change password或类似的写入失败提示那就是根文件系统还是只读状态。手动执行mount -o remount,rw /再执行passwd root。这个操作原理很简单——Linux内核在早期引导阶段默认把根文件系统以只读方式挂载免得引导过程中写入脏数据在正常启动流程中init之后会重新以读写方式挂载。我们绕过init直接进bash自然就还停在只读挂载状态。6.3 现象三密码重置成功但新密码无法登录这种情况我前面提过大概率是SELinux上下文问题。你已经执行了touch /.autorelabel吗如果没执行重启后系统其实不会自动重打标签。可以在单用户模式下先确认ls -Z /etc/shadow你会看到类似system_u:object_r:shadow_t:s0这样的上下文。如果上下文在修改过程中变成了unconfined_u:object_r:default_t:s0之类的类型SELinux就有可能拒绝登录进程读取。重打上下文的方式仍然是执行touch /.autorelabel后重启这次重启会稍微久一些属于正常现象。7. 重置完成后不能忽略的事安全合规与系统加固密码重置完成、系统能正常登录了这个事件的处置还没有真正结束。如果忽略后续的加固动作下次密码丢失只是时间问题而且可能引发更严重的安全隐患。7.1 修改密码过期策略很多系统在装机时默认开启了密码过期策略。密码过期本身是好事但如果没有给运维人员留出足够的更换窗口就会造成我开头说的那种“突然进不去”的情况。我建议根据项目的实际情况设置策略比如chage -M 90 root chage -W 7 root意思是密码最长使用90天提前7天开始提醒。你还可以用chage -l root查看当前策略。如果是应急操作记得在重置完成后告诉使用者马上记录新密码到单位的密码保管箱或指定管理员处不要只在个人聊天工具里发一下就算了。7.2 检查安全启动和SELinux是否依然开启如果你在操作中临时关闭了Secure Boot请务必在系统正常进入后回到BIOS把它重新打开。同样的确认SELinux状态getenforce如果显示为Permissive或Disabled需要检查是不是操作过程中被意外更改了。麒麟信安系统作为等保合规环境安全模块未处于强制模式可能触发告警这一点要和单位安全管理员同步。7.3 更新运维交接文档我见过太多项目故障发生时才发现上一任运维留下的交接文档里root密码还是错的或者过期的。密码重置是一个很好的触发点趁着这次操作把系统的关键信息更新一遍包括但不限于系统版本、IP地址、部署的服务root密码保管位置和更换周期带外管理卡的访问方式和账号口令已知的特殊启动参数、Secure Boot状态最近一次备份的时间和备份方式把这些写进文档不是为了应付审计而是为了下一次突发情况时接手的人能够少走弯路。7.4 操作系统日志审计如果你不是这台机器的唯一管理员这件事还有另一个角度需要考虑密码重置操作会不会是异常行为的一部分在重置密码后建议检查一下last journalctl -u sshd --since today看一下在故障发生前后是否有异常登录尝试、非预期的重启记录等。如果发现异常要第一时间联系安全团队排查。这不是多余很多真实事件都是从一次“忘记密码”开始的。8. 关于物理访问权限和应急管理的一点个人经验处理过几次现场故障之后我越来越觉得root密码丢失这件事本身不可怕真正可怕的是没有一套清晰的应急管理机制。我见过一些单位把root密码写在一张便利贴上贴在显示器边框上方便倒是方便但这等于把账号和口令暴露给所有路过的人绝对不可取。反而是一些做得好的团队有密码保险箱、有职责分离、有定期轮换系统安全基线高出问题的概率反而低得多。在应急场景下我个人的习惯是如果条件允许尽量避免在生产业务时段直接操作。哪怕密码丢了业务还在运行就还有缓冲时间可以先通过带外管理卡进系统把服务状态和服务启停方式摸清楚再择机重启重置。如果业务中断不受控仍然需要马上处理那至少要在群里知会相关同事减少“误判为故障”的干扰信息。最后聊一个小细节如果你在GRUB编辑界面改了参数却没做任何记录事后想复现或排查问题会很头痛。建议每次故障处理完把改了什么参数、为什么改、最终的恢复路径是什么都写入内部知识库。这不只是为了下一次也是为了帮你自己在越来越多的系统之间切换时不至于搞混版本差异。麒麟信安系统本质上仍然是Linux体系入口变了、工具链变了但核心逻辑没有变。花一个下午把它彻底搞清楚之后你会发现在国产化系统上做运维并没有想象中那么陌生。下次再遇到同事火急火燎地求助“root密码忘了”你可以淡定地走一遍上面的流程然后把这篇文档甩给他。