我删除了“/etc/passwd”文件,无法登录

我删除了“/etc/passwd”文件,无法登录

我试图更改我的用户名和主目录 ( /home/username),结果系统开始崩溃。我删除了文件passwd,但我有一个名为 的备份passwd_bkp。我尝试将其重命名passwd_bkppasswd,但没有成功。没有执行任何命令...我当时在一个终端窗口中。

我重新启动了系统,现在无法登录。GRUB 提供了两个选项:Linux 和恢复模式。

我尝试以 root 身份打开会话,但它说文件系统已损坏。我不能访问我的文件。

我丢失了所有文件吗?

答案1

不,根据您的描述,您没有丢失任何文件(除了/etc/passwd,您已删除但已备份的文件)。

启动 Ubuntu Live CD/DVD 或 Live USB 闪存驱动器。选择Try Ubuntu(不是Install Ubuntu)。桌面加载后,打开 Nautilus(文件浏览器)窗口。您可以在 下找到 Ubuntu 系统的分区Devices。单击它以安装它。

现在您可以恢复备份了。不过,您必须以 root 身份执行此操作。这里有一个非常简单的方法。

  1. 打开终端窗口 ( Ctrl+ Alt+ T)。在终端中,输入cd并键入Space键,但不要按下Enter

  2. 在 Nautilus 中,找到已安装的 Ubuntu 系统内的目录。(这与Live CD 的目录etc不同。已安装的 Ubuntu 系统内的目录位于您刚刚挂载的分区中。)etcetc

  3. 将此etc目录拖入终端,它会将其完整路径粘贴到终端中,完成命令cd ...

  4. Enter运行命令。现在您位于包含文件的目录中passwd。我假设您的备份文件passwd_bkp也位于此处。

  5. 运行此命令:

    sudo cp passwd_bkp passwd
    

passwd将从您的备份中恢复文件,因此现在您应该能够重新启动、移除 CD/DVD 或 USB 闪存驱动器,然后重新启动到已安装的 Ubuntu 系统。您安装的 Ubuntu 系统应该可以再次运行。


未来,您应该知道,不建议手动编辑/etc/passwd/etc/group/etc/shadow/etc/gshadow。相反,您应该使用 Ubuntu 提供的实用程序对系统上的用户和组进行任何必要的更改。您可能知道您可以在系统设置或使用 中编辑它users-admin。但也有非常强大的命令行实用程序可用于此目的,它们比自己手动编辑配置文件更安全、更简单。以下是有关 Ubuntu 中最相关的此类实用程序的文档:

你可以更改你的用户名使用其中一些实用程序。这个答案详细解释了一种方法。但是,您应该知道(正如目前评论中提到的那样),有些应用程序假设您的用户名保持不变。因此更改您的用户名可能会导致一些问题。

答案2

作为启动 livecd 的替代方法,您可以e按 grub 菜单上的 编辑救援模式条目,并添加init=/bin/sh到内核参数。这会将您直接带入 root shell,您可以在其中使用 重新挂载文件系统读写后将备份文件复制回原始文件mount -o remount,rw /

答案3

在继续阅读此答案之前,您应该先阅读 Eliah Kagan 的答案。他解释了如何处理这种情况以及为什么通常不需要手动更改 /etc/passwd。

无论如何如果你真正了解自己在做什么你呢需要/etc/passwd手动编辑,您可以这样做,但您仍然不应该简单地用您最喜欢的编辑器更改文件。相反,有一个工具

vipw

从手册页中:

The vipw and vigr commands edits the files /etc/passwd and /etc/group,
respectively. With the -s flag, they will edit the shadow versions of those
files, /etc/shadow and /etc/gshadow, respectively. The programs will set
the appropriate locks to prevent file corruption.

例如,如果您想更改用户的 UID,据我所知,手动编辑文件是唯一的方法。此外,如果您想在不知情的情况下更改用户密码,然后将其恢复为以前的密码,则无法使用 或usermod。但是,如果您从影子文件中保存了哈希密码,然后更改了用户的密码,则之后您可以使用 再次编辑影子文件来添加哈希密码vipw -s

答案4

如果您可以登录,只需打开终端并尝试以下操作:

sudo cp /etc/passwd- /etc/passwd
sudo chmod 644 /etc/passwd

别的

启动到恢复模式或从 Ubuntu Live CD 启动。然后,安装旧驱动器:

mkdir /olddrive
mount /dev/hda5 /olddrive
assuming that your old drive is on /dev/hda5.
then, cd to /olddrive/etc
type:
echo "root::0:0:Superuser:/:/bin/bash" > passwd

然后重新启动。这将不会为 root 设置密码。

然后,您可以登录、重新创建所有帐户等。

您也可以使用名为(我认为)的备份/etc/passwd-

编辑:( 另一种方法我以前没有尝试过但我认为它也应该有效)

  • 开机时启动 GRUB(Esc开机时按下)
  • 按下e(恢复模式)
  • 按下e以 kernel 开头的行
  • 按下Space并输入init=/bin/bash
  • Enter
  • b
  • 在命令提示符下输入:cp /etc/passwd- /etc/passwd
  • 重新启动到 GRUB
  • 按下e(恢复模式)
  • 按下e以 kernel 开头的行
  • 按下Space并输入init=/bin/bash
  • Enter
  • b
  • 在命令提示符下输入mount -o remount,rw /
  • 类型passwd YOURUSERNAMEHERE(如果您不知道您的用户名ls /home,请输入(小写的 L 和小写的 S)以获取用户列表)
  • 提示时输入新密码
  • 重新启动至正常启动。

来源

相关内容