十二、Linux 恢复密码

wangzhaoyang 发布于 9 天前 22 次阅读 网络工程中的Linux系统 无~ 1538 字


以下是多种方法在 Linux 系统启动时修改用户密码的详细指南,包括 init=/bin/bashrd.break 方法,同时包含内核版本兼容性、SELinux、磁盘加密以及注意事项。


方法一:使用 init=/bin/bash

适用场景:常见于大部分 Linux 发行版,不受特定内核版本限制。

步骤:

  1. 进入 GRUB 菜单:
  • 启动时按 EscShift 键进入 GRUB 菜单。
  1. 编辑 GRUB 启动项:
  • 选择要启动的内核,按 e 键编辑。
  • 找到 linux 开头的行,类似:
    linux /boot/vmlinuz-xxx root=/dev/xxx ro quiet splash
  • 修改为:
    linux /boot/vmlinuz-xxx root=/dev/xxx rw init=/bin/bash
  1. 启动系统:
  • Ctrl + XF10 启动系统。
  1. 挂载文件系统:
  • 如果系统以只读模式启动,运行以下命令:
    bash mount -o remount,rw /
  1. 修改密码:
   passwd 用户名
  1. 同步并重启:
   sync
   reboot

方法二:使用 rd.break

适用场景:主要针对 RHEL/CentOS 和 Fedora 系统,推荐用于内核版本较高的系统(支持 rd.break 参数)。

步骤:

  1. 进入 GRUB 菜单:
  • 启动时按 EscShift 键进入 GRUB 菜单。
  1. 编辑 GRUB 启动项:
  • 选择启动的内核,按 e 键编辑。
  • 找到以 linux 开头的行,添加 rd.break 参数,例如:
    linux /boot/vmlinuz-xxx root=/dev/xxx ro quiet splash rd.break
  1. 启动系统:
  • Ctrl + XF10 启动。
  1. 挂载根文件系统:
  • 系统进入紧急模式,运行以下命令:
    bash mount -o remount,rw /sysroot
  • 切换到根文件系统:
    bash chroot /sysroot
  1. 修改密码:
   passwd 用户名
  1. 重新启用 SELinux(如果启用):
   touch /.autorelabel
  1. 退出并重启:
   exit
   reboot

方法三:使用单用户模式(Recovery Mode)

适用场景:系统提供单用户模式或恢复模式,适用于 Ubuntu 等常见发行版。

步骤:

  1. 在 GRUB 菜单中,选择 Advanced options,然后选择 recovery mode
  2. 从恢复菜单中选择 Drop to root shell prompt
  3. 挂载文件系统为可写:
   mount -o remount,rw /
  1. 修改密码:
   passwd 用户名
  1. 重启系统:
   reboot

注意事项

1. SELinux 相关问题

  • 重启后无法登录:
    如果启用了 SELinux,但未重新标记文件系统,可能导致登录失败。解决方法:
  touch /.autorelabel

系统会在下次启动时重新标记 SELinux 标签。

  • 完全禁用 SELinux(非推荐):
    编辑 /etc/selinux/config 文件,将 SELINUX 设置为 disabled

2. 磁盘加密相关问题

  • 如果系统使用全盘加密,启动时可能需要手动输入解锁密码。
  • 如果加密密码丢失或遗忘,无法恢复数据。

3. 不同内核版本的兼容性

  • init=/bin/bash 方法:
    几乎适用于所有 Linux 内核版本,适配性强。
  • rd.break 方法:
    主要适用于 RHEL/CentOS 7+Fedora 系列,低版本系统可能不支持。
  • 单用户模式:
    适用于启用了 Recovery Mode 的系统,如 Ubuntu、Debian。

4. 使用 LiveCD 救援(备用方法)

  • 若上述方法均不可行,可使用 LiveCD 启动系统,挂载分区并更改密码:
  mount /dev/sdXn /mnt
  chroot /mnt
  passwd 用户名

总结

以上方法基本涵盖了 Linux 启动时修改密码的所有场景和注意事项。在操作时请根据系统实际情况选择合适的方式。如果仍有疑问,请提供具体发行版和内核版本信息以进一步支持。

Linux 使用 vim 修改 /etc/shadow 密码


在特殊情况下,可以通过直接编辑 /etc/shadow 文件来修改用户的密码。这种方法绕过了 passwd 命令,适用于无法使用常规方法修改密码的情景,但需要谨慎操作。


1. /etc/shadow 文件结构

/etc/shadow 文件每一行记录一个用户的信息,格式如下:

用户名:加密密码:最近更改日期:最小间隔天数:最大间隔天数:警告时间:不活动时间:过期时间:保留字段
  • 用户名:对应的用户。
  • 加密密码:用户密码的加密字符串。
  • 如果为 !*,表示账户被锁定。
  • 如果为空,则用户可以无密码登录(危险)。
  • 其他字段:主要与密码过期和管理相关,常用不修改。

2. 准备工作

  1. 备份 /etc/shadow 文件:
    在编辑前,务必备份原始文件:
   cp /etc/shadow /etc/shadow.bak
  1. 获取加密密码字符串:
    使用以下方法生成加密的密码:
   openssl passwd -6
  • 输入新密码后,生成一段加密字符串,示例:
    $6$9Bue7f2y$h3y3MZKo3cdsdB8BlbG67GhH24XjAfYW7Gfjh/P5GfD1sdC7dFhHk

3. 修改 /etc/shadow 文件

步骤:

  1. 使用 vim 编辑文件:
   vim /etc/shadow
  1. 找到目标用户的记录:
    示例:
   user1:$6$9Bue7f2y$h3y3MZKo3cdsdB8BlbG67GhH24XjAfYW7Gfjh/P5GfD1sdC7dFhHk:19357:0:99999:7:::
  1. 替换加密密码:
  • 将生成的加密字符串替换到第二个字段(: 分隔)中。
  • 示例:将密码修改为 $6$example123$abcxyz...,修改后:
    user1:$6$example123$abcxyz....:19357:0:99999:7:::
  1. 保存文件:
    按以下键保存并退出:
   Esc
   :wq

4. 重启服务或系统

  • 立即应用更改:
    直接使用以下命令使更改生效,无需重启系统:
  sudo systemctl restart sshd

如果直接登录系统而非远程,不需要此步骤。


5. 注意事项

  1. 密码加密方式:
  • openssl passwd -6 使用 SHA-512 算法(推荐)。
  • 如果需要其他算法,可用以下选项:
    • MD5:openssl passwd -1
    • SHA-256:openssl passwd -5
  1. 慎用空密码:
  • 如果将加密密码字段留空,则用户可以无密码登录,可能存在严重安全风险。
  1. 文件权限:
    确保 /etc/shadow 的权限未被修改,执行以下命令检查:
   ls -l /etc/shadow

应显示:

   -rw------- 1 root root ...
  1. 避免误操作:
    修改过程中务必小心,错误可能导致用户无法登录系统。如果出错,可还原备份:
   cp /etc/shadow.bak /etc/shadow

补充说明

  • 恢复锁定账户:
    如果用户密码字段以 !* 开头,则账户被锁定。通过删除 !* 即可解锁。
  • 禁用账户密码:
    如果希望禁用用户密码,可以将加密密码字段设置为:
  user1:!:19357:0:99999:7:::