在没有可执行位的情况下安装bash后locking

在将shellshock补丁的bash二进制文件scp到openSUSE 12.2 Linux虚拟机上,并用它replaceloginshell后,没有用户可以通过ssh或控制台login。 事实certificate,即使使用-p开关,传输过程中的可执行位也会丢失。

我试图通过在Linux Xen主机上挂载文件系统并执行chmod +x /mnt/usr/local/bin/bash来修复此问题,但情况并未改善。 将重新启动来宾VM帮助?

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

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

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

在sshlogin:

 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 xxxx port xxxxx ssh2 [preauth] 

在控制台login:

 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符号链接也没有帮助。

你将不得不重新启动。 从pipe理程序完成的文件权限更改由客人使用的文件系统不会被客人检测到。

在将来,当进行这种“更新”时,会有一个独立的shell会话向你正在更新的服务器开放,以防万一。

它看起来像你有一些访问服务器。 有各种方法可以尝试。

你应该有一个工作的SSH客户端,尝试使用SSH来修复权限,或使用不同的shelllogin。

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

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

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

或者只从非root用户使用su

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

你应该能够在/etc/shellsfind可用的/etc/shells