安装没有可执行位的 bash 后被锁定

安装没有可执行位的 bash 后被锁定

scp将修补了 shellshock 的二进制文件安装到 openSUSE 12.2 Linux VM 并用它替换登录 shell后bash,没有用户可以通过或控制台登录ssh。事实证明,尽管使用了开关,但可执行位在传输过程中丢失了-p

我尝试通过在 Linux Xen 主机上安装文件系统并执行 来修复此问题chmod +x /mnt/usr/local/bin/bash,但情况并未改善。重新启动客户虚拟机有帮助吗?

这是我在控制台上看到的内容:

xxx login: root
Password:
Last login: xxx
Have a lot of fun...
 -- root: no shell: permission denied

这出现在/mnt/var/log/messages……

在 ssh 登录时:

sshd: User root not allowed because shell /bin/bash is not executable
sshd: input_userauth_request: invalid user root [preauth]
sshd: Postponed keyboard-interactive for invalid user root from x.x.x.x port xxxxx ssh2 [preauth]

在控制台登录:

systemd-logind: New session x of user root.
login: ROOT LOGIN ON xvc0
console-kit-daemon: WARNING: Unable to spawn /etc/ConsoleKit/run-session.d/dbus_at_console.ck: Failed to execute child process "/etc/ConsoleKit/run-session.d/dbus_at_console.ck" (Permission denied)
systemd-logind: Removed session x.

这就是我造成这个问题的原因:

# my /bin/bash has been a symlink to /usr/local/bin/bash since the first shellshock patch
scp -p buildhost:/tmp/bash /tmp/bash
# then I forgot to do chmod +x /tmp/bash
# then I forgot to do chsh -s /usr/bin/zsh, logout and login
mv /tmp/bash /usr/local/bin/bash && \
mv /bin/bash /var/tmp/bash-unpatched && \
chmod -x /var/tmp/bash-unpatched && \
ln -s /usr/local/bin/bash /bin/bash

用真正的二进制文件替换/bin/bash符号链接也无济于事。

答案1

您必须重新启动。虚拟机管理程序对客户机正在使用的文件系统所做的文件权限更改不会被客户机检测到。

将来执行此类“更新”时,请向要更新的服务器打开一个单独的 shell 会话,以防出现问题。

答案2

看起来您有访问服务器的权限。您可以尝试多种方法。

您应该有一个可以运行的 ssh 客户端,尝试使用 ssh 来修复权限,或者使用不同的 shell 登录。

ssh root@host chmod +x /bin/bash
ssh root@host /bin/dash

如果您可以连接到非root用户,请尝试sudo

sudo chmod +x /bin/dash
sudo /bin/bash 

su或者从非 root 用户使用

su -c 'chmod +x /bin/bash'
su -c '/bin/dash'

您应该能够在 中找到可用的 shell /etc/shells

相关内容