Linux服务器用户名和密码遗忘后,不要急着重装系统,通过单用户模式或救援模式即可重置密码并找回用户列表,数据不会丢失。
为什么会忘记密码以及核心解决思路
Linux服务器的密码和用户名通常存放在 /etc/passwd 和 /etc/shadow 两个文件里,/etc/shadow 保存加密后的密码哈希,遗忘登录凭据的核心原因大多是长期未登录、交接文档缺失或临时修改后未记录,行业共识认为,遇到这类问题时应优先尝试绕过登录认证进入系统维护模式,而不是直接重装。
解决的底层逻辑非常简单:只要物理或控制台权限还在,就能通过修改内核启动参数进入免密环境,然后重新设置密码并读取用户列表。
linux服务器用户名忘了怎么查
用户名遗忘往往比密码遗忘更让人头疼,因为登录界面没有提示,其实查找用户名的方法很多,通过单用户模式进入系统后,一条命令就能列出全部用户。
从/etc/passwd文件提取有效用户名
用单用户模式或救援模式进入系统后,执行以下命令查看所有用户:
cat /etc/passwd | grep -v nologin | grep -v false
这条命令会过滤掉无法登录的系统账户,筛选出可以登录的真实用户,输出的每一行格式为 用户名:x:UID:GID:描述:家目录:shell,重点关注最后一列不是 /sbin/nologin 的行。
查看/home目录下的用户家目录
另一种更直观的方式是查看家目录名称,多数情况下家目录名与用户名一致:
ls /home/
如果这个目录下出现 zhangsan、lisi 等文件夹,大概率就是对应的用户名,但需要注意,部分管理员会修改家目录位置,所以这个方法适合快速定位,不作为最终依据。
结合UID范围筛选真实用户
行业共识认为UID在1000以上通常是普通用户,配合以下命令能更精确地锁定目标:
awk -F: '$3>=1000 {print $1}' /etc/passwd
这个方法直接读取UID字段大于等于1000的账户名,比肉眼逐行翻文件快得多,如果服务器的发行版是CentOS 7或Ubuntu 20.04,输出结果通常就是root之外的全部可登录用户。
linux服务器root密码忘记进不去系统的重置方案
密码遗忘的处理方式取决于服务器是物理机、虚拟机还是云服务器,不同的环境有不同的入口,但核心思路一致:在引导阶段进入单用户模式或紧急模式。
通过GRUB引导菜单进入单用户模式
这是最常见、最稳定的重置方法,适用于CentOS 6/7/8、Ubuntu 16.04及以上版本、Debian等主流发行版。
具体操作步骤如下:
- 开机或重启,在GRUB引导界面出现时,快速按下
e键进入编辑模式 - 找到以
linux或linux16开头的行,通常是倒数第二行 - 在该行的末尾追加
rd.break或直接修改ro为rw init=/sysroot/bin/sh - 按下
Ctrl + X或F10启动进入紧急shell环境
以CentOS 7使用rd.break为例:
mount -o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel
exit
reboot
注意修改密码时输入两次新密码,屏幕上不会显示字符,这是正常现象。touch /.autorelabel 只适用于SELinux开启的系统,用于触发文件标签重刷,如果关闭SELinux可以跳过。
以Ubuntu 20.04修改ro为rw为例:
把 ro quiet splash 改成 rw init=/bin/bash,然后启动,直接进入bash环境:
mount -o remount,rw /
passwd root
exec /sbin/init
通过系统救援模式重置密码
如果GRUB菜单被隐藏、或服务器带有独立的救援分区,系统救援模式是更稳妥的选择,云服务器厂商的控制台一般都提供VNC登录入口,这属于远程救援通道之一。
操作流程如下:
- 从发行版ISO镜像启动,选择“救援已安装的系统”
- 按提示选择语言和键盘布局
- 系统自动检测已有安装,选择“挂载到/mnt/sysimage”
- 进入shell后执行以下命令:
chroot /mnt/sysimage passwd root exit reboot
这个方法适合物理服务器或本地虚拟机,云服务器用VNC加单用户模式会更方便。
使用systemd的emergency模式
现代Linux发行版普遍使用systemd,另一种进入维护环境的方法:
- GRUB界面按
e编辑 - 在
linux行末尾追加systemd.unit=emergency.target - 启动后输入root密码进入紧急模式,但此时root密码还没重置,所以这个方案适合密码已知但系统启动异常的场景,密码忘了的情况建议优先用前两种方案。
云服务器密码忘了不用慌,控制台就能解决
很多用户使用的是简米云、酷番云或华为云的云服务器,这些场景下重置密码变得更简单,基本不需要手动操作命令行。
云服务器密码重置步骤:
- 登录云厂商控制台
- 找到目标实例,点击“重置实例密码”
- 按照要求设置符合密码强度策略的新密码
- 重启实例后生效
需要特别说明,云服务器的这种重置方式要求ECS实例必须处于“已停止”状态,如果实例还在运行,需要先停止实例,但停止实例会中断业务,建议在业务低峰期操作,或者提前做好快照备份。
如果云服务器绑定了密钥对,即便忘了密码也可以通过密钥登录,行业共识认为,使用密钥对登录比密码登录安全性高得多,相当一部分企业已在生产环境强制推行密钥认证。
重置密码后的检查清单和注意事项
密码重置成功后不要立刻欢天喜地,还需要确认几个关键点,否则下次重启可能又出问题。
SELinux状态检查
如果服务器开启了SELinux,在单用户模式修改密码后没有执行 touch /.autorelabel,重启时可能出现无法登录的情况,检查SELinux状态:
getenforce
输出 Enforcing 说明SELinux处于强制模式,需要等待系统自动重打标签后再登录,整个重打过程可能需要几分钟,取决于服务器文件数量。
修改密码策略避免下次遗忘
密码改完后,建议顺手把密码策略固化下来,避免同事再次遗忘:
chage -M 90 root chage -d 0 zhangsan
第一条命令设置root密码90天后过期,第二条命令强制用户下次登录时修改密码,如果服务器只有自己使用,也可以用 chage -E -1 root 取消过期时间。
更新运维文档
遗忘密码的根源多数是文档缺失,建议把修改后的用户名、密码、密钥文件路径、服务器IP等信息录入内部密码管理工具,比如KeePass或JumpServer,这样团队成员都能及时获取正确的登录凭据。
如何从根本上降低遗忘密码的概率
与其每次出问题都靠单用户模式救火,不如一开始就做好制度和技术层面的防护。
- 使用密钥认证:生成一对RSA或Ed25519密钥,把公钥放到服务器的
~/.ssh/authorized_keys中,登录时不需要输入密码,自然不存在遗忘问题 - 定期审计密码:每季度检查一次
/etc/shadow文件,确认没有空密码或弱密码账户 - 配置集中认证:如果服务器数量较多,可以搭建FreeIPA或OpenLDAP,统一管理用户名和密码,单台服务器的密码遗忘问题就变成了整个认证体系的问题
- 保留root的物理访问通道:至少在BIOS层面设置好开机密码,并确保机房或云控制台的VNC访问权限在可控范围内
密码重置后如何验证是否成功
重启后不要依赖感觉,用实际命令验证一下:
su - root whoami id
看到 uid=0(root) 就表示root身份的密码已重置成功,接着用新密码测试SSH远程登录,确认网络层面的认证也正常,如果SSH端口是自定义的,比如2222,记得在登录命令中带上 -p 2222。
验证时尽量使用两个不同的终端窗口,一个保持现有连接不掉线,另一个测试新密码能否登录,这样即使测试失败,还有退路可以重新操作。
常见问题解答
Linux服务器用户名密码忘了,硬盘里的数据会丢吗?
不会,单用户模式和救援模式只是绕过了登录认证,并不会格式化磁盘或删除数据,密码重置全程只修改 /etc/shadow 文件,对网站文件、数据库内容没有任何影响,但如果误操作执行了 rm -rf / 或格式化分区,那才真的会丢数据。
忘记了Linux的root密码,但GRUB也设置了密码保护怎么办?
GRUB密码分为管理员密码和启动菜单密码,如果只是启动菜单密码,可以尝试用Live CD启动系统后挂载 /boot 分区,删除或注释掉 grub.cfg 中的 set superusers 和 password 行,如果BIOS/UEFI层面设置了硬盘密码,那只能联系服务器厂商或尝试硬件级解锁。
云服务器控制台重置密码后还需要重启吗?
需要,云厂商控制台重置密码操作本质上是修改系统内的密码哈希,这个修改只有当实例重启后才会完全生效,部分厂商支持在线重置但不会自动同步,等一段时间再重启也能生效,不过最稳妥的做法还是立即重启一次实例。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/595768.html




