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


22

我试图更改用户名以及主目录(/home/username),系统开始崩溃。我删除了passwd文件,但是备份名为passwd_bkp。我试图将其重命名passwd_bkppasswd,但它不起作用。没有命令正在执行...我在终端窗口中。

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

我试图以root用户身份打开会话,但文件系统已损坏。我无法访问我的文件。

我丢失了所有文件吗?


1
关于您的后续问题:使用恢复技术替换密码。参见:askubuntu.com/questions/24006/…– david6 2012
6

1
@ david6当用户由于没有/etc/passwd文件而无法登录时,也无法重置密码。您必须还原(或重新创建)该passwd文件。完成后,通常无需重设密码。
Eliah Kagan 2012年

@Eliah Kagan:同意,但是在(应该)从备份副本还原了/ etc / passwd之后,我正在回答后续问题。
david6 2012年

您将需要更详细地说明该错误。
psusi 2012年

Answers:


32

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

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

现在您可以还原备份。但是,您必须以root用户身份进行操作。这是一种非常简单的方法。

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

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

  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中最相关的此类实用程序的文档:

您可以使用其中一些实用程序来更改用户名该答案详细解释了一种方法。但是,您应该知道(当前在此处有评论提及)某些应用程序假定您的用户名保持不变。因此,更改用户名可能会导致一些问题。


非常感谢。巴西南部早上四点钟。。。我感到非常担心,无法入睡。我会尝试...
joao rodrigo leao

2
如果您没有进行备份,请尝试使用/etc/passwd-/var/backups/passwd.bak。确保设置正确的权限。示例:sudo install -m644 /etc/passwd- /etc/passwd
Lekensteyn 2014年

4

作为引导livecd的一种替代方法,您可以按egrub菜单中的键来编辑救援模式条目,然后添加init=/bin/sh到内核​​参数中。这将使您直接进入根shell,在该根shell上,您可以使用将文件系统以读写方式重新安装后,将备份文件复制回原始文件mount -o remount,rw /


1
您确定这行得通吗?没有/etc/passwd则没有名为root的用户,也没有uid = 0的用户。所需的公用程序是否一定会在那些异常条件下工作?
伊利亚·卡根

1
@EliahKagan,总是有一个用户uid = 0,因为这是内核启动第一个进程的uid。 cpmv不需要/ etc / passwd。
psusi

这救了我的笨蛋!我在/ etc / shadow上手动编辑有关crontab的内容。我不知道一个人不会惹上“阴影”。...我以为我很老实,但感谢上帝@psusi ....我编辑了grub菜单以进行恢复,添加了/ bin / sh,如他所说,跟随他的坐骑,只是从/ var / backups的shawdow复制到/ etc中损坏的那个…像新的一样好..谢谢
rowntreerob 2014年

2

在继续阅读此答案之前,您应该先阅读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


1

在遵循@EliahKagan的回答后,我无法登录lightdm并且我的帐户未列出。我发现该passwd文件的权限设置不正确;lightdm用户无权访问。这是我的解决方法:

登录tty Ctrl+ Alt+F1

转到/etc目录

cd /etc

然后将权限更改为 644

sudo chmod 644 passwd

然后做 ls -la

权限字符串应如下所示

-rw-r--r--

-1

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

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设置passwd。

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

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

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

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

资源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.