以下是多种方法在 Linux 系统启动时修改用户密码的详细指南,包括 init=/bin/bash
和 rd.break
方法,同时包含内核版本兼容性、SELinux、磁盘加密以及注意事项。
方法一:使用 init=/bin/bash
适用场景:常见于大部分 Linux 发行版,不受特定内核版本限制。
步骤:
- 进入 GRUB 菜单:
- 启动时按
Esc
或Shift
键进入 GRUB 菜单。
- 编辑 GRUB 启动项:
- 选择要启动的内核,按
e
键编辑。 - 找到
linux
开头的行,类似:linux /boot/vmlinuz-xxx root=/dev/xxx ro quiet splash
- 修改为:
linux /boot/vmlinuz-xxx root=/dev/xxx rw init=/bin/bash
- 启动系统:
- 按
Ctrl + X
或F10
启动系统。
- 挂载文件系统:
- 如果系统以只读模式启动,运行以下命令:
bash mount -o remount,rw /
- 修改密码:
passwd 用户名
- 同步并重启:
sync
reboot
方法二:使用 rd.break
适用场景:主要针对 RHEL/CentOS 和 Fedora 系统,推荐用于内核版本较高的系统(支持 rd.break
参数)。
步骤:
- 进入 GRUB 菜单:
- 启动时按
Esc
或Shift
键进入 GRUB 菜单。
- 编辑 GRUB 启动项:
- 选择启动的内核,按
e
键编辑。 - 找到以
linux
开头的行,添加rd.break
参数,例如:linux /boot/vmlinuz-xxx root=/dev/xxx ro quiet splash rd.break
- 启动系统:
- 按
Ctrl + X
或F10
启动。
- 挂载根文件系统:
- 系统进入紧急模式,运行以下命令:
bash mount -o remount,rw /sysroot
- 切换到根文件系统:
bash chroot /sysroot
- 修改密码:
passwd 用户名
- 重新启用 SELinux(如果启用):
touch /.autorelabel
- 退出并重启:
exit
reboot
方法三:使用单用户模式(Recovery Mode)
适用场景:系统提供单用户模式或恢复模式,适用于 Ubuntu 等常见发行版。
步骤:
- 在 GRUB 菜单中,选择
Advanced options
,然后选择recovery mode
。 - 从恢复菜单中选择
Drop to root shell prompt
。 - 挂载文件系统为可写:
mount -o remount,rw /
- 修改密码:
passwd 用户名
- 重启系统:
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. 准备工作
- 备份
/etc/shadow
文件:
在编辑前,务必备份原始文件:
cp /etc/shadow /etc/shadow.bak
- 获取加密密码字符串:
使用以下方法生成加密的密码:
openssl passwd -6
- 输入新密码后,生成一段加密字符串,示例:
$6$9Bue7f2y$h3y3MZKo3cdsdB8BlbG67GhH24XjAfYW7Gfjh/P5GfD1sdC7dFhHk
3. 修改 /etc/shadow
文件
步骤:
- 使用
vim
编辑文件:
vim /etc/shadow
- 找到目标用户的记录:
示例:
user1:$6$9Bue7f2y$h3y3MZKo3cdsdB8BlbG67GhH24XjAfYW7Gfjh/P5GfD1sdC7dFhHk:19357:0:99999:7:::
- 替换加密密码:
- 将生成的加密字符串替换到第二个字段(
:
分隔)中。 - 示例:将密码修改为
$6$example123$abcxyz...
,修改后:user1:$6$example123$abcxyz....:19357:0:99999:7:::
- 保存文件:
按以下键保存并退出:
Esc
:wq
4. 重启服务或系统
- 立即应用更改:
直接使用以下命令使更改生效,无需重启系统:
sudo systemctl restart sshd
如果直接登录系统而非远程,不需要此步骤。
5. 注意事项
- 密码加密方式:
openssl passwd -6
使用 SHA-512 算法(推荐)。- 如果需要其他算法,可用以下选项:
- MD5:
openssl passwd -1
- SHA-256:
openssl passwd -5
- MD5:
- 慎用空密码:
- 如果将加密密码字段留空,则用户可以无密码登录,可能存在严重安全风险。
- 文件权限:
确保/etc/shadow
的权限未被修改,执行以下命令检查:
ls -l /etc/shadow
应显示:
-rw------- 1 root root ...
- 避免误操作:
修改过程中务必小心,错误可能导致用户无法登录系统。如果出错,可还原备份:
cp /etc/shadow.bak /etc/shadow
补充说明
- 恢复锁定账户:
如果用户密码字段以!
或*
开头,则账户被锁定。通过删除!
或*
即可解锁。 - 禁用账户密码:
如果希望禁用用户密码,可以将加密密码字段设置为:
user1:!:19357:0:99999:7:::
Comments NOTHING