当Linux服务器系统密码忘记时,可通过以下方法解决,需根据实际环境和权限选择合适的方案:
1. 单用户模式重置密码
- 重启服务器,在GRUB启动菜单界面按`e`进入编辑模式。
- 找到以`linux`或`linux16`开头的行,在行末添加`rd.break`或`init=/bin/bash`(具体参数因发行版而异)。
- 按`Ctrl+X`进入单用户模式后,执行以下命令:
bash
mount -o remount,rw /sysroot
chroot /sysroot
passwd root # 修改root密码
touch /.autorelabel # SELinux环境需执行
exit; reboot
- 适用于物理机或具备本地控制台的云服务器。
2. Live CD/USB救援
- 通过Linux Live介质启动系统,挂载原系统根分区(如`/dev/sda1`到`/mnt`)。
- 使用`chroot`切换环境后,用`passwd`命令修改密码:
bash
mount /dev/sda1 /mnt
mount --bind /dev /mnt/dev
chroot /mnt
passwd root
- 需注意文件系统类型(如XFS/Btrfs可能需要额外参数)。
3. 云平台解决方案
- 阿里云/腾讯云等提供VNC控制台,可通过救援模式或云助手挂载系统盘到临时实例修改`/etc/shadow`文件。
- AWS EC2可通过用户数据脚本在启动时重置密码(需实例支持)。
4. 内核启动参数覆盖
- 在GRUB中追加`init=/bin/sh`直接跳转到Shell,避免密码验证。需根据发行版调整参数,可能需禁用Secure Boot。
5. 密码哈希直接替换
- 如果有其他可写权限的账户,可手动生成密码哈希(`openssl passwd -6`或`mkpasswd -m sha-512`),替换`/etc/shadow`中root的哈希值。
扩展知识:
SELinux注意事项:修改密码后需创建`/.autorelabel`文件,否则可能因上下文错误导致服务异常。
LUKS加密磁盘:若全盘加密需先`cryptsetup luksOpen`解锁,再挂载文件系统。
审计与安全:密码重置操作会被记录到`/var/log/audit/audit.log`或`journalctl`,企业环境中需报备。
预防措施:建议配置SSH密钥认证,启用sudo权限管理,定期备份关键配置文件。
操作前务必确认是否有数据备份权限,避免因误操作导致数据丢失。