我删除了“/ 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身份执行此操作。 这是一个非常简单的方法。
-
打开终端窗口( Ctrl + Alt + T )。 在终端中,键入
cd
并键入Space键,但不要按Enter键 。 -
在Nautilus中,找到已安装的Ubuntu系统中的
etc
目录。 (这与live CD的etc
目录不同。安装的Ubuntu系统中的etc
目录位于刚安装的分区中。) -
将此
etc
目录拖到终端中,终端将其完整路径粘贴到终端,完成cd ...
命令。 -
按Enter键运行该命令。 现在,您位于包含
passwd
文件的目录中。 我假设您的备份文件passwd_bkp
也位于此处。 -
运行此命令:
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)用于用户列表) - 在提示时输入新密码
- 重新启动到正常启动。
资源