¿Cuáles son los contenidos de / bin / bash y qué hago si accidentalmente los sobrescribí?

24

Accidentalmente sobrescribí el archivo / bin / bash con un script tonto que pretendía poner dentro de la carpeta / bin.

¿Cómo recupero el contenido de ese archivo? ¿Hay alguna manera de encontrar los contenidos en la web y copiarlos nuevamente? ¿Cuáles son mis opciones aquí, considerando que el terminal da un error al hablar de "Demasiados enlaces simbólicos"?

Todavía soy un recién llegado a este tipo de cosas, y aprecio toda la ayuda que puedo obtener.

Editar: Olvidé mencionar que estoy en Kali 2.2 Rolling, que es bastante debian con algunas características adicionales.

Edición 2: también reinicié la máquina, ya que no me di cuenta de mi error hasta hace unos días. Eso hace que esto sea un poco más difícil.

GarrukApex
fuente
99
Bash eliminado? Simplemente use zsh :-) </troll>
Kevin
1
serverfault.com/questions/451528/… y varios otros
skandigraun
física o VM?
Ben Aveling
99
Para la próxima vez: no ponga cosas en los directorios del sistema . Si desea secuencias de comandos personalizadas y otras cosas, hágase una $HOME/.biny agréguela a la suya PATHo úsela /usr/local/binsi la necesita para todo el sistema. O, mejor aún, crea un paquete.
espectras

Respuestas:

33

bashes un shell, probablemente el shell de su sistema, por lo que ahora suceden cosas extrañas, mientras que partes del shell todavía están en la memoria. Una vez que cierre la sesión o reinicie, tendrá problemas más profundos.

Entonces, lo primero debería ser cambiar su caparazón a algo seguro. Mira qué shells has instalado

cat /etc/shells

Luego cambie su caparazón a uno de los otros caparazones enumerados allí, por ejemplo

chsh -s /bin/dash

Actualización, porque ya reiniciaste:

Tienes suerte de que hoy en día el proceso de arranque no dependa bash, por lo que tu sistema se inicia, simplemente no puedes obtener una línea de comando. Pero puede iniciar un editor para editar /etc/passwdy cambiar el shell en la rootlínea de /bin/basha /bin/dash. Cerrar sesión e iniciar sesión nuevamente. Simplemente no realice ningún otro cambio en ese archivo, o puede dañar su sistema por completo.

Luego intente reinstalar bashcon

apt-get --reinstall install bash

Si todo tuvo éxito, puede chshvolver a bash.

Finalmente: creo que kali es una distribución altamente especializada, probablemente no adecuada para personas que accidentalmente sobrescriben su caparazón. Como esta oración se llamaba grosera y dura, debo agregar que la escribí por experiencia propia. Cuando era más joven, arruiné mi sistema porque nadie me dijo que evitara perder el tiempo como root.

Philippos
fuente
3
@ dr01: Dado cómo funciona bash escape, puede tratarse de una cita equivocada. Piense command > /bin/bash ...frente command > (/bin/bash ...).
MSalters
77
Esa última oración fue dura ... :)
James reinstala a Monica Polk el
66
@MSalters Una cita fuera de lugar se ejecuta como root . Eso son dos errores. La segunda, por supuesto, es probar sus tuberías complicadas como root, no como un usuario sin privilegios.
derobert
12
@JamesKPolk no, no es para nada duro. Es la simple verdad. Kali es una herramienta profesional diseñada para ser utilizada por expertos . Incluso dicen tanto en su página web. Si no eres un experto, no tienes por qué dirigir Kali.
terdon
3
La última oración no es dura. Es la pura verdad.
Andrea Lazzarotto
65

No apagues tu máquina.

¿Todavía tienes un shell en ejecución? ¿Es bash? Si es así, estás bien. (Pero no hagas esto de nuevo).

Correr:

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

Voila, todo está bien.


Como alguien en los comentarios duda que esto 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 ~]$ 
Comodín
fuente
18
En cualquier caso, después de esto, se recomienda volver a instalar fiesta de su distribución, por ejemplo, para permisos correctos (un cazador rootkit puede ser sorprendido de los cambios allí), también para restaurar enlace duro o enlace simbólico (por ejemplo, para /bin/sho rbash)
Giacomo Catenazzi
44
@GiacomoCatenazzi, en realidad, este método conserva los permisos, eso es predeterminado cuando se rootejecuta cp. Sin embargo, los enlaces duros son un buen punto.
Comodín el
1
La máquina fue reiniciada. No puedo abrir un shell normal, pero puedo editar el contenido a través de la GUI. Como se dijo antes, recibo un error que dice "No se pudo ejecutar el proceso hijo / bin / bash. (Demasiados niveles de enlaces simbólicos)".
GarrukApex
5

Si puede iniciar sesión, pero no puede abrir una terminal o acceder a un shell, pero puede acceder a los archivos a través de la GUI, vaya a /bin, busque archivos cuyos nombres terminen en sh(pero no .sh) y ejecute uno (haciendo doble clic o haciendo clic derecho). En particular, busque lo siguiente:

  • sh
  • dash
  • ash
  • ksh (o kshseguido de un número; por ejemplo,  ksh93)
  • zsh
  • yash

o, como último recurso,

  • tcsh o
  • csh

Si puede ejecutar un shell, intente con la respuesta de Philippos .

Otro enfoque es iniciar en modo de usuario único siguiendo estas instrucciones, pero especifique init=/bin/sh(o uno de los otros shells) en lugar de hacerlo init=/bin/bash.

Scott
fuente