Was ist der Inhalt von / bin / bash und was mache ich, wenn ich ihn versehentlich überschreibe?


24

Ich habe versehentlich die Datei / bin / bash mit einem dummen Skript überschrieben, das ich in den Ordner / bin schreiben wollte.

Wie bekomme ich den Inhalt dieser Datei zurück? Gibt es eine Möglichkeit, die Inhalte im Web zu finden und sie einfach wieder zu kopieren? Welche Optionen stehen mir hier zur Verfügung, wenn ich bedenke, dass das Terminal einen Fehler mit der Meldung "Zu viele symbolische Links?" Ausgibt.

Ich bin immer noch ein Neuling in dieser Art von Dingen und ich schätze jede Hilfe, die ich bekommen kann.

Edit: Ich habe vergessen zu erwähnen, dass ich mich auf Kali 2.2 Rolling befinde, einem Debian-System mit einigen zusätzlichen Funktionen.

Edit 2: Ich habe die Maschine auch neu gestartet, da ich meinen Fehler erst vor ein paar Tagen bemerkt habe. Das macht es ein bisschen schwieriger.


9
Bash gelöscht? Verwenden Sie einfach zsh :-) </ troll>
Kevin


physisch oder VM?
Ben Aveling

9
Für das nächste Mal: Legen Sie keine Daten in Systemverzeichnisse . Wenn Sie benutzerdefinierte Skripte und Dinge möchten , erstellen Sie entweder eine $HOME/.binund fügen Sie sie Ihrer hinzu, PATHoder verwenden /usr/local/binSie sie, wenn Sie möchten, dass sie systemweit sind. Oder, noch besser, baue ein Paket.
Spektren

Antworten:


33

bashIst eine Shell, wahrscheinlich Ihre System-Shell, so passieren jetzt seltsame Dinge, während sich Teile der Shell noch im Speicher befinden. Sobald Sie sich abmelden oder neu starten, haben Sie größere Probleme.

Das erste, was Sie tun sollten, ist, Ihre Shell in etwas Sicheres zu verwandeln. Sehen Sie, welche Shells Sie installiert haben

cat /etc/shells

Ändern Sie dann beispielsweise Ihre Shell in eine der anderen dort aufgelisteten Shells

chsh -s /bin/dash

Update, da Sie bereits neu gestartet haben:

Sie können sich glücklich schätzen, dass der Startvorgang heutzutage nicht mehr von bashIhrem System abhängig ist und Sie keine Befehlszeile mehr erhalten. Sie können jedoch einen Editor starten, um /etc/passwddie Shell in der rootZeile von /bin/bashnach zu bearbeiten und zu ändern /bin/dash. Melden Sie sich ab und wieder an. Nehmen Sie in dieser Datei nur keine weiteren Änderungen vor, da Sie sonst Ihr System völlig durcheinander bringen können.

Dann versuchen Sie es erneut bashmit

apt-get --reinstall install bash

Wenn alles geklappt hat kannst du chshzurück zu bash.

Schließlich: Ich denke, Kali ist eine hochspezialisierte Distribution, die wahrscheinlich nicht für Leute geeignet ist, die versehentlich ihre Shell überschreiben. Da dieser Satz als unhöflich und hart bezeichnet wurde, sollte ich hinzufügen, dass ich ihn aus eigener Erfahrung geschrieben habe. Als ich jünger war, habe ich mein System ruiniert, weil mir niemand gesagt hat, ich solle es vermeiden, als Root herumzuspielen.


3
@ dr01: Angesichts der Funktionsweise der Bash-Flucht kann es sich um ein falsch platziertes Zitat handeln. Denken Sie command > /bin/bash ...gegen command > (/bin/bash ...).
MSalters

7
Der letzte Satz war hart ... :)
James Reinstate Monica Polk

6
@MSalters Ein falsch platziertes Zitat wird als root ausgeführt . Das sind zwei Fehler. Das zweite ist natürlich, Ihre komplizierten Pipelines als Root und nicht als nicht privilegierter Benutzer auszuprobieren.
Derobert

12
@ JamesKPolk Nein, es ist überhaupt nicht hart. Es ist die einfache Wahrheit. Kali ist ein professionelles Werkzeug für Experten . Sie haben sogar Staat so viel auf ihrer Webseite. Wenn Sie kein Experte sind, haben Sie wirklich nichts damit zu tun, Kali zu leiten.
Terdon

3
Der letzte Satz ist nicht hart. Das ist die klare Wahrheit.
Andrea Lazzarotto

65

Fahren Sie Ihre Maschine nicht herunter.

Hast du noch eine Running Shell? Ist es bash Wenn ja, geht es dir gut. (Aber mach das nicht nochmal.)

Lauf:

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

Voila, alles ist gut.


Da jemand in den Kommentaren bezweifelt, dass dies funktioniert:

[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 ~]$ 

18
In jedem Fall wird danach empfohlen, Bash von Ihrer Distribution neu zu installieren, z. B. um korrekte Berechtigungen zu erhalten (einige Rootkit-Jäger könnten von Änderungen überrascht sein), und auch um Hardlink oder Symlink (z. B. zu /bin/shoder rbash) wiederherzustellen
Giacomo Catenazzi,

4
@GiacomoCatenazzi Tatsächlich behält diese Methode Berechtigungen bei - das ist die Standardeinstellung bei rootder Ausführung cp. Harte Links sind jedoch ein guter Punkt.
Wildcard

1
Die Maschine wurde neu gestartet. Ich kann keine normale Shell öffnen, aber ich kann den Inhalt über die GUI bearbeiten. Wie bereits erwähnt, erhalte ich die Fehlermeldung "Fehler beim Ausführen des untergeordneten Prozesses / bin / bash. (Zu viele Ebenen symbolischer Links)".
GarrukApex

5

Wenn Sie sich anmelden können, aber kein Terminal öffnen oder auf andere Weise auf eine Shell zugreifen können, aber über die GUI auf Dateien zugreifen können /bin, suchen Sie nach Dateien, deren Namen mit sh(aber nicht .sh) enden , und führen Sie eine aus (durch Doppelklicken) oder mit der rechten Maustaste). Achten Sie insbesondere auf Folgendes:

  • sh
  • dash
  • ash
  • ksh (oder kshgefolgt von einer Nummer; zB  ksh93)
  • zsh
  • yash

oder als letztes Mittel

  • tcsh oder
  • csh

Wenn Sie eine Shell zum Laufen bringen können, versuchen Sie es mit Philippos 'Antwort .

Ein anderer Ansatz besteht darin, im Einzelbenutzermodus zu booten, indem Sie diese Anweisungen befolgen und init=/bin/shstattdessen eine der anderen Shells angeben init=/bin/bash.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.