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


19

我误输入了

chsh -s /usr/bin 

代替

chsh -s /bin/bash 

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


您是在什么情况下这样做的?在当前终端中,对于用户默认的shell?
jgr208 '16

sudo组中没有用户吗?
Rui F Ribeiro

3
sudo vipw工作?
Rui F Ribeiro

1
@RuiFRibeiro是的,是的,谢谢,我不知道我可以更改该文件中的默认根shell
ChiseledAbs

1
在这种情况下不是必须的,但是当您无意中创建了涉及root的灾难时,通常可以使计算机进入单用户模式,解决问题,然后返回多用户模式。
boardrider '16

Answers:


29

尽管root用户无权访问,但sudo组中的用户仍可以运行特权命令-似乎错误不在sudo中,而是在sudo chsh命令的其他地方(例如chsh错误)。

因此,您的sudo显然可以正常工作。

可以使用以下方法编辑passwd文件:

sudo vipw

和根外壳手动更改。

/etc/passwd通常是第一行)

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

FOM人用vipw

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


3
我从来不知道vipwvigr,谢谢!我一直都用过sudo vim /etc/passwd
2016年

3
您可能也会对visudo sudo.ws/man/1.8.15/visudo.man.html感兴趣,@ tac
Rui F Ribeiro

3
sudo -e,执行此锁定编辑功能以进行任何编辑。
kojiro

16

假设您有权访问其他帐户,另一种选择是使用来手动覆盖默认外壳程序su --shell=/bin/bash

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

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


8

出于安全考虑,登录不论文字还是图形和公用事业一样su,并sudo允许您运行命令以不同的用户运行的所有通过目标用户的shell命令者。如果目标用户的shell无法正常运行,那么您已经看到了结果:-(

除非您碰巧在某个地方运行了仍然起作用的root shell,或者像setuid-root二进制文件之类的东西或使您可以绕过它的东西运行,否则使用应急系统或实时映像重新启动并纠正问题可能是您的最佳选择。

引导救援系统,将实际系统的根文件系统挂载到某个位置,例如/mnt/foo,然后进行编辑/mnt/foo/etc/passwd以修复外壳。保存,卸载并完成。


奇怪的是,如果执行此操作,并且/ etc / passwd文件位于散列而不是纯文本中,该怎么办?
jgr208 '16

1
/etc/passwd不是明文?至少有十年来,我从未见过。在某些系统上这仍然是问题吗?无论如何,我想chroot /mnt/foo chsh -s /bin/bash在这种情况下可能会解决问题?
Celada

我从来没有遇到过描述的问题,但是,我使用的锁定系统必须使用非纯文本格式的/ etc / passwd,以避免黑客入侵,并且如果他们获得访问权限,甚至会进一步损害系统。嗯,这也许行得通,只是说我希望我永远不必尝试看看它是否真的起作用。
jgr208 '16

我能够通过用户帐户使用sudo编辑/ etc / passwd,但我不知道该文件中定义了外壳程序,谢谢
ChiseledAbs

@ChiseledAbs哦,你呢?对您有好处,很高兴您解决了您的问题。我没想到它会让你。
Celada

6

添加init=/bin/bash到您的内核命令行(如果使用grub进行引导,请按e编辑启动项),您将拥有一个以root身份运行的bash shell,甚至无需提供密码。您的根文件系统可能仍将以只读方式挂载,因此您需要先将其重新挂载,然后可以通过更改外壳chsh


4

sudo usermod -s /bin/bash jdoe

jdoe的shell更改为bash。然后sudo egrep jdoe /etc/passwd,您可以进行验证。

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.