尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

银河麒麟V10密码重置:单用户模式实操与避坑指南

银河麒麟V10密码重置:单用户模式实操与避坑指南 简介银河麒麟V10桌面版单用户模式修改密码操作指南以PDF文档形式提供主要面向已部署国产操作系统的政企单位运维人员、系统管理员也适合忘记登录密码、需要紧急恢复桌面访问权限的普通用户。文档基于银河麒麟V10桌面操作系统系统讲解密码重置完整流程重启后在引导界面按e键进入编辑模式在security参数后添加init/bin/bash consoletty0引导系统进入单用户模式接着通过passwd username命令修改指定用户名对应的密码或直接执行passwd重置root密码最后运行reboot -f重启系统使新密码生效。文中还特别提醒单用户模式拥有最高系统权限操作前应备份重要数据避免造成不可逆损害。资源包为一个PDF文件大小为四百四十二KB内容紧凑、步骤清晰便于随时查阅与对照操作。已有九千三百零一人学习既适合应急找回登录密码也可作为国产操作系统日常维护及基础故障处置的参考笔记。1. 银河麒麟V10桌面忘记密码单用户模式是系统的最后一道后悔药银河麒麟V10桌面版的密码一旦忘了很多人第一反应是拿U盘重装系统数据全丢。其实不用只要你还能看到开机时的grub菜单就能用单用户模式把密码在五分钟内重置回来。所谓单用户模式是Linux内核在启动阶段保留的一个最小环境它不启动图形界面、不启动网络服务、不校验登录直接把一个root命令行交到你手里。对运维来说这既是救命手段也是最后一剂后悔药。这篇笔记要解决三类人桌面终端使用者忘记登录密码、管理员需要批量重置麒麟V10密码、以及在加域或加密盘等特殊环境下手动改密码反而改不动的边界情况。2. 单用户模式为什么能绕过登录grub参数背后的启动链路很多人有个误区觉得“单用户模式”是一个系统里现成的功能选项选一下就能免密进入。在银河麒麟V10桌面版上事情没那么简单。V10沿用了RHEL系的操作系统引导体系单用户模式只是一个由内核启动参数触发的目标状态而不是登录界面旁边的一个按钮。搞懂它为什么能绕过登录才知道网上那些抄来的命令为什么有的能行、有的卡死。2.1 图形登录器启动之前发生了什么init、systemd与根文件系统的挂载顺序一台V10桌面机器的启动顺序大概是UEFI或BIOS先找到grubgrub加载内核和initramfs内核挂载根文件系统后再启动系统的第一个进程。以前这个进程是init现在V10用的是systemd由它拉起一个叫target的启动单元最终把图形登录管理器拉起来。你平时看到的“输入密码”界面本质上是systemd启动到图形目标后最后拉起的一个用户态进程。这意味着登录认证发生在系统启动的末尾阶段而单用户模式的突破口在启动的开头阶段。只要你在grub里给内核传一个特殊参数让systemd不按正常流程走或者让内核根本不执行systemd图形登录管理器就不会出现。根文件系统、/etc/shadow这些关键文件在内核和initramfs阶段就已经就位所以重置密码需要的读取和写入路径当时已经可用这就是“绕过登录”的原理基础。2.2 两把钥匙的区别rd.break与init/bin/bash网上关于麒麟V10单用户改密码的方案追根溯源就是两类一类在grub的linux这一行末尾追加 rd.break另一类追加 init/bin/bash。两者都能让你拿到一个root命令行但时机和体验不一样。rd.break是dracutinitramfs的生成工具内置的调试钩子。它让initramfs在完成根文件系统挂载、但要真正切到硬盘系统之前暂停下来给你一个switch_root提示符。此刻系统还没进入systemd登录校验当然无从谈起。init/bin/bash是更底层的做法它告诉内核不要执行systemd启动完initramfs后直接执行/bin/bash。两者之间的差别在于rd.break之后你需要chroot进旧系统再改密码init/bin/bash则直接落在硬盘系统的根上。实际使用中rd.break更稳定因为dracut阶段有完善的基础设备环境init/bin/bash在某些ARM机器上会出现缺少设备节点的小问题。2.3 为什么不推荐只加single或数字1搜索引擎里很多标题写着“加single进单用户模式”这套思路在SysVinit时代行得通但在systemd时代已经变了。systemd把single和数字1映射成rescue.target银河麒麟V10默认情况下进入rescue.target依然会要求提供root密码。如果你丢的就是root密码这条路等于没走。所以要绕过认证只能走 rd.break 或 init/bin/bash 这种“在systemd之前截胡”的参数。这类参数不触发任何PAM认证直接给shell这也是为什么它常被当成系统的“最后一把钥匙”。下面第3章就按这两条路线把完整命令写出来。3. 实操在麒麟V10桌面进入单用户模式重置密码操作部分要耐心。V10桌面版和服务器版虽然底层接近但grub菜单的显示策略、ARM和x86的按键方式有细微差别。下面步骤以银河麒麟V10桌面版SP1/SP3均适用为主x86_64和ARM平台通用有差异的地方我会单独标注。3.1 准备重启、呼出grub菜单、确认启动项先把机器重启。开机后看到品牌Logo或主板Logo时立刻连按 Esc 键。因为V10桌面版默认隐藏了grub菜单只停很短的几秒钟。有些机器按Shift也能呼出但连按Esc的成功率最高。如果手速不够就等系统进入登录界面后再跑一次reboot多试两次。ARM平台的飞腾、鲲鹏机型个别固件不支持Esc呼出菜单这种情况放在第5.5节单独讲。进入grub菜单后你会看到至少一个启动项通常叫“银河麒麟”或“Kylin V10”下面还有高级选项子菜单。直接选中默认启动项按 e 进入编辑模式。此时屏幕上会出现一串启动脚本里面有几行以 menuentry、linux、linuxefi、kernel 开头的文本。注意不要盯着menuentry看那只是菜单定义真正要改的是以 linux 或 linuxefi 或 kernel 开头、并且行内有 root/dev/mapper/... 或 rootUUID... 的那一行这一行才是内核启动参数。把光标移动到那一行行尾确认末尾还有空格再继续后面的操作。3.2 首选方案rd.break6条命令改完密码在linux那一行的末尾追加 rd.break enforcing0然后按CtrlX启动。系统会走initramfs流程中途停下来出现类似 switch_root:/# 的提示符。记住提示符是switch_root而不是bash说明你正处在dracut的临时根环境里。此时依次执行下面的命令# 1. 重新以可写方式挂载硬盘根分区默认是只读的 mount -o remount,rw /sysroot # 2. 把当前环境的/dev设备节点绑定进新根避免passwd找不到tty mount --bind /dev /sysroot/dev # 3. 切换到硬盘上的真实系统 chroot /sysroot # 4. 修改密码用户名按实际情况写root或普通用户都行 passwd root # 5. 如果系统开过SELinux强制模式则创建自动重打标签标记 touch /.autorelabel # 6. 退出chroot回到switch_root环境并重启 exit reboot -f这段命令里有几个参数值得说清楚。rd.break默认会中断在initramfs切换根之前这时候硬盘根分区虽然已经挂载但挂载点是/sysroot且是只读状态所以第1步先remount成rw。第2步把/dev绑定进新根是因为dracut环境里的/dev是devtmpfschroot之后如果直接用passwd少数机器会报“cannot open /dev/tty”类似错误绑定后问题消失。chroot之后你就一头扎进硬盘上的真实V10系统了这里能直接读到/etc/passwd和/etc/shadow。第5步的.autorelabel只针对SELinux处于Enforcing状态的系统V10桌面版默认多半是disabled或permissive如果你不确定执行一下也无害最多下次启动多做一次标签重刷浪费几分钟。3.3 备选方案init/bin/bash跳过systemd直落bashrd.break走不通的时候比如机器没集成dracut的break模块或者你的V10版本较老可以用init/bin/bash。回到grub编辑界面同样在linux那一行末尾操作。先删掉行尾的 rhgb quiet 这两个参数它们只是控制启动动画和日志输出留着也不影响然后追加 init/bin/bash# linux一行末尾最终效果类似这样 # linux /boot/vmlinuz-xxx root/dev/mapper/kylin-root ro init/bin/bash # 注意保留原有的root参数绝对不要删除 mount -o remount,rw / passwd root reboot -f这个方法最明显的特征是系统根本不启动systemd图形界面、网络、多用户全部不存在内核执行完initramfs后直接把/bin/bash拉起来。此时你看到的提示符是 bash-4.x# 或者带主机名的普通bash提示符。由于绕过了systemd系统不会自动按/etc/fstab挂载其他分区因此第一步必须手动把根分区remount为rw否则passwd改完但写不进/etc/shadow就等于白忙。reboot -f是强制重启在这个环境里没有systemd服务帮你优雅关机直接用reboot -f最省事。3.4 重启前的自检passwd -S、faillock与shadow文件无论用哪套方案进到真实系统改完密码先别急着立刻重启。我一般会按顺序做四个自检动作。先执行 passwd -S 用户名查看密码状态PS代表密码已设置NP代表无密码LK代表锁定。再执行 grep 用户名 /etc/shadow确认该行第二个字段不是!或*开头而是以$6$或$y$开头的hash串如果是!说明账户被锁还需要清锁。然后顺手执行一遍 faillock --reset --user 用户名把这台机器之前因密码输错累积的失败计数清零。最后在退出chroot之前执行 sync强制把内存里的改动刷到磁盘。这一步多花一分钟能省掉后面反复重启的折腾。很多时候“改完密码登录还失败”根本不是密码错了而是失败锁定计数没有清见第5.3节。自检通过后再exit回switch_root环境执行reboot -f。正常重启后会回到图形登录界面输入新密码即可进入桌面。4. 改完密码之后的三件收尾事解锁、策略与边界场景密码改成功只是第一步。实际工作里我在政务内网和信创终端上处理过大量V10密码重置发现改完密码后面还跟着三件很容易忽略的事账户被PAM锁定、密码复杂度策略拦路、以及加域和加密盘这类特殊环境的边界。不处理干净重启后还是进不去。4.1 账号被锁定faillock与pam_tally2的复位命令银河麒麟V10的PAM配置默认会在用户连续输错若干次密码后锁定账户。你在登录界面反复试错或者远程运维时被同事多敲了几次密码账户状态就会从正常变成锁定。此时哪怕单用户模式里已经把密码改成了对的重启后登录界面依然会拒你甚至提示“账户已锁定”。进入单用户模式后执行清锁命令# 清除指定用户的失败计数新版V10基于pam_faillock faillock --reset --user root # 清除全部用户的失败计数 faillock --reset # 部分版本还在用pam_tally2两条都执行一下没有副作用 pam_tally2 --reset --user root清锁之后可以用 passwd -S 用户名 看状态是否从LK变回PS。如果再往深一层可以检查 /etc/security/faillock.conf 或者 /etc/pam.d/system-auth 里的 unlock_time 参数默认可能是600秒或者永远不会自动解锁。如果是“永久锁定”策略清锁就不是可选项而是必须项。常见做法是改完密码顺手就清一次锁不要等重启后发现登录失败再折返。4.2 密码复杂度拦路pwquality.conf与usermod -p绕过V10桌面版的passwd命令在设置密码时会调用libpwquality的规则检查。如果你在图省事设置123456这类弱口令passwd会直接拒绝提示“BAD PASSWORD: The password is shorter than 8 characters”之类。这不算bug是系统策略。但很多运维人员会在这里翻车明明在单用户模式下改了密码systemd甚至没有启动完整PAM链路为什么还被拒因为passwd这个工具本身就带着pwquality检查跟你从哪个环境调它无关。解决办法有两个。第一个是临时放宽策略编辑 /etc/security/pwquality.conf把 minlen 改小或注释掉再执行passwd。第二个是绕过策略直接用工具生成一个符合规则的hash写入shadow不经过passwd的检查流程# 用openssl生成SHA-512加密的密码串 openssl passwd -6 这里写你准备设置的新密码 # 把上面命令输出的hash串填到下面直接写入用户信息 usermod -p $6$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 用户名usermod -p 会直接写/etc/shadow不走PAM策略。这个技巧适合批量重置场景比逐台编辑pwquality.conf快。但要注意usermod -p 在命令行里会暴露hash串单用户模式下bash不做历史记录风险可控如果你在多人在线的生产环境做记得退出shell前清理终端回显。还要提醒如果你需要同时满足强密码策略最好生成一个大小写字母加数字符号的组合别把系统策略完全关掉否则改完密码可能通过安全审计。4.3 加域终端与LUKS加密盘单用户模式管不到的区域这两类场景是单用户模式的盲区需要单独说明。先说加域。很多麒麟V10桌面终端会加入Windows AD域或麒麟本身的域环境登录账号是域用户。系统里其实存在一个同名的本地用户但实际认证会通过sssd去域控完成。你在单用户模式下改的只是本地那份/etc/shadow里的密码域控上的密码根本没变。改完之后看似成功重启后在登录界面输入新密码认证请求还是会回到域控最终依然用旧密码。域控场景下正确的做法是管理员在域控侧重置该用户密码或者通过域策略统一下发新密码而不是逐台机器跑单用户模式。如果你手里是一批加域的麒麟V10需要统一改密最靠谱的路径是域控的批量重置功能不是单机操作。再说全盘加密。V10安装时如果勾选了全盘加密或加密家目录开机后会在grub之后、系统启动之前要求输入磁盘密码。磁盘密码忘记的情况下单用户模式根本启动不到因为根文件系统还是密文内核没法挂载。这种情况必须先找到当初生成的恢复密钥文件或对应的keyfile机器才有救。如果两者都没有本机数据基本无法读出。对这类环境我的习惯是安装时就把恢复密钥导出保存到离线介质并明确告诉使用方磁盘密码和登录密码不是一回事忘了登录密码可以单用户模式救忘了磁盘密钥只能靠备份或者重装。密码类型单用户模式能否重置说明本机普通用户密码可以直接用passwd或usermod -p修改root密码可以需用rd.break或init/bin/bash绕开rescue认证LUKS磁盘加密密码不可以必须用恢复密钥或keyfile域用户密码不可以必须由域控管理端重置这个表可以帮你快速判断一台报修机器值不值得进单用户模式。如果问题落在后两行再折腾grub参数也没用。5. 单用户模式修改密码避坑指南五个常见翻车现场单用户模式改密码本身不复杂但我在给多个单位的麒麟终端做运维支持时发现新手翻车点高度集中。这节把五个最典型的坑按“现象—原因—解决”写清楚你照着排查能省下大量反复重启的时间。5.1 参数加错行按e之后改到哪一行才算数现象进入grub编辑界面后把rd.break加在了menuentry这一行末尾按CtrlX启动系统正常进入登录界面单用户模式完全没有触发。原因menuentry只是grub菜单的标题行内核不读取这一行作为启动参数。真正的内核参数在linux、linuxefi或kernel开头的那一行。V10桌面版在x86平台上一般是linux行在部分UEFI机器上是linuxefi行ARM平台可能是kernel行。解决按e进入编辑后用方向键往下找含 root/dev/mapper/... 或 rootUUID... 的那一行那才是linux参数行。光标移到行尾先敲一个空格再追加参数。判断标准很简单行尾原本大多是 rhgb quiet 或 splash你在末尾追加确保参数和前面的内容之间至少隔一个空格即可。5.2 根分区只读passwd报错的第一眼现象进入单用户shell后执行passwd系统提示“passwd: Authentication token manipulation error”或者写“cannot open /etc/shadow”。原因根文件系统默认以只读方式挂载。无论rd.break方案里的/sysroot还是init/bin/bash方案里的根目录初始都是ro。passwd要写/etc/shadow但文件系统不允许写入自然报错。解决在passwd之前先执行 mount -o remount,rw / 或 mount -o remount,rw /sysroot然后再chroot或直接passwd。如果还是不放心用 mount | grep / 确认挂载选项里有rw字样。另外提醒一句哪怕你能读写也不要直接用vi去改/etc/shadow这种关键文件只能用passwd、chpasswd这类专用工具修改否则可能破坏hash字段结构反而让所有账户都无法登录。5.3 密码改了登录还失败faillock与pwquality的二次拦截现象单用户模式里passwd执行成功结果也提示Password updated successfully。重启后输入新密码登录界面还是提示“用户名或密码错误”。原因第一可能是账户被锁定前面第4.1节讲的faillock计数没有清零登录请求在密码校验之前就被PAM拒绝。第二是密码过于简单passwd命令本身拒绝弱密码时你可能没注意看以为改成功了实际上/etc/shadow里还是旧值。解决重新进一次单用户模式先 grep 用户名 /etc/shadow 确认hash已经被更新而不是旧hash。确认更新后执行 faillock --reset --user 用户名 以及 pam_tally2 --reset --user 用户名再次用 passwd -S 用户名 查状态。如果状态从LK变PS再重启登录。这套流程我重复验证过多次基本能覆盖90%的“改完还是进不去”场景。5.4 全盘加密的机器单用户模式进不去现象开机后停在“请解锁磁盘密码”的提示界面按Esc、Shift都没反应grub菜单根本出不来。原因安装了LUKS全盘加密后磁盘密码的解锁发生在initramfs早期先于根文件系统的挂载。此时内核还没有能力执行你的单用户参数或者说解锁界面就是引导流程的一部分你没法跨过它进入下一步。解决这种情况只能靠LUKS恢复密钥。开机到解锁界面时选择手动解锁输入之前生成的恢复密钥短语或者插入存有keyfile的U盘。如果都没有那这台机器在当前系统下已经没有救回数据的可能。重要文件在加密盘里且忘记密钥的案例我从没见过单用户模式能解决的。建议是检查有没有备份镜像或快照别把时间耗在引导参数上。顺便说一句热词里那个“银河麒麟请解锁磁盘密码忘记了”多半就是这类LUKS场景不是普通登录密码。5.5 ARM版麒麟V10按Esc无效从UEFI设置找grub现象飞腾、鲲鹏、麒麟9006C等ARM平台的V10桌面版开机狂按Esc却没有任何grub菜单出现直接进了系统或卡在Logo界面。原因ARM UEFI固件的键盘事件处理和x86不同。部分固件在启动阶段根本不扫描USB键盘或者grub隐藏菜单的触发方式被固件跳过导致正常按键无法中断启动流程。另外一些ARM整机的BIOS设置里grub的等待时间被设成了0。解决重启后连按F2或Del进入UEFI设置找启动相关选项把grub菜单的等待延时调到3秒以上。有些麒麟整机的设置项叫“Boot Delay”有些叫“Grub Configuration”。改完保存退出再开机就能看到grub菜单。如果UEFI设置里根本没有这些项那就做一张“银河麒麟U盘启动器”用安装U盘进入系统的救援模式挂载根分区后同样可以重置密码。U盘救援的本质和单用户模式一样只是把启动介质从本地硬盘换成了外部存储适合grub完全失控的极端情况。6. 进阶改密码前先留三条后手验证后再重启用单用户模式重置密码之前我习惯先给自己留三条后手避免在操作过程中把系统弄得更糟。第一条后手是备份shadow文件。无论你用的rd.break还是init/bin/bash进入真实系统后第一件事不是急着一顿操作而是先执行 cp /etc/shadow /root/shadow.bak。这个备份文件会保留一份旧的密码hash。万一新密码设置有误或者你误改了其他字段还能在单用户环境里把旧文件恢复回去。重置完密码并验证登录正常之后再把备份删掉。第二条后手是准备一个兜底hash。在改密码之前先用 openssl passwd -6 生成一个新密码的hash串存在终端备忘录里然后优先用 passwd 命令去改如果它因为复杂度策略拒绝立刻改用 usermod -p 直接写入hash。这样就避免“passwd被策略拦截后你临时想不出合规密码卡在半路”的尴尬。第三条后手是验证后再重启。这是我最想强调的一点。改完密码不要立刻reboot而是依次执行 passwd -S 用户名、grep 用户名 /etc/shadow、faillock --reset --user 用户名、sync。确认hash已更新且账户状态为PS后再退出重启。绕开这一步直接重启一旦发现登录失败又要重新进单用户来回折腾至少多花十分钟。操作完所有步骤后登录界面正常进入桌面才算整个流程真正结束。我处理过不少同事转来的“密码重置失败”工单最后排查下来多数不是因为命令不对而是跳过了faillock清锁和shadow验证这两个环节。养成“备份、验证、清理”的习惯之后这套方案在我经手的机器上还没有翻过车。希望帮到你。本文还有配套的精品资源点击获取
返回列表