Bloqueado após instalar um bash sem bit executável

2

Depois de scp -ing um binário bash com shellshock para uma VM Linux do openSUSE 12.2 e substituindo o shell de login por ele, nenhum usuário pode efetuar login via ssh ou o console. Como se viu, o bit executável se perdeu durante a transferência, apesar de usar a opção -p .

Eu tentei reparar isso montando o sistema de arquivos no host Linux Xen e fazendo chmod +x /mnt/usr/local/bin/bash , mas a situação não melhorou. Irá reiniciar a ajuda da VM convidada?

Isso é o que eu vejo no console:

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

Isso aparece em /mnt/var/log/messages

no login do 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]

no login do console:

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.

E foi assim que causei o problema:

# 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

Substituir o link simbólico /bin/bash por um binário real também não ajudou.

    
por Christian Pietsch 29.09.2014 / 23:36

2 respostas

2

Você terá que reiniciar. Alterações de permissão de arquivo feitas do hypervisor para um sistema de arquivos em uso por um convidado não serão detectadas pelo convidado.

No futuro, ao fazer esse tipo de 'atualização', abra uma sessão de shell separada para o servidor que você está atualizando, para o caso de as coisas irem para o sul.

    
por 30.09.2014 / 01:10
1

Parece que você tem algum acesso ao servidor. Existem várias abordagens que você pode tentar.

Você deve ter um cliente ssh em funcionamento, tente usar ssh para corrigir as permissões ou fazer login com um shell diferente.

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

Se você conseguir se conectar a um usuário não-root, tente sudo .

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

Ou use apenas su do usuário não root

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

Você deve conseguir encontrar os shells disponíveis em /etc/shells .

    
por 30.09.2014 / 02:01