Quais são os conteúdos de / bin / bash e o que faço se os substituir acidentalmente

24

Substituí acidentalmente o arquivo / bin / bash com um script idiota que pretendia colocar dentro da pasta / bin.

Como recupero o conteúdo desse arquivo? Existe uma maneira de encontrar o conteúdo na Web e copiá-lo de volta? Quais são minhas opções aqui, considerando que o terminal apresenta um erro ao falar sobre "Muitos links simbólicos?"

Ainda sou novato nesse tipo de coisa e agradeço toda a ajuda que posso obter.

Edit: Eu esqueci de mencionar que estou no Kali 2.2 Rolling, que é praticamente o debian com alguns recursos adicionais.

Edit 2: Também reiniciei a máquina, pois não havia percebido meu erro até alguns dias atrás. Isso torna isso um pouco mais difícil.

GarrukApex
fonte
9
Festa excluída? Basta usar o zsh :-) </troll>
Kevin
11
serverfault.com/questions/451528/… e vários outros #:
skandigraun 17/17
físico ou VM?
precisa
9
Para a próxima vez: não coloque coisas nos diretórios do sistema . Se você quiser scripts e outras coisas personalizadas, faça um $HOME/.bine adicione-o ao seu PATHou use-o /usr/local/binse precisar que ele seja de todo o sistema. Ou, melhor ainda, crie um pacote.
spectras

Respostas:

33

bashé um shell, provavelmente o shell do sistema, agora acontecem coisas estranhas, enquanto partes do shell ainda estão na memória. Depois de sair ou reiniciar, você terá mais problemas.

Portanto, a primeira coisa deve ser mudar seu shell para algo seguro. Veja quais shells você instalou

cat /etc/shells

Em seguida, mude seu shell para um dos outros shells listados lá, por exemplo

chsh -s /bin/dash

Atualização, porque você já reiniciou:

Você tem sorte de que hoje em dia o processo de inicialização não depende bash, portanto, seu sistema inicializa, você simplesmente não pode obter uma linha de comando. Mas você pode iniciar um editor para editar /etc/passwde alterar o shell na rootlinha de /bin/bashpara /bin/dash. Saia e faça login novamente. Apenas não faça nenhuma outra alteração nesse arquivo, ou você pode atrapalhar seu sistema completamente.

Em seguida, tente reinstalar bashcom

apt-get --reinstall install bash

Se tudo der certo, você pode chshvoltar para bash.

Finalmente: acho que o kali é uma distribuição altamente especializada, provavelmente não adequada para pessoas que sobrescrevem acidentalmente seu shell. Como essa frase foi chamada de rude e severa, devo acrescentar que a escrevi por experiência própria. Quando eu era mais jovem, estraguei meu sistema porque ninguém me disse para evitar mexer como root.

Philippos
fonte
3
@ dr01: Dado o funcionamento do escape do bash, pode ser uma questão de cotação incorreta. Pense command > /bin/bash ...contra command > (/bin/bash ...).
MSalters
7
Essa última frase foi dura ... :)
James Reintegrar Monica Polk
6
@MSalters Uma cotação incorreta é executada como raiz . São dois erros. O segundo, é claro, é experimentar seus pipelines complicados como root, não como um usuário não privilegiado.
Derobert 17/10/19
12
@JamesKPolk não, não é nada duro. É a verdade simples. Kali é uma ferramenta profissional projetada para ser usada por especialistas . Eles até afirmam isso em suas páginas da web. Se você não é um especialista, não tem como administrar o Kali.
terdon
3
A última frase não é dura. É a pura verdade.
Andrea Lazzarotto 21/10
65

Não desligue sua máquina.

Você ainda tem um shell em execução? É festança? Se sim, você está bem. (Mas não faça isso de novo.)

Corre:

sudo cp /proc/$$/exe /bin/bash

Voila, está tudo bem.


Como alguém nos comentários duvida que isso funcione:

[vagrant@localhost ~]$ cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
[vagrant@localhost ~]$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[vagrant@localhost ~]$ echo $0
-bash
[vagrant@localhost ~]$ sudo rm /bin/bash
[vagrant@localhost ~]$ bash
-bash: /bin/bash: No such file or directory
[vagrant@localhost ~]$ sudo su -
su: /bin/bash: No such file or directory
[vagrant@localhost ~]$ sudo cp /proc/$$/exe /bin/bash
[vagrant@localhost ~]$ bash
[vagrant@localhost ~]$ exit
[vagrant@localhost ~]$ sudo su -
[root@localhost ~]# logout
[vagrant@localhost ~]$ 
Curinga
fonte
18
De qualquer forma, após isso, é recomendável reinstalar o bash da sua distribuição, por exemplo, para obter as permissões corretas (alguns caçadores de rootkits podem se surpreender com as mudanças), também para restaurar o link /bin/shrbash
físico
4
@GiacomoCatenazzi, na verdade, esse método preserva as permissões - o padrão rooté quando executado cp. Links rígidos são um bom ponto, no entanto.
Wildcard
11
A máquina foi reiniciada. Não consigo abrir um shell normal, mas posso editar o conteúdo através da GUI. Como dito anteriormente, recebo um erro informando "Falha ao executar o processo filho / bin / bash. (Muitos níveis de links simbólicos)".
GarrukApex
5

Se você pode fazer login, mas não pode abrir um terminal ou acessar um shell, mas pode acessar arquivos por meio da GUI, vá para /bin, procure arquivos cujos nomes terminem com sh(mas não .sh) e execute um (clicando duas vezes em ou clique com o botão direito do mouse). Em particular, procure o seguinte:

  • sh
  • dash
  • ash
  • ksh (ou kshseguido de um número; por exemplo,  ksh93)
  • zsh
  • yash

ou, como último recurso,

  • tcsh ou
  • csh

Se você conseguir executar um shell, tente a resposta de Philippos .

Outra abordagem é inicializar no modo de usuário único seguindo estas instruções, mas especifique init=/bin/sh(ou um dos outros shells) em vez de init=/bin/bash.

Scott
fonte