不少玩国产系统的朋友应该都经历过这种尴尬:银河麒麟V10装好了,用了一段时间,某天开机猛然发现密码怎么输都不对。尤其是那种日常不太常用的机器,几个月不开,密码不是记混就是彻底想不起来。我最近就帮同事处理了一台联想昭阳4720j,重装银河麒麟V10之后放着吃灰,等领导要用的时候,别说桌面密码,连root密码都忘得干干净净。
这篇文章就把我实际操作的完整流程写出来,覆盖银河麒麟V10桌面版和服务器版两种典型环境下的密码重置方法,顺便把过程中容易踩的坑一并列出来。不管你是系统管理员,还是自己装了麒麟系统拿来办公的普通用户,只要手里还有物理访问权限,这个密码就一定能救回来。
1. 重置银河麒麟V10密码前,先搞清楚这几点
在动手改密码之前,有几个概念必须理清。网上一搜“忘记密码”跳出来一堆教程,大多数其实是CentOS或者Ubuntu的老方法,放到麒麟V10上不一定原样适用。麒麟V10分了桌面版和服务器版两条线,底层技术路线不一样,引导方式、初始化系统都有差异,方法混着用很容易卡在某个步骤。
先说版本识别。我今年处理的这批机器里,联想昭阳4720j预装的是银河麒麟桌面操作系统V10,这套系统图形交互做得比较完善,重启进恢复模式时看到的是带grub菜单的引导界面,操作路径和Ubuntu系接近。而服务器版V10在机房里跑数据服务,很多管理员直接关掉了图形界面,只有黑底白字的终端,引导参数更接近CentOS系,重置密码时用的参数也不完全一样。
再说重置密码的本质。不管什么Linux发行版,忘记密码后的通用逻辑都是:在grub引导阶段通过修改内核启动参数,让系统跳过正常的登录认证流程,直接进入一个临时的shell环境,再用passwd命令重设密码。麒麟V10虽然做了很多定制化开发,但底子还是Linux内核,这条路径一直走得通。
还有一点必须提前强调:这个方法的前提是你能接触到机器本身,也就是拥有物理控制权。无论是服务器上接着的显示器键盘,还是笔记本电脑的本机键盘,都能操作grub菜单。如果人在外地,连不上机器,又没配带外管理口,那就只能想办法找现场的人配合了,远程是没有办法直接走引导恢复流程的。
最后一个要准备的东西很简单:搞清楚当前登录账号的用途。如果是办公桌面机,可能只是普通用户密码忘了,那用root进去改普通用户密码就行;如果是服务器,root密码就是命根子,那要重设的就是root本身。这台昭阳4720j属于前者,但后续改root密码的需求也很大,我下面两种都会讲到。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 银河麒麟V10桌面版:通过grub进临时shell改密码
2.1 进入grub引导菜单
这一步是所有操作的前置。银河麒麟V10默认的开机引导等待时间非常短,尤其是在UEFI快速启动模式下,屏幕一显示品牌Logo转瞬就进系统了。所以要把手放在快捷键上,开机时立刻连续点按启动菜单键,我常用的几个键是Esc、F8、F12,具体看主板,联想昭阳4720j实测按F12能呼出启动菜单。
呼出启动菜单后,选择当前系统的启动项(不是U盘启动,也不是网络引导),回车后马上连续点按Shift键,或者方向键上下翻动。麒麟V10桌面版用的是grub菜单,等它出现“银河麒麟”开头的启动列表时,不要直接回车,用上下方向键选中默认的第一个启动项,然后按字母e进入编辑模式。
这里有个小技巧:有些版本的麒麟V10把grub菜单的显示时间设成了0或1秒,普通按键来不及。如果遇到这种情况,可以在开机时直接长按Shift键不松手,grub会强制显示菜单。这个细节我刚开始没注意,白白重启了两次。
2.2 编辑linux启动行,加入init=/bin/bash
进入grub编辑界面后,屏幕会显示一堆配置文本。我们不需要理解每一行的含义,只需要找到以linux开头的那一行,这行是内核启动参数。注意看这行内容,里面会有一段以ro开头的字母,ro表示以只读方式挂载根文件系统,这是初期的默认设置。
用方向键把光标移到ro的位置,先把ro改成rw,这样根文件系统就是可写挂载,后面改密码不会出现“只读文件系统”的报错。然后把光标移到这行文本的末尾,加一个空格,追加如下参数:
bash复制init=/bin/bash
这个参数的意思是:内核引导时不启动完整的初始化服务,直接打开一个bash shell。也就是说,系统会跳过所有登录认证服务,直接给我们一个root权限的shell环境,这正是重置密码要用的。
确认修改无误后,按Ctrl+X或者F10启动。这时候屏幕可能会滚动一堆内核日志,不用管,最后会停在带上一个井号开头的bash提示符界面,说明我们已经进入临时shell了。
2.3 在临时shell里重设root密码和普通用户密码
进入临时shell后,第一件事不是急着输入passwd,而是先确认根文件系统的挂载状态。刚才做了ro改rw的操作,大多数情况下已经是可写状态了,但保险起见还是执行一下:
bash复制mount -o remount,rw /
这一步本质上是给根目录重新做一次可写挂载配置,能避免后续所有写操作都弹“Read-only file system”的错误。我实测过很多次,这句命令执行完基本没有报错,但每次仍会等它跑完再继续。
接下来就是核心命令了。如果你是重置root密码,直接执行:
bash复制passwd
系统会先提示输入两次新密码。这时候要注意一个坑:银河麒麟V10默认开启了密码强度校验,如果新密码太简单,比如就六位数字或者全是字母,系统会直接拒绝。建议用字母大小写加数字混合,不少于八位,省得折腾。
如果只是忘了普通用户的密码,同样在这里执行:
bash复制passwd 用户名
把“用户名”替换成实际的登录账号名就行。这台昭阳4720j上忘记的是桌面登录密码,我就是用root shell执行了passwd zhangsan这样一条命令,然后重新设置了普通用户密码。
密码设置完成后,还有一道非常关键的工序:SELinux的重新标记。麒麟V10默认开启了SELinux,直接修改密码文件会改变文件的SELinux上下文,不处理的话重启后系统可能卡在登录界面或出现异常。正确做法是执行:
bash复制touch /.autorelabel
这个命令会在根目录创建一个自动重标记标记文件,重启时系统会自动扫描整个文件系统,为所有文件重新打上正确的SELinux标签,逻辑上就是把之前被改乱的属性修复回来。
最后输入exit退出shell,或者按Ctrl+Alt+Del重启。重启过程可能要等几分钟,特别是autorelabel阶段,硬盘灯会闪个不停,这时千万别强制断电,等系统自己处理完所有文件的标签更新。
2.4 重启后可能遇到的SELinux等待和密码强度问题
上面写的autorelabel步骤,在第一次操作时很容易被忽略。我见过不少人改完密码重启后,系统卡在一个满屏打印标签信息的画面,一等就是十几分钟,误以为死机了直接强制重启,结果反而把文件系统搞出问题。
正确的处理方式就是耐心等待。autorelabel整个过程取决于硬盘大小和文件多少,我这台昭阳4720j大约等了八分钟,之后就正常进入登录界面了。如果你不想等这个扫描过程,也可以在grub编辑时临时加selinux=0参数跳过,但个人不建议这么做,临时跳过会让系统带病运转,不如一次把标签处理干净。
另一个常见问题是,设置新密码时明明符合要求,passwd命令却提示认证令牌操作错误。这个多半是密码策略中设置了最小长度或者复杂度,而输入的新密码恰好不达标。解决方式就是换一个更复杂的密码重试,或者在临时shell里先改策略文件,不过为了省事,直接换密码最效率。
3. 银河麒麟V10服务器版:用rd.break方式重置root密码
3.1 为什么服务器版不直接用init=/bin/bash
桌面版的init=/bin/bash方法在服务器版上不是不能用,但服务器版默认关闭了图形界面,引导过程走得快,而且不少服务器版内核做了额外限制,直接进临时shell有时会遇到根文件系统挂载不完整的情况,尤其是根分区用了LVM逻辑卷或者磁盘加密的场景,执行passwd时提示找不到/etc目录里的shadow文件,这就很麻烦。
所以我更推荐服务器版用rd.break方式。rd.break的全称是break at rd,意思是内核启动到initramfs阶段时暂停,在真正挂载根文件系统之前插入一个调试shell。这里的优势在于,它会自动把根文件系统挂载到/sysroot目录,同时保留完整的设备映射信息,LVM和加密磁盘都能被正确识别,比直接换成init=/bin/bash要稳得多。
3.2 rd.break具体操作步骤
服务器版进入grub菜单的方式和桌面版基本一致,UEFI模式下按F12或F11呼出启动菜单,然后选系统盘启动项,在grub界面按e编辑。找到linux那一行,把行尾的参数后面加上rd.break,不需要改动ro为rw,因为rd.break流程会自动以可写方式挂载/sysroot。
bash复制rd.break
按Ctrl+X启动,系统会在一堆日志滚动后停在switch_root提示符界面,这里显示的是类似下面这样的行:
bash复制Generating "/run/initramfs/rdsosreport.txt"
Entering emergency mode. Exit the shell to continue.
Type "journalctl" to view system logs.
You might want to save "/run/initramfs/rdsosreport.txt" to a USB stick or /boot
for debugging purposes.
switch_root:/#
在这个提示符下,根文件系统已经挂载到了/sysroot,但我们的root shell实际上还在initramfs的临时环境里,不能直接passwd。第一步需要先把这个挂载点切换成可写状态:
bash复制mount -o remount,rw /sysroot
然后使用chroot命令进入真正的根文件系统:
bash复制chroot /sysroot
执行完chroot后,提示符会变成类似bash-4.2#的样子,这时候就已经身处真实的系统环境了。现在就可以执行passwd root来重设root密码,操作和桌面版完全一样,同样要注意密码强度校验,太简单的密码会被PAM模块拦下来。
密码改完后,别忘了执行touch /.autorelabel刷新SELinux标签,这一点和桌面版一致。然后执行两次exit退出chroot和shell,系统会继续完成剩余引导流程,重启后就能用新密码登录了。
3.3 服务器版分区布局的注意事项
服务器版和桌面版的差别不只是引导方式。我今年在好几台服务器上操作,发现它们的根分区大多是LVM逻辑卷,用df命令看是/dev/mapper/...这种设备名,不像桌面版那样直接是/分区。rd.break方法对LVM的兼容性很好,因为它是内核和device mapper协作的结果,不会出现找不到根设备的尴尬。
但反过来,如果根分区做了磁盘级加密,比如LUKS加密盘,那操作时会遇到一道输入密码才能解锁分区的提示。这时候必须知道当初加密时设置的密码,否则硬盘数据等于不可访问。这个问题不是重置系统密码能解决的,属于磁盘加密层面,遇到这种场景只能找加密上下文密码。
另外,如果是UEFI安全启动环境,grub编辑界面某些参数可能被安全策略限制无法保存。银河麒麟V10的普通版一般不会遇到,但处理严密等保环境部署的服务器时,可能会碰上。遇到这种情况,可以先去BIOS里临时关闭Secure Boot,处理完再开回来,这个在联想服务器实测有效。
4. 不改密码也能登录:普通用户密码遗忘的另外几条路
root密码能重置,那如果只是普通用户密码忘了,root又不知道,还有没有其他办法?有,但路径基本还是要绕回root权限。只要你能通过上面的任一种方法进临时shell拿到root,普通用户密码就是一条命令的事。
拿到root shell后执行:
bash复制passwd 用户名
这条命令会直接重设指定用户的密码,中间会验证两次输入,没有太多花活。需要注意,如果目标用户是当前系统中某个服务的运行账号,比如达梦数据库的dmdba用户,那修改密码前要格外谨慎,确认该服务没有依赖原有密钥文件或者免密登录配置,否则改完密码反而可能把服务搞挂。
对于一些图形桌面用户,银河麒麟V10控制中心也提供了提权改密入口:在登录界面上有一个“系统设置”的按钮,输入root提权后,在用户管理里可以重置普通用户的密码。不过这个入口要求root密码本身是可用的,如果root也忘了,还是得回到grub那套流程。
还有一条容易被忽视的命令是chage。如果你不是忘记密码,而是账号被制度性锁定了,比如密码过期强制要求下次登录修改,可以用root执行:
bash复制chage -M 99999 用户名
把密码有效天数改成最大值,相当于取消了过期策略,这样下次登录就不会被迫换密码。有时候运维排查半天密码对不对却登不进去,原因就是这个账号的过期时间到了,看策略比改密码更关键。
这些命令都不深奥,但有一个前提逻辑要理顺:只要能拿到一次root shell,所有账号问题都能解决。反过来,如果连root都拿不到,那就只能走前面讲的grub恢复流程。
5. 实操现场复盘:几类高频问题的排查与避坑
5.1 文件系统只读导致passwd失败
我在多次操作中遇到过这种情况:进入临时shell后执行passwd root,系统直接报passwd: Authentication token manipulation error,或者提示无法写入/etc/shadow。原因基本可以锁定在根文件系统还是只读状态。
解决方式就一句话,重新挂载根分区为可写:
bash复制mount -o remount,rw /
只要这条命令执行后没报错,再执行passwd基本就顺了。假如remount也报错,多半是文件系统有脏状态,可以先执行fsck,但操作前要考虑数据风险,谨慎处理。
5.2 卡在SELinux标签刷新阶段
第一次重置密码后重启,系统很可能在打印大量File label not found或者类似信息后停滞,这是autorelabel在重新标记文件。很多人在这一步误判死机,直接断电,这是最伤硬盘的操作之一。
我的建议是:看到屏幕滚动标签信息时,不要碰任何键,给系统至少十到二十分钟。如果等了两轮还是没有进入登录界面,再考虑用rescue模式修复。日常处理中,绝大多数等待都是正常的,真正的卡死极少发生。
5.3 键盘布局导致新密码“删不掉”
这个问题很隐蔽,特别是在物理键盘上操作临时shell时。麒麟V10默认使用中文键盘布局,如果输入新密码时涉及数字键上方的符号键,比如!、@、#,敲出来的字符可能跟键盘标签不一样,导致两次密码输入不一致,passwd直接判定重试次数过多。
经验是:在临时shell里设置密码时,尽量只用字母和数字组合,一次写完不纠结符号。等进入系统后在桌面环境里可以再通过另一套图形方式调整。我在现场教同事操作时,都会先强调一遍“别在命令行敲符号”。
5.4 重装系统后屏幕不亮
回到开头提到的联想昭阳4720j,同事一开始是通过U盘重装银河麒麟V10系统,装完一切正常,但重启后屏幕黑屏不亮,这就引发了后续一连串问题。重装后屏幕不亮和密码重置其实不是同一个问题,但它和显卡驱动、引导参数密切相关。
黑屏的常见原因是默认显卡驱动不兼容。解决方法是在grub编辑界面里往linux启动行追加nomodeset参数,禁用内核模式设置,让系统先用基础显示驱动把桌面拉起来,进系统后再安装适配的显卡驱动。对于昭阳4720j这种集显机型,用这个方法十次有九次能点亮屏幕。
顺便说一句,重装系统前最好把重要数据备份出来,做完系统初始化后立即设置一个固定且好记的密码,记在本地笔记或密码管理工具里,可以大幅降低后续忘密码的概率。
5.5 不要通过删除shadow文件来绕过密码
有些网上教程会教你直接删掉/etc/shadow文件再来重置,操作看上去很痛快,实际后患无穷。shadow文件保存的是所有用户的密码哈希和账户策略,直接删除会导致大量账户校验失效,而且部分服务读写该文件时会直接报错,整个系统的认证链路都是乱的。
万一误删了,系统里也没有自动备份,恢复的成本远比改一次密码高。正确的做法始终是用passwd命令重置,它内部会处理好所有字段和权限,不会留下半残状态。
5.6 常见问题速查表
| 现象 | 可能原因 | 处理办法 |
|---|---|---|
| grub菜单一闪而过 | 等待时间太短 | 长按Shift键,或者改grub配置里的GRUB_TIMEOUT |
| 临时shell里passwd报错 | 根文件系统只读 | mount -o remount,rw / |
| 重启后长时间卡在标签打印 | SELinux自动重标记 | 耐心等待,正常会自行完成 |
| 新密码符合规则却仍被拒 | 策略文件有特殊要求 | 换用更复杂的密码组合 |
| 输入密码时字符对不上 | 键盘布局不匹配 | 先用纯字母数字混搭密码 |
| 服务器提示找不到根设备 | LVM或加密盘未激活 | 改用rd.break方式处理 |
| 重装后屏幕不亮 | 显卡驱动不兼容 | grub参数加nomodeset启动 |
6. 顺带整理:银河麒麟V10新装系统后必做的基础配置
密码折腾完,系统能进桌面了,接下来的很多新装场景还会连带出几个常见问题,这里简单记一下处理经验。
一是网上邻居和文件共享。银河麒麟V10桌面版默认可以通过图形界面找到局域网的SMB共享,但如果要自己搭建共享目录,需要在防火墙里放行samba服务端口,并确认工作组名称一致。具体命令可以用系统的防火墙管理器图形化放行samba服务,简单直接。
二是安装达梦数据库这类重量级应用。达梦在银河麒麟V10上的安装流程相对成熟,但安装前一定要确认几个用户参数:创建专用的dmdba用户、配置环境变量、设置DISPLAY、修改内核参数。不少安装失败都源于dmdba用户没有配置glibc环境,或者临时目录空间不够,提前检查能省很多事。
三是NTP时间同步。服务器上跑业务,时间不准非常致命。麒麟V10可以用图形化工具打开时间同步,或者直接用chrony服务。我建议用chrony,因为配置文件简单,修改/etc/chrony.conf里的server地址就能指向内网统一时间源。离线环境下没有外网时钟源,需要自己在内网搭一台时源服务器。
四是离线包安装。很多内网机器不能在线拉取软件包,这时离线包就派上用场。准备与目标机器相同架构的rpm包,放到本地目录后用rpm -ivh做批量安装,注意依赖顺序。之前我在服务器上部署NFS服务时,就是把依赖包全下载好过一次装完的。
这些配置点和密码重置看起来没直接关系,但都是新装和重置之后紧接着要做的事情。反正机器已经在手上了,顺手把这些基础项一起调好,后续用起来省心不少。
7. 最终心得:密码重置这条路,越稳越好用
处理完这台昭阳4720j和后续几台服务器的密码问题后,我最大的体会是:银河麒麟V10在密码恢复机制上并没有做太多封闭化的改造,熟悉Linux引导原理的人可以很顺手上手,但新手很容易卡在grub编辑、SELinux标签和只读挂载这些细节上。
所以我就把这套既有桌面版又有服务器版的方法整理成了上面这些步骤,每一步都注明了为什么这么做。我自己后面还习惯在每次重装完系统后,把初始密码和修改后的密码记入本地密码本,同时用chage把密码过期策略调整到合适周期,避免再出现长时间不登录账户失效的情况。
最后再提醒一句:拿到物理权限是重置密码的前提,改完密码务必做一次重启验证,确认能正常登录再收工。临时shell里操作的时间越短,对系统的干扰越小,整个流程也就越安全。
