ARTICLE DETAIL

资讯详情

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

麒麟Kylin v11单用户模式重置root密码实战指南

麒麟Kylin v11单用户模式重置root密码实战指南 忘掉root密码这事放在任何Linux发行版上都够头疼的在国产操作系统上更是容易让人手忙脚乱。尤其像麒麟Kylin v11这种既能跑在国产CPU整机上、也能装在虚拟机里的系统如果你手上刚好有台配置好环境却想不起密码的机器或者是从同事手里交接过来一台“密码未知”的服务器单用户救援模式就是最常用的救场手段。我用这套方法在Kylin v11桌面版、v10 SP1服务器版上都实际操作过折腾过UEFI引导的机器也试过在VMware里救砖整个过程说难不难但确实有几个关键坑不提前搞清楚容易卡在只读文件系统、SELinux标记这类细节上。这篇文章直接围绕麒麟Kylin v11来写给你完整走一遍单用户救援模式重置root密码的流程附带参数说明、踩过坑的排查记录以及“重置之后立刻要做的几件事”。不管你是系统运维、测试环境搭建还是刚入职接手内网机器的新手照着这个流程走下来应该都能把密码找回来。1. 动手前的必知概念为什么用单用户救援模式1.1 单用户模式到底是个啥单用户模式Single User Mode是Linux系统里一种极简启动方式启动后不会加载常规的服务、网络、图形界面而是直接进入一个root权限的命令行Shell。它最初的设计目的是让管理员执行系统修复比如修复损坏的fstab、排查驱动问题、以及重置忘记的密码。说得通俗点正常开机是“全家老小都上班”单用户模式则是“只把保安叫来开门”这样你就能在不被任何服务干扰的情况下进入系统底层操作。麒麟Kylin v11虽然面向国内政企和日常桌面场景做了很多定制但底层依然是基于Linux内核和GNU工具的体系。它的引导流程和RHEL/Fedora分支比较接近所以单用户救援相关的操作思路、命令格式和CentOS、Rocky这些系统几乎一致。这意味着你如果在其他Linux发行版上有过类似经验迁移到麒麟上不会有什么障碍。1.2 为什么重置密码要走引导参数这条路很多人会想到用LiveCD启动后挂载硬盘直接改/etc/shadow这个方法当然可行但前提是你手头得有对应架构的Live镜像麒麟一个ISO通常好几个G不一定随时都有还得考虑SELinux安全上下文的问题——改动过的shadow文件如果权限或标记不对系统启动时甚至可能导致认证异常。相比之下单用户救援模式直接复用你机器上已有的内核和initramfs不需要额外准备任何引导介质只需在GRUB菜单里动手脚就行是最省事、最不容易引入新问题的办法。另外麒麟v11在默认安装时通常会启用SELinux目标策略用单用户模式重置密码还有一个隐藏好处我们可以在同一个流程里顺手处理SELinux的自动重标记避免系统下次启动时出现奇怪的登录失败或服务拒绝访问问题。LiveCD方案反而容易漏掉这一环。1.3 适用场景和不适用场景适合用单用户模式的情况包括忘记root密码系统还能正常引导到GRUB菜单从同事那里接手机器只知道普通用户密码但不知道root密码账号被锁定比如passwd -l操作需要通过救援模式解除锁定系统提示密码过期但你不知道旧密码无法正常轮换不太适合的场景GRUB菜单损坏或引导器丢失这种要去重建引导不是重置密码能解决的硬盘被LUKS加密且你没有解密密钥单用户模式也进不去需要先解决加密问题系统处于网络远程状态你没法到物理控制台操作这种情况最好走带外管理如IPMI或找现场人员配合2. 完整重置步骤从开机界面到新密码生效2.1 第一步进入GRUB编辑界面开机后看到麒麟的启动菜单通常是蓝色或黑色背景列出多个内核版本时需要快速按下键盘上的e键。注意不是回车是eedit这个操作会进入GRUB的编辑模式让你临时修改启动参数。如果你的机器开机速度很快来不及按键就进了系统可以试试在BIOS/UEFI里关闭快速启动或者开机时长按Shift键强制显示GRUB菜单。麒麟v11在部分国产固件上默认可能隐藏菜单这种情况下Shift比Esc更可靠——我在某台基于飞腾CPU的整机上实测按Esc容易直接退出到固件设置界面按Shift反而能稳定调出引导菜单。使用虚拟机VMware Workstation或ESXi的话在虚拟机开机瞬间把鼠标点进虚拟机窗口内然后快速按e配合快捷键CtrlG捕获鼠标操作时间会更充裕。2.2 第二步定位内核引导行并追加参数进入GRUB编辑界面后你会看到一大段以load_video、set gfxpayload等开头的脚本配置不用理会那些直接寻找以linux开头的那一行。在Kylin v11上这行的典型样式是linux /vmlinuz-4.19.90-... root/dev/mapper/kylin-root ro quiet splash不同机器上内核版本、root设备路径可能不同但核心特征是linux开头、包含ro参数、后面跟着quiet或splash之类的内容。用方向键把光标移动到这行末尾在行尾追加以下参数两者选其一即可我更推荐第二种rd.break或者init/bin/bash参数解释rd.break是dracutinitramfs生成工具提供的一个调试参数它让系统在切换根文件系统之前先暂停落入一个特殊的shell提示符。此时根文件系统尚未切换但硬盘上的实际系统根目录会挂载在/sysroot下面。init/bin/bash则是让内核直接启动到bash不经过systemd适合快速进入救援环境。但这个方案受SELinux限制多一些后面要说。如果你还看到quiet或splash顺手把它们删掉也行这样启动过程会打印更多日志方便观察有没有报错。不过这不是必须操作嫌麻烦的可以不动。修改完成后按CtrlX或F10启动系统。如果你的主板快捷键不同GRUB编辑界面底部会有提示留意一下即可。2.3 第三步进入救援Shell并挂载文件系统如果使用了rd.break参数系统启动过程中会停下来出现类似下面的提示符switch_root:/#此时你处于一个极简的initramfs环境中。先用下面的命令确认一下根文件系统的状态mount | grep sysroot正常情况下你会看到类似/dev/mapper/kylin-root on /sysroot的输出说明真正的系统根目录已经挂在/sysroot。但这一阶段通常是只读挂载直接修改密码会失败所以要先重新挂载为读写模式mount -o remount,rw /sysroot然后需要把实际的系统根目录切进去让后续命令操作的是真正的系统环境chroot /sysroot如果你的引导参数用的是init/bin/bash那么系统会直接停在一个bash提示符下并且根分区同样处于只读状态。此时需要执行mount -o remount,rw /然后再进行后续操作。这里有个容易混淆的点rd.break和init/bin/bash两种方式进入的Shell环境不同挂载状态也不同。用rd.break时你最后要退出两次先exit退出chroot再exit退出switch_root机器才会继续启动用init/bin/bash时你改完密码后不能简单exit因为init进程已经变成了bash退出它会直接触发内核panic或者卡住应该在修改完成后直接执行exec /sbin/init或reboot -f来恢复启动流程。2.4 第四步执行密码重置现在你已经在真正的系统根目录环境下了。直接运行passwd root系统会提示输入两次新密码。这里有个重要提醒麒麟v11对密码强度默认有一定要求如果你设得太简单比如123456或passwordpasswd命令会拒绝修改或者给出警告。我遇到过最小长度限制是8位以上的策略建议直接设一个包含大小写字母、数字和特殊字符的强密码省得来回折腾。密码重置成功后系统会提示passwd: all authentication tokens updated successfully。此时如果你所在环境启用了SELinux还需要做一个额外操作——创建自动重标记文件。不做的后果是密码虽然改了但系统下次启动时可能因为SELinux的安全上下文问题拒绝某些登录操作或服务启动表现为卡在登录界面、root无法登录、图形界面循环重启等。touch /.autorelabel这个文件会在下次开机时触发SELinux对整个文件系统重新打标签。如果机器配置比较老这个过程可能持续几分钟到十几分钟看起来像“卡死了”其实是在后台跑restorecon耐心等就好。2.5 第五步退出并重启分两种进入方式来看使用rd.break进入的先退出chroot环境exit然后再次exit系统会继续执行之前被暂停的启动流程最终正常进入多用户模式。如果想立刻重启也可以在switch_root提示符下执行exec /sbin/init或者直接reboot -f使用init/bin/bash进入的直接执行exec /sbin/init这一步会重新拉起systemd作为1号进程系统会继续走正常的启动流程。如果该命令执行后没反应或报错也可以强制重启reboot -f重启后在登录界面输入你刚刚设置的新root密码理论上就可以顺利进入系统了。3. 实操要点与避坑清单3.1 文件系统只读问题这是新人最容易栽的坑。你进入救援Shell后直接运行passwd rootcmd会提示密码修改成功但你重启后发现密码根本没变原因就是你修改的是内存中的临时状态或者写入时因为只读文件系统而静默失败——严格来说passwd会报错但报错信息一闪而过很多人没注意看。判断当前文件系统是不是只读最直接的办法是随便创建个测试文件touch /test_write_check如果提示Read-only file system说明必须先执行挂载命令。成功挂载后再试试删除这个测试文件rm -f /test_write_check确认可写后再执行后续操作。3.2 SELinux自动重标记的取舍很多教程只字不提SELinux但国产操作系统、尤其麒麟服务器版在安装时默认启用SELinux的情况非常常见。你改密码时系统会自动更新/etc/shadow的相关上下文但因为是在救援模式下操作的某些文件的安全上下文可能没有被正确更新这时touch /.autorelabel就是一张保险单。不过要注意自动重标记完成后这个文件会被系统自动删除。如果你重启进入系统后再次查看发现.autorelabel还在说明重标记过程没执行或没走完需要检查SELinux状态、引导日志。另一种做法是修改/etc/selinux/config把SELINUXenforcing临时改成SELINUXpermissive重启后再改回来——不推荐这种操作容易忘记改回来导致系统安全策略被无意放宽。3.3 GRUB编辑后的“一次性”特性GRUB编辑模式下修改的参数只在本次启动生效不会持久化。这其实是个优点——你不用担心改坏了导致系统永久异常。但与之相对的是如果你在编辑时不小心改了root参数或者删错了行系统可能会引导失败出现类似Kernel panic - not syncing的报错。此时不用慌直接强制断电重启重新进入GRUB编辑界面检查参数即可。我个人的习惯是每次编辑后先拍照或者手抄一下原始引导行内容万一改出问题还能对照恢复。对于不熟悉的机器这一步很值得做。3.4 关于update-grub的一个小建议如果你在系统正常运行后想“固化”这次的修改虽然正常情况下我们不改引导参数可以在重启进入系统后执行sudo update-grub或者在麒麟v11上用sudo grub2-mkconfig -o /boot/grub2/grub.cfg这样可以基于当前实际配置重新生成引导菜单把系统里可能残留的错误引导项清理掉。不过这个操作和密码重置本身没有直接关系做与不做都行只是我习惯在救援完成后顺手固化一下引导配置。3.5 实体机与虚拟机的操作差异在VMware虚拟机里操作时追加引导参数后可能需要等几秒才能看到反馈不要因为界面没反应就反复快捷键。在实体机上需要注意键盘布局——有些国产工控机的键盘可能是欧式布局或特殊排列/键的位置可能跟你的预期不一样追加参数时尽量在命令行界面里逐字确认。另外如果虚拟机配置了UEFI安全启动GRUB编辑功能理论上会被限制。但根据我的实测麒麟v11默认不会强制开启这个限制只要你不修改引导文件签名单次编辑参数是允许的。如果遇到Failed to load image或签名验证失败的报错回到虚拟机设置的固件类型里把安全启动临时关掉重置完密码再开回来即可。4. 常见问题与排查实录4.1 进入不了GRUB菜单怎么办这是最打击人的情况。尝试以下排查思路开机时按住Shift键不松手Legacy BIOS模式或者连续点按EscUEFI模式看看引导菜单是否出现如果主板是国产固件比如昆仑固件可能需要进BIOS里调整“启动时显示引导菜单”或“GRUB超时时间”相关选项把延时从0秒改成3秒以上检查/boot/grub2/grub.cfg中是否有GRUB_HIDDEN_TIMEOUT这类设置如果是0开机时会直接静默跳过菜单。这个问题可以在能进系统时修改/etc/default/grub并重新生成配置来根治如果GRUB菜单彻底丢失操作思路会转向“用安装ISO引导后重建GRUB”那是另一个复杂话题需要单独用一篇来说4.2 提示“Authentication token manipulation error”在重置密码时偶尔会遇到Authentication token manipulation error这个报错通常说明/etc/shadow这个文件有异常比如处于只读挂载、文件被锁、文件权限不对。依次检查执行mount | grep / 确认根分区挂在读写模式执行ls -l /etc/shadow正常情况下权限应该是----------所有者是root如果所有者异常可以用chown root:shadow /etc/shadow修正个别情况下shadow文件本身被chattr i加了不可变标志执行lsattr /etc/shadow看一下如果有i属性用chattr -i /etc/shadow去掉后重试这种问题在我处理的一台被加固过策略的麒麟v11服务器上真实遇到过当时就是安全基线脚本给shadow文件加了不可变属性导致passwd无法写入。4.3 密码改好了但重启后自动登录卡死这个表现更像SELinux下面两种冲突叠加的结果。建议这样处理重新走一遍救援模式进入系统环境先检查/etc/selinux/config里的状态值执行touch /.autorelabel确保重标记文件存在退出重启后在GRUB菜单的高级选项里选择带(rescue)字样的内核项进入带网络连接的救援模式观察启动日志如果确认卡在SELinux的relabel过程可以耐心等待10到20分钟再强制重启一般第二次启动就正常了。我有一次在一台老旧实体机上等relabel等了近半小时一度以为机器坏了其实是SELinux在逐个文件打标签慢是因为磁盘读写速度一般。4.4 系统提示“account is locked”这种情况常见于多次输错密码、安全策略锁定或者被人手动passwd -l过。进入救援模式后不要只顾着改密码还要检查并解除锁定passwd root如果输出显示passwd: Account is locked, password cannot be changed需要先执行passwd -u root然后再重置密码。这个操作在运维里经常被忽略我见过不少人反复重置密码却一直登不进去最后才发现是锁定状态没解除。4.5 桌面版卡在图形界面登录环麒麟v11桌面版有一个比较特殊的情况root密码重置成功后图形界面登录框可能依然提示密码错误但用CtrlAltF2切换到字符终端或CtrlAltF1到F6之间切换TTY却能正常用root登录。这通常是显示管理器如LightDM或GDM缓存了旧的认证状态或者和密码模块之间同步出现了延迟。最简单的处理是在字符终端登录后重启显示管理器sudo systemctl restart lightdm或者直接sudo reboot大多数情况下重启一次就能解决图形界面登录问题。如果还是不行检查一下/etc/pam.d/里是否有自定义的认证配置干扰了图形登录。5. 重置密码后的收尾与预防别让救援白做5.1 及时验证SELinux标记和密码策略开机进入系统后第一件事不是急着跑业务而是验证密码修改是否彻底生效getenforce如果输出Enforcing说明SELinux正常强制模式。然后试着用su -从普通用户切换root或者直接注销重新用root登录确认认证流程全部OK。接着检查密码策略是否符合你的预期chage -l root这个命令会显示root账号的密码过期时间、最小修改间隔等。如果之前系统策略设置了密码立即过期你可能需要重新设置chage -M 99999 root否则下次登录可能又会被强制要求改密码。5.2 用密钥登录减少对密码的依赖密码重置只是解决燃眉之急长期来看我更建议在服务器上配置SSH公钥登录特别是对远程运维的机器。这样即使密码再次丢失或被人改掉只要密钥文件在自己手里依然能通过ssh进入系统。举个例子在本地生成密钥ssh-keygen -t ed25519然后把公钥拷贝到服务器ssh-copy-id root服务器IP后期再把/etc/ssh/sshd_config里的PasswordAuthentication改成no让密码认证彻底禁用同时一定要保留能用的密钥。这样密码遗忘带来的影响就会被大幅降低。5.3 把root密码统一纳入密码管理体系单台机器重置密码不难麻烦的是几十台服务器各有各的密码。身边有同事用Excel记录密码也有团队引入密码管理软件。我的建议是如果只是少量的测试机或开发机那就用类似pass这样的本地密码管理工具配合Git仓库同步加密保存所有机器密码。如果是生产环境尽量用堡垒机或统一认证平台这不光解决密码遗忘问题也能让密码轮换、访问审计变得可控。5.4 顺便检查系统里有没有其他安全隐患在救援模式下你能进入系统底层这是一个很好的“整体体检”机会。既然已经站在root视角了别只盯着密码可以顺手做几个检查passwd -S root看root账号状态。awk -F: ($30){print $1} /etc/passwd列出所有UID为0的账号正常情况下应该只有一个root如果出现其他账号说明系统里可能存在特权账号需要核实来源。last -n 20查看最近的登录记录看看有没有异常登录行为。如果本次救援发生在你不知情的情况下建议排查一下机器是否被入侵。5.5 从实际体验谈一谈麒麟系统的密码策略最后分享一个细节。麒麟v11在默认安装完成后系统里/etc/login.defs中关于密码复杂的配置会比传统CentOS严格一些具体表现是最小密码长度往往设置了8位而且pam_pwquality模块默认启用。这就意味着你不仅要在重置时设一个复杂密码还要保证这个密码能通过系统的质量检测。如果确实因为业务需要设置简单密码比如某些专用内网测试环境可以通过修改/etc/security/pwquality.conf把minlen调低并注释掉强制复杂度选项。不过我还是建议以强密码为主如果内网环境有等保、密评这类合规要求密码复杂度是逃不掉的硬指标。写在最后的个人体会单用户救援模式重置root密码严格来说是个老生常谈的Linux入门运维操作但放到麒麟Kylin v11这个具体的发行版上还是会因为SELinux策略、引导器实现差异、国产固件的行为差异遇到各种“意料之外”的小问题。我自己在VMware里虚拟机测试时第一次就栽在没挂载读写文件系统导致密码表面成功实际无效浪费了近半小时。后来我把流程固定成了“三步走”改参数、挂读写、看SELinux基本就没再出过乱子。遇到报错也不要慌GPT提示的报错信息往往比你想的要直白无非就是文件系统、权限、锁定、安全上下文这四类问题轮着来。希望这篇内容能帮你少走弯路。如果你在麒麟其他版本上遇到了不同表现方式或者是在像鲲鹏这种ARM架构上操作方法本身是通用的只是部分命令和路径要按实际环境微调一下。操作过程中有任何拿不准的地方建议先在虚拟机里练一遍——哪怕把密码改乱重来一次也比在实体机上折腾要划算得多。
返回列表