从 grub 编辑 /etc/passwd 文件

从 grub 编辑 /etc/passwd 文件

我尝试在 ubuntu (14.04) 上安装 zsh。当我切换到 zsh 时,我无法进入超级用户模式。

如果我执行 su 它会要求输入 passwd 并在输入正确的密码时显示:

Cannot execute which zsh: No such file or directory

但是当我输入错误的密码并按回车键 4-5 次时,什么也没有显示。

在检查我的/etc/passwd文件时,它显示:

root:x:0:0:root:/root:which zsh

我尝试编辑文件并保存,但它显示

Unable to save /etc/passwd

我尝试通过 grub 将运行级别更改为 1,但结果出现错误:

APCI PCC probe failed

我在 VirtualBox 上运行 Ubuntu。

答案1

您应该从密码文件中删除单词which...它应该类似于:

root:x:0:0:root:/root:/bin/zsh

其中 /bin/zsh 是 Z shell 二进制文件的路径。
在当前配置中,登录进程正在尝试执行which zsh,但该命令失败。

另外,以 root 身份编辑该文件,sudo vim /etc/passwd因为它是一个只能由 root 写入的文件。

如果不能sudosu,则引导至恢复模式(在 GRUB 引导加载程序中选择 Ubuntu 的高级选项,然后选择 Ubuntu...(恢复模式),然后选择 root/Drop to root shell 提示符)。之后,将/文件系统重新挂载为读写(mount -o remount,rw /),然后您可以编辑文件的内容/etc/passwd。在 Ubuntu 16.04 上测试过。

答案2

您无法从 Grub 提示符编辑文件(Grub 只能读取文件,没有任何写入支持)。您需要启动 Linux。

如果无法正常登录,可以完全绕过正常的启动过程,只启动一个内核和一个shell。在 Grub 提示符下,按e编辑启动顺序,添加init=/bin/bash到该行末尾linux=…,然后按Ctrl+X启动。你将得到一个 root shell,除此之外什么也没有。跑步

mount -t proc proc /proc
mount -o remount,rw /

现在运行chsh -s /bin/zsh root来修复您的用户数据库。

接下来,使用Alt+ SysRq+重新启动U,然后使用Alt+ SysRq+启动B,或者使用以下命令正常启动

mount -o remount,ro /
umount /proc
exec /sbin/init

提示:chsh无需运行用户争论。这样,它就验证了 shell。

提示:当您更改某些配置时,请始终保持 shell 打开并测试配置。如果您犯了错误,您仍然可以使用命令行来修复它。

提示:你可以创建一个toor帐户使用 UID 0(因此它仍然是 root),使用与 root 相同的密码,并且 shell 保留在其中/bin/sh,以便在出现问题时保留另一种登录方式。更好的是,安装一个静态链接的 shell(busybox-staticzsh-static)并将其用作 toor 的登录 shell。

¹或者您可以使用客人如果主机是Linux。

答案3

如果您知道 root 密码,则可以运行su -s /bin/bash以获取 root bash shell。

sudo -s /bin/bash应该也可以工作,并且根据sudo配置方式,您要么只需要知道自己的密码,要么不需要密码。

然后您可以使用chsh -s /bin/bash将 root 的 shell 更改回 bash。

顺便说一句,在任何 UNIX 系统上更改 root 的 shell 通常都是一个坏主意。许多 cron 作业等依赖于 root 的 shell 作为该操作系统的默认 root shell,并且将要如果你改变它就会打破。

答案4

请尝试 sudo vi /etc/passwd 并输入您当前登录的用户密码。

您还可以在 /etc/shell 中找到 shell 正确的路径

要检查当前的 shell,请尝试 echo $SHELL

相关内容