在Linux系统中遇到忘记登录密码的情况,可以通过以下多种方法重置或恢复密码,具体操作需根据系统环境(如是否支持物理访问、是否使用GRUB引导等)选择合适方案:
方法1:通过GRUB引导菜单单用户模式重置(物理机常用)
1. 重启系统,在GRUB引导界面迅速按`e`键(若为UEFI系统可能需要先按`ESC`)。
2. 找到以`linux`或`linux16`开头的行,在行尾添加 `init=/bin/bash` 或 `rd.break`(适用于systemd系统)。
3. 按`Ctrl+X`或`F10`启动到单用户模式。
4. 挂载文件系统为可写:
bash
mount -o remount,rw / # 若使用rd.break,需先执行:mount -o remount,rw /sysroot
chroot /sysroot # 仅rd.break时需要
5. 修改密码:
bash
passwd username # 替换username为目标账户
6. 更新SELinux上下文(如启用SELinux):
bash
touch /.autorelabel
7. 重启系统:
bash
exec /sbin/init
方法2:使用Live CD/USB重置(无GRUB权限时)
1. 制作Linux Live USB(如Ubuntu镜像),从USB启动进入Live环境。
2. 挂载原系统根分区:
bash
sudo fdisk -l # 确认原系统分区(如/dev/sda1)
sudo mount /dev/sda1 /mnt # 挂载根分区
3. chroot到原系统:
bash
sudo chroot /mnt
4. 执行`passwd username`修改密码,完成后卸载分区并重启。
方法3:删除root密码文件(极端情况)
1. 在单用户模式下删除`/etc/shadow`中的root密码哈希:
bash
cp /etc/shadow /etc/shadow.bak # 备份
sed -i 's/^root:[^:]*:/root::/' /etc/shadow # 清空root密码
风险提示:此操作会完全移除root密码,需在重启后立即重新设置。
方法4:针对LUKS加密磁盘
若系统磁盘加密,需先再操作:
1. 在Live环境中解锁加密分区:
bash
cryptsetup luksOpen /dev/sda2 cryptroot
2. 挂载并按照方法2修改密码。
扩展知识
密码失效处理:使用`chage -l username`查看密码过期时间,`passwd -e username`强制下次登录修改密码。
密钥登录替代:建议配置SSH密钥认证,避免依赖密码(`~/.ssh/authorized_keys`)。
安全加固:启用两步验证(如Google Authenticator)或限制sudo权限(`visudo`配置)。
日志记录:通过`last`或`journalctl`查看登录失败记录,排查暴力破解行为。