在非root用户下修改了/ect/passwd和/ect/group文件,在修改/etc/shadow时系统要求重新输入密码,结果输入密码无效,无法进行shadow文件的修改。因为现在使用的用户在旧shadow文件里找不到对应的密码。此时,重启电脑选择用户时也会报密码错误,无法进入。
因此参考一些方法,使用启动盘重新进入系统,修复了损坏的文件。
三个文件的说明如下:
/etc/passwd:
- 存储系统中所有用户的基本信息。
- 每个用户占一行,包含用户名、用户ID、组ID、用户的主目录、默认Shell等。
/etc/passwd
是可读的,但密码不会存储在这里,存储密码的功能已移到/etc/shadow。
/etc/shadow
:密码信息文件
- 存储用户的密码(加密后的形式)以及密码的相关信息(如密码有效期、账户过期时间等)。
- 提高了安全性,因为只有 root 用户或具有适当权限的进程可以读取
/etc/shadow
。/etc/shadow
是非常敏感的文件,普通用户无法直接访问。如果此文件损坏,系统将无法验证用户密码。
/etc/group
:组信息文件
- 定义系统中的用户组及其成员。
- 每个用户组对应一行,包含组名、组ID以及组内成员列表。
- 当多个用户需要共享权限时,使用组来进行权限管理。
- 每个用户可以属于多个组,但
/etc/passwd
中只能记录用户的主组信息,其他附加组信息存储在/etc/group
中。
解决过程如下:
1. 制作启动盘
在Ubuntu 20.04.6 LTS (Focal Fossa)下载镜像,并使用u盘制作启动盘。ubuntu20自带启动盘制作工具。
2. 插入启动盘,在bois界面选择启动盘启动。启动后选择Try Ubuntu。
3. 挂载原系统分区
lsblk
假设你的根文件系统分区是 /dev/sda1
,你可以挂载它到 /mnt
目录:
sudo mount /dev/sda1 /mnt
4. 挂载必要的虚拟文件系统
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run
5. 进入 chroot 环境:
sudo chroot /mnt
6. 修复文件,由于我在修改前进行了备份,只需要将备份文件覆盖原有文件即可
cp /mnt/etc/shadow.bak /mnt/etc/shadow
cp /mnt/etc/passwd.bak /mnt/etc/passwd
cp /mnt/etc/group.bak /mnt/etc/group
7. 卸载挂载的文件系统
exit
sudo umount /mnt/dev
sudo umount /mnt/proc
sudo umount /mnt/sys
sudo umount /mnt/run
sudo umount /mnt
8. 重启系统
sudo reboot