错误地更改了根外壳。如何将其改回有效的 shell?

错误地更改了根外壳。如何将其改回有效的 shell?

我错误地输入了

chsh -s /usr/bin 

代替

chsh -s /bin/bash 

现在我无法登录 root shell,如何以 root 身份手动启动 bash shell?

答案1

虽然 root 没有访问权限,但 sudo 组中的用户仍然可以运行特权命令 - 似乎错误不在 sudo 中,而是在命令的其他位置sudo chsh(例如 chsh 错误)。

因此,您的 sudo 显然正在工作。

可以使用以下命令编辑 passwd 文件:

sudo vipw

并手动更改 root shell。

(通常第一行/etc/passwd

root:x:0:0:root:/root:/bin/bash

弗曼贵宾室

vipw 和 vigr 命令分别编辑文件 /etc/passwd 和 /etc/group。使用 -s 标志,他们将分别编辑这些文件的影子版本 /etc/shadow 和 /etc/gshadow。程序将设置适当的锁以防止文件损坏。

答案2

假设您有权访问另一个帐户,另一个选择是使用以下命令手动覆盖默认 shell su --shell=/bin/bash

-s, --shell=SHELL
如果 /etc/shells 允许则运行 SHELL

这样做的主要优点是它只需要访问另一个帐户,而不需要另一个帐户特权一。

答案3

出于安全原因,无论是文本登录还是图形登录su,以及sudo允许您以不同用户身份运行命令的实用程序(例如 和 )都通过目标用户的 shell 运行这些命令。如果目标用户的 shell 无法正常工作,那么您已经看到了结果:-(

除非您碰巧在某处运行仍然有效的 root shell,或者类似 setuid-root 二进制文件或允许您绕过此问题的东西,否则使用救援系统或实时映像重新启动并纠正问题可能是您最好的选择。

启动救援系统,将真实系统的根文件系统挂载到某处,例如,/mnt/foo然后编辑/mnt/foo/etc/passwd以修复 shell。保存,卸载,就完成了。

答案4

sudo usermod -s /bin/bash jdoe

将改变外壳杰多伊bash。然后就可以sudo egrep jdoe /etc/passwd去验证了。

相关内容