接手一台不知道root密码的麒麟系统机器是所有搞运维的人最头疼的场景之一——尤其是这台机器还在跑业务你既不能随便重装又不能把硬盘拆下来挂到别的机器上慢慢折腾。我这几年前前后后给麒麟V10的台式机和服务器处理过不下几十次root密码问题也收到过大量“明明记得密码却切不到root”的咨询。今天就把麒麟系统root密码修改这件事从头到尾讲透包括进不去系统时怎么重置、能登录但切不过去怎么办、以及最容易混淆的数据库root密码问题。文章会覆盖从GRUB引导、LiveCD工具到命令行排错的全套方案不管你是刚接触Linux的桌面用户还是已经有几年经验的运维都能找到对应的解法。1. 先搞清楚你改的是系统root还是数据库root这个区分看起来像废话但实际处理过的案例里至少有三分之一的人卡在第一步就找错了方向。搜索“root密码修改”的人里面有相当一部分真正想问的是“为什么MySQL/MariaDB连不上报1045 access denied”——那是数据库账号问题跟操作系统登录密码完全是两码事。1.1 两种root密码的本质区别系统root密码管的是操作系统层面的用户认证。你用root登录桌面、在终端执行su -切换、通过SSH以root身份远程登录走的都是这一套。它存在系统的/etc/shadow文件里用passwd root命令修改。数据库root密码管的是数据库服务层面的访问权限。它存在数据库的权限表里比如MySQL的mysql.user表用SQL语句ALTER USER或UPDATE修改。系统root密码改了数据库root密码不会跟着变反过来也一样。很多新手在数据库连接报错后跑去改系统root密码改完发现数据库还是登不上一头雾水。所以动手之前先花十秒钟判断当前到底卡在哪一层现象真实需求开机后无法登录桌面/终端或者su - root提示密码错误系统root密码问题能正常进系统但mysql -uroot -p报ERROR 1045 (28000)数据库root密码问题能进系统但sudo -i提示当前用户无权提权配置问题不是密码问题SSH远程登录时root被拒绝sshd配置问题密码可能没错判断方法很简单如果图形界面或命令行能进系统那操作系统层面基本是通的重点排查数据库账号如果连系统都进不去才需要考虑重置系统root密码。1.2 修改入口的差异决定了操作完全不同系统root密码的修改入口是Linux的认证机制。你可以在正常运行状态下执行passwd root也可以在系统进不去时通过GRUB引导或LiveCD工具绕过登录直接重置。数据库root密码的修改入口是数据库服务的认证机制。忘记密码时通常需要先让数据库跳过权限表启动再进去修改权限数据。这两个方向的操作链路差异巨大。后面第2、3章讲的是系统root密码重置第5章会专门把数据库root密码的方法单独拆出来讲清楚。现在先记住一条改之前先确认自己在处理哪一层否则后面所有步骤都可能是白费力气。2. 忘记密码进不去系统GRUB引导菜单里把root密码重置掉这是最常见也是最保险的重置方式不需要额外准备U盘不需要拆卸硬盘只要你能看到机器的物理屏幕和键盘就能操作。麒麟V10的GRUB菜单默认不会停留很久开机后要手快在BIOS自检结束、屏幕刚亮起的那一刻连续按上下方向键或Shift键把菜单“按住”。实在抢不到时机可以提前在/etc/default/grub里把GRUB_TIMEOUT调大到10秒这样下次重启就有充足时间操作。2.1 完整操作步骤从GRUB进入单用户Shell先明确一个概念GRUB是Linux的引导加载程序它在操作系统内核正式启动之前运行这时候还没有加载完整的用户认证体系所以我们可以利用它进入一个免登录的修复环境。整个过程分四步。第一步在GRUB菜单界面用上下方向键选中第一个启动项默认是当前正在使用的内核按下e键进入编辑模式。注意不是按回车直接启动是按字母e。第二步在编辑界面里找到以linux开头的内核启动行。麒麟V10的不同安装方式下这一行可能显示为linux或linuxefi本质相同都是告诉内核用什么参数启动。用方向键把光标移到这一行末尾。第三步把这行里的ro改成rw然后在行尾追加init/bin/bash。完整的效果类似这样linux /vmlinuz-4.19.90-52.22.v2207.ky10.x86_64 rootUUIDxxxxxx rw init/bin/bash这里有两个关键点。ro改成rw是为了让根文件系统以可写方式挂载。内核启动时默认把根分区只读挂载防止启动过程中被意外写入如果不改后面执行passwd时系统根本无法写入/etc/shadow文件。追加init/bin/bash则是让内核跳过systemd等正常启动流程直接启动一个bash Shell——这个Shell是以root身份运行的不需要任何密码。第四步按CtrlX或F10启动。系统会跳过正常引导直接进入bash命令行提示符。这时执行passwd root按提示输入两遍新密码看到passwd: all authentication tokens updated successfully就说明写入成功了。然后执行reboot -f强制重启用新密码登录验证即可。2.2 rd.break方式和init/bin/bash怎么选如果你在网上搜索过重置密码的文章会发现很大一部分教程用的是rd.break参数而不是init/bin/bash。两种方式都能达到目的但细节上差别不小。rd.break是RHEL7之后systemd体系下的做法它的作用是在切换到真正的根文件系统之前中断启动流程进入一个临时的“switch_root”环境。在这个环境里根文件系统挂载在/sysroot下而且默认是只读的。所以你还需要手动执行两条命令mount -o remount,rw /sysroot chroot /sysroot然后才能在chroot后的环境里执行passwd root。对比项init/bin/bashrd.break操作步骤直接进入bash改完密码就重启需要手动remount和chroot多两步对根文件系统的挂载方式依赖你手动把ro改为rw启动后默认只读需手动改适用版本几乎所有Linux发行版都支持面向RHEL7体系麒麟V10可用失败风险某些特殊分区方案下参数不生效稳定但步骤繁琐我个人的习惯是优先试init/bin/bash因为它简单直接一步到位。如果加了参数后启动异常再退回GRUB换rd.break。顺便说一句如果系统盘做了LUKS全盘加密这两种方式都会在启动过程中停下来要你输入解密口令——如果是这种情况说明密码不是root密码的问题而是盘符解锁问题处理思路完全不同不在今天的讨论范围内。2.3 重置后SELinux相关的处理麒麟V10默认可能开启SELinux强制模式。只修改密码本身不会改变文件的SELinux标签所以大多数情况下直接重启就能正常登录。但如果你在单用户模式下还动了其他文件比如改过/etc/passwd、复制过文件到系统目录建议执行一下touch /.autorelabel这个文件的作用是告诉系统下次启动时自动对所有文件重新应用SELinux标签。如果你只是改了密码可以跳过这步但做了文件级别的操作强烈建议加上。否则可能出现重启后某些服务起不来、甚至登录后命令执行异常的诡异现象。另外一个实操细节单用户模式下进去的系统非常精简没有完整的网络服务也没有图形界面。你看到的bash提示符可能连主机名都不显示这是正常的不用慌。改完密码直接reboot -f不要去做其他不必要的操作减少引入新问题的概率。3. 不会进GRUB用麒麟系统修复助手LiveCD从U盘把密码撬开GRUB方式虽然好但有两个硬前提你得能捕捉到GRUB菜单而且机器得有物理键盘和显示器。如果你接手的是远程服务器、或者机箱放到机房不方便操作又或者GRUB被配置成完全不显示菜单那就得换一套思路——用启动U盘里的Live系统把硬盘上的原系统挂载起来改密码。3.1 修复助手是什么和安装ISO有什么区别银河麒麟官方提供了一款叫“修复助手”Kylin LiveCD Tools的工具本质上是一个独立的Live系统ISO。用这个ISO做成启动盘后不需要安装直接进入一个临时桌面环境然后在这个环境里访问硬盘上的原系统文件。很多资料说“用麒麟安装盘也能修复系统”这话对但不完全对。安装版ISO启动后进入的是安装向导界面默认没有桌面环境想进入shell需要按CtrlAltF2等快捷键切换到虚拟终端。而修复助手是专门定制的带了文件管理、分区工具等实用功能对不太熟悉命令行的人更友好。3.2 制作启动U盘的具体方法去官网下载对应版本的修复助手ISO然后准备一个至少4GB的U盘。制作启动盘在Windows下可以用Rufus或balenaEtcher选择ISO文件设备选U盘写入方式选“DD模式”或默认的“镜像模式”即可。在Linux下更直接dd ifkylin-livecd-tools.iso of/dev/sdX bs4M statusprogress注意这个/dev/sdX是U盘的设备名千万别写成系统盘。可以用lsblk先看清楚哪个是U盘——看容量大小是最稳妥的方式。如果没有修复助手ISO手边正好有麒麟V10的安装盘镜像也一样能用。启动到安装界面后按CtrlAltF2切到命令行终端不启动安装流程直接当Live环境用。区别只是少了修复助手自带的那层图形工具核心的挂载和chroot操作完全一致。3.3 从Live环境修改root密码的完整链路启动U盘后选择默认的Live系统进入桌面。打开终端第一步是查看硬盘分区布局sudo fdisk -l # 或者 lsblk台式机常见的布局是/dev/sda1做/boot、/dev/sda2做根分区服务器的NVMe固态则显示为/dev/nvme0n1p1、/dev/nvme0n1p2这样的命名。找到根分区后把它挂载到临时目录sudo mkdir /mnt/sysroot sudo mount /dev/sda2 /mnt/sysroot如果还有独立的/boot分区这里不需要挂载因为我们只改密码不碰内核文件。接下来把Live系统的几个虚拟文件系统绑定过去这一步很重要sudo mount --bind /dev /mnt/sysroot/dev sudo mount --bind /proc /mnt/sysroot/proc sudo mount --bind /sys /mnt/sysroot/sys绑定挂载是为了让chroot后的环境拥有设备节点、进程信息和内核虚拟文件系统否则里面执行命令可能会报奇怪的错误。之后切进原系统根目录sudo chroot /mnt/sysroot /bin/bash现在你就是原系统里的root了直接执行passwd root输入两遍新密码成功后执行exit退出chroot再依次卸载挂载点重启即可exit sudo umount /mnt/sysroot/sys sudo umount /mnt/sysroot/proc sudo umount /mnt/sysroot/dev sudo umount /mnt/sysroot sudo reboot全程不能漏了卸载步骤尤其是根挂载点没卸干净就重启Live系统退出时可能报“target is busy”虽然大多数情况下不影响重启但给后续操作留隐患没必要。3.4 chroot方式比直接改shadow文件稳在哪有些“极简教程”会教你直接用文本编辑器改/mnt/sysroot/etc/shadow文件把密码哈希字段删掉或者替换成已知值。这个做法能跑通但有几个隐患一是shadow文件格式极其严格字段数、冒号位置、哈希串格式任何一处出错轻则密码失效重则所有用户都登录不了甚至在登录时直接触发“Authentication failure”就进不去了二是不同版本系统使用的密码哈希算法不一样麒麟V10默认是SHA-512加密你手工复制过来的哈希如果是其他算法的密码校验阶段很可能会出问题。用passwd root命令则完全不同——它会按照系统当前的哈希算法、当前的影子文件格式来生成正确的哈希串并且自动处理文件锁和权限写入。系统里所有相关的逻辑都已经被考虑过了你只需要关心密码记没记住这件事。3.5 修复助手方案的实际避坑点实际操作中容易翻车的几个地方我各说一个典型场景。第一个是分区挂载错。有次我给一台双硬盘机器重置密码lsblk看到两个硬盘我没仔细核对哪块是系统盘直接挂了第一块chroot进去发现/etc/shadow不存在马上退出来重新查fdisk -l里各分区的文件系统类型和挂载点这才挂对。判断依据很简单根分区里一定会有/etc、/home、/usr这些目录结构挂载后先ls /mnt/sysroot看一眼再继续。第二个是chroot后执行命令报“chroot: failed to run command /bin/bash: No such file or directory”之类的错误。这个通常是架构不匹配导致的比如Live ISO是x86_64架构而目标系统是ARM版麒麟那就直接放弃这条路改用第2章的GRUB方式处理。第三个是忘记U盘里有数据。制作启动盘会清空U盘全部内容做之前务必确认里面没有要保留的文件。别问我为什么特别提醒这个都是教训。4. 能登录系统却改不了密码命令报错逐个拆解另一种常见场景是系统能正常登录root密码也没被遗忘但执行切换或修改命令时各种报错。这里把咨询中出现频率最高的几个问题一次性说清楚。4.1 “su: 鉴定令牌操作错误”的真相su -输入密码后提示“鉴定令牌操作错误”是麒麟系统终端里最常见的报错之一。这句话的中文翻译来自英文的“incorrect password”核心含义只有一个密码不匹配。很多用户第一反应是“我的密码没错啊”然后反复重复输入几遍都一样。排查思路应该是这样的检查是不是大小写锁定键CapsLock开了Linux密码区分大小写一个字母错了就全错。检查数字小键盘有没有被NumLock影响部分键盘布局下小键盘输入的数字会变成别的字符。检查有没有输入了不可见字符比如从网页或文档复制密码时前后暗藏了空格或换行。用passwd -S root查看root账户的锁定状态。如果输出里显示LK说明root账号被锁定了这时不管密码输入多正确都会失败。解锁命令是passwd -u root。如果这些都没问题还有一种极少见但确实存在的可能root账户没有密码即密码字段为空或已被禁用。这种情况下su -同样会报“鉴定令牌操作错误”需要进入单用户模式或LiveCD环境重新设置密码。4.2 passwd命令提示“密码未通过字典检查”用passwd修改密码时系统回了一句类似“密码未通过字典检查”或“密码太简单”的提示然后拒绝修改。这是系统启用了密码复杂度策略受/etc/security/pwquality.conf控制。Linux的PAM模块会检查新密码的长度、字符种类、是否和旧密码相似、是否出现在字典里。麒麟系统的默认策略比CentOS略宽松但仍然要求密码有一定强度。两个处理方向一是老老实实换一个更复杂的密码包含大小写字母、数字、特殊字符长度至少8位这是推荐做法。安全策略之所以存在是因为弱密码带来的风险远大于你图省事省下的那几秒。二是确实需要在特定环境下设置一个简单密码比如测试机的临时环境可以临时调整策略文件vi /etc/security/pwquality.conf把minlen调小注释掉或加大ucredit、lcredit、dcredit等字符要求项。改完后执行passwd通常不需要重启服务PAM会在下次调用时重新读取配置。但提醒一句生产环境不要这么干你把密码策略关小等于把大门敞开。4.3 切换root的几种方式别再乱试普通用户拿到管理员权限主流方式有三种看着差不多实际细节区别不小su root su - root sudo -isu root只切换用户身份但保留当前用户的环境变量当前目录、PATH等还是原来的这在某些脚本场景下会出现命令找不到的怪问题。su - root是“登录式切换”完整加载root账户的环境变量和配置文件根目录、PATH都变成root的这是最接近“完全变成root”的方式日常推荐用它。sudo -i则是通过sudo机制直接启动一个root登录Shell前提是当前用户被加入了wheel组或拥有sudo权限。它在/etc/sudoers文件里配置常见的免密配置形如username ALL(ALL) NOPASSWD: ALL用visudo命令编辑不要直接改文件。如果执行sudo -i时提示“用户不在sudoers文件中”说明当前用户没有提权资格需要先让已有的root账号把它加入wheel组usermod -aG wheel username4.4 远程SSH登不上root密码对了也没用远程管理机器时很多人发现用root加正确密码SSH登录失败了。这种情况大概率跟密码无关而是sshd默认禁止root远程登录。检查服务器的/etc/ssh/sshd_config文件找到下面这行# PermitRootLogin prohibit-password把它改成PermitRootLogin yes然后重启sshd服务systemctl restart sshd用systemctl status sshd确认服务状态正常再从客户端重试。需要说明的是prohibit-password模式的意思是允许root通过密钥登录、但禁止密码登录这也是很多系统会更倾向的方案——密钥的强度远超密码。能用密钥就别用密码专业运维的基本素养。4.5 改完密码后如何验证真的成功了该踩的坑可能都踩完了最后补充一个验证思路。修改密码后别急着关终端执行下面几条su - root id chage -l rootsu - root确认切换成功id确认当前UID为0chage -l root查看密码策略信息能看到密码最近修改日期、到期时间等。如果再看仔细一点可以用grep ^root: /etc/shadow确认shadow文件里root行的密码哈希字段不是!感叹号开头表示账户被锁定。5. 延伸场景数据库root密码与普通用户密码一起讲清楚系统root密码说完了现在把热词里反复出现的关联问题补全。搜索“麒麟系统root密码修改”的人里面有相当一部分是遇到了MariaDB/MySQL的1045报错或者在给数据库root账号设密码时卡住。这一章就专门把数据库root密码、普通用户密码这些容易和系统root混淆的场景一次讲透避免你下次再搜一遍。5.1 MariaDB root密码忘记后的重置思路MariaDB是麒麟系统里默认安装的数据库服务。它的root账号是数据库内部的超级用户和系统root完全独立。如果你能正常登录操作系统但执行mysql -uroot -p时报ERROR 1045 (28000): Access denied for user rootlocalhost (using password: YES)这说明数据库层面不允许你登录要么是密码错误要么是密码为空但连接方式不对。重置数据库root密码的经典步骤是跳过授权表启动服务。先把数据库服务停下来systemctl stop mariadb然后修改配置文件/etc/my.cnf在[mysqld]段下加一行skip-grant-tables启动服务systemctl start mariadb这个参数的含义是启动时跳过所有权限验证任何用户都能直接连进去。执行mysql -uroot进入SQL命令行后通过账号管理语句直接重置密码。麒麟V10自带的MariaDB通常是10.x版本用ALTER USER语法更标准ALTER USER rootlocalhost IDENTIFIED BY 新密码; FLUSH PRIVILEGES;如果是非常老的5.x版本可能需要用UPDATE mysql.user SET PasswordPASSWORD(新密码) WHERE Userroot。修改完成后务必把/etc/my.cnf里加的skip-grant-tables删掉再重启一次服务。这一步很多人会忘导致数据库处于“裸奔”状态一直开着安全问题就这么来的。5.2 修改普通用户密码的三条路径管理麒麟系统时修改普通用户密码也是很常见的操作。方法无非三条在已经提权的环境下直接改passwd username在root账户下用交互式命令批量修改chpasswd它会提示你逐行输入“用户名:新密码”适合批量场景。还有强制用户下次登录时改密码chage -d 0 username这样设置后该用户下次登录系统会被要求先设置新密码才能正常使用。这条在员工离职交接、临时账号清理时特别管用比直接删号更柔和也更能配合流程。5.3 顺带聊聊root密码管理的日常习惯改密码这件事改完之后真正的重点是怎么避免下一次再陷入同样的困境。我自己这几年沉淀下来的几条习惯分享给你。第一新机器装好后不要默认保留初始密码登录后第一件事就是用passwd改成自己的强密码并把记录密码的时机提前录入密码管理工具。第二运维场景能不直接用root就不用给日常操作人员开普通账号加sudo权限root密码单独封存。第三定期轮换root密码至少半年一次员工离职时立即轮换。第四当你要把机器交给他人的时候不要口头交代密码写在纸上或加密分享链接里并确认对方收到后立即修改。从操作本质上说重置root密码不是高技术含量的操作真正体现水平的是你在密码体系上建立的这套管理规则。规则清晰了出问题的概率会小很多。5.4 最后再分享一个小技巧在重装或拿到新系统时可以先对/etc/shadow文件做一次加密备份放到安全位置。以后忘记密码时不需要走GRUB或LiveCD那么重的流程直接查看备份里的哈希串替换回去就能恢复登录。这个操作不复杂cp /etc/shadow /root/shadow.bak.$(date %F) chmod 600 /root/shadow.bak.*不过要记住定期刷新这份备份。密码改过几次之后旧的备份就失效了。更重要的是备份文件本身要放在别人碰不到的地方它相当于一把备用钥匙这要是丢了比忘密码麻烦得多。
阅读完成 · 觉得有帮助?