我误入了
chsh -s /usr/bin
Run Code Online (Sandbox Code Playgroud)
代替
chsh -s /bin/bash
Run Code Online (Sandbox Code Playgroud)
现在我无法登录到 root shell,如何手动以 root 身份启动 bash shell?
Rui*_*iro 31
虽然 root 没有访问权限,但 sudo 组中的用户仍然可以运行特权命令 - 似乎错误不在 sudo 中,而是在sudo chsh命令的其他地方(例如 chsh 错误)。
因此,您的 sudo 显然正在工作。
passwd 文件可以编辑:
sudo vipw
Run Code Online (Sandbox Code Playgroud)
并且手动更改了root shell。
(/etc/passwd通常的第一行)
root:x:0:0:root:/root:/bin/bash
Run Code Online (Sandbox Code Playgroud)
男人vipw
vipw 和 vigr 命令分别编辑文件 /etc/passwd 和 /etc/group。使用 -s 标志,他们将分别编辑这些文件的影子版本,/etc/shadow 和 /etc/gshadow。程序将设置适当的锁以防止文件损坏。
Xio*_*iov 16
假设您有权访问另一个帐户,另一种选择是使用以下命令手动覆盖默认 shell su --shell=/bin/bash:
-s, --shell=SHELL
如果 /etc/shells 允许,则运行 SHELL
这样做的主要优点是它只需要访问另一个帐户,而不是另一个特权帐户。
出于安全原因,无论是文本登录还是图形登录,su以及sudo允许您以不同用户身份运行命令的实用程序,都将通过目标用户的 shell 运行这些命令。如果目标用户的 shell 不起作用,那么你已经看到了结果:-(
除非您碰巧有一个仍在运行的 root shell 或类似 setuid-root 二进制文件或允许您绕过它的东西,否则使用救援系统或实时映像重新启动并纠正问题可能是您最好的选择。
启动救援系统,将真实系统的根文件系统挂载到某处,例如,/mnt/foo编辑/mnt/foo/etc/passwd以修复外壳。保存,卸载,你就完成了。
添加init=/bin/bash到您的内核命令行(如果使用 grub 引导,请按e编辑引导条目),您将拥有一个以 root 身份运行的 bash shell,甚至无需提供密码。您的根文件系统可能仍会以只读方式挂载,因此您需要先重新挂载它,然后您可以使用chsh.
sudo usermod -s /bin/bash jdoe
将jdoe的 shell 更改为bash. 然后就sudo egrep jdoe /etc/passwd可以验证了。