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

我试图更改我的用户名和我的主目录( /home/username ),我的系统开始崩溃。 我删除了passwd文件,但我有一个名为passwd_bkp的备份。 我试图将此passwd_bkp重命名为passwd ,但它不起作用。 没有命令被执行……我在终端窗口。

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

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

我丢失了所有文件吗?

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

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

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

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

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

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

  • adduser / addgroup
  • deluser / delgroup
  • usermod
  • groupmod
  • useradd (低于adduser ,你通常应该使用adduser
  • userdel (低于deluser ,你通常应该使用deluser
  • groupadd (低于addgroup ,你通常应该使用addgroup
  • groupdel (低于delgroup的级别,通常应该使用delgroup
  • passwd
  • gpasswd
  • pwck
  • grpck

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

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

在继续阅读这个答案之前,你应该首先阅读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编辑影子文件。

按照@ EliahKagan的回答后,我无法从lightdm登录,我的帐户未列出。 我发现passwd文件的权限设置不正确; lightdm用户无法访问它。 这是我修复它的方式:

登录tty Ctrl + Alt + F1

切换到/etc目录

 cd /etc 

然后将权限更改为644

 sudo chmod 644 passwd 

然后做ls -la

权限字符串应如下所示

 -rw-r--r-- 

如果您只能登录打开终端并试试这个:

 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按在以kernel开头的行上
  • 空格键并输入init=/bin/bash
  • Enter键
  • b
  • 在命令提示符下键入: cp /etc/passwd- /etc/passwd
  • 再次重新启动到GRUB
  • e结束(恢复模式)
  • e按在以kernel开头的行上
  • 空格键并输入init=/bin/bash
  • Enter键
  • b
  • 在命令提示符下键入mount -o remount,rw /
  • 键入passwd YOURUSERNAMEHERE (如果您不知道您的用户名类型ls /home (即小写字母L和小写字母S)用于用户列表)
  • 在提示时输入新密码
  • 重新启动到正常启动。

资源