Jaka jest zawartość / bin / bash i co mam zrobić, jeśli przypadkowo je nadpisałem


24

Przypadkowo nadpisałem plik / bin / bash głupim skryptem, który chciałem umieścić w folderze / bin.

Jak odzyskać zawartość tego pliku? Czy istnieje sposób na znalezienie zawartości w Internecie i skopiowanie jej z powrotem? Jakie są moje opcje, biorąc pod uwagę, że terminal wyświetla błąd mówiący o „Zbyt wielu dowiązaniach symbolicznych?”

Nadal jestem nowicjuszem w tego typu sprawach i doceniam całą pomoc, jaką mogę uzyskać.

Edycja: Zapomniałem wspomnieć, że korzystam z Kali 2.2 Rolling, która jest w zasadzie debianem z kilkoma dodatkowymi funkcjami.

Edycja 2: Ponownie uruchomiłem maszynę, ponieważ nie zdałem sobie sprawy z mojego błędu jeszcze kilka dni temu. To sprawia, że ​​jest to trochę trudniejsze.


9
Usunięte bash? Wystarczy użyć zsh :-) </troll>
Kevin


fizyczny czy VM?
Ben Aveling

9
Następnym razem: nie wkładaj żadnych rzeczy do katalogów systemowych . Jeśli chcesz niestandardowe skrypty i inne rzeczy, zrób sobie a $HOME/.bini dodaj go do swojego PATHlub użyj, /usr/local/binjeśli potrzebujesz, aby obejmował cały system. Lub, jeszcze lepiej, zbuduj pakiet.
spectras

Odpowiedzi:


33

bashjest powłoką, prawdopodobnie twoją powłoką systemową, więc teraz dzieją się dziwne rzeczy, podczas gdy niektóre części powłoki są nadal w pamięci. Po wylogowaniu lub ponownym uruchomieniu komputera będziesz miał większe problemy.

Pierwszą rzeczą powinna być zmiana powłoki na bezpieczną. Zobacz, jakie powłoki zainstalowałeś

cat /etc/shells

Następnie zmień powłokę na jedną z innych wymienionych tam powłok, na przykład

chsh -s /bin/dash

Zaktualizuj, ponieważ już zrestartowałeś:

Masz szczęście, że w dzisiejszych czasach proces uruchamiania nie jest uzależniony bash, więc system uruchamia się, po prostu nie możesz uzyskać wiersza polecenia. Ale możesz uruchomić edytor do edycji /etc/passwdi zmiany powłoki w rootlinii od /bin/bashdo /bin/dash. Wyloguj się i zaloguj ponownie. Po prostu nie rób żadnych innych zmian w tym pliku, bo możesz całkowicie zepsuć system.

Następnie spróbuj ponownie zainstalować za bashpomocą

apt-get --reinstall install bash

Jeśli wszystko się powiedzie, możesz chshwrócić do bash.

Wreszcie: myślę, że kali jest wysoce wyspecjalizowaną dystrybucją, prawdopodobnie nieodpowiednią dla osób, które przypadkowo zastąpią swoją powłokę. Ponieważ zdanie to nazwano niegrzecznym i surowym, powinienem dodać, że napisałem je z własnego doświadczenia. Kiedy byłem młodszy, zrujnowałem mój system, ponieważ nikt mi nie powiedział, żebym nie bałaganił jako root.


3
@ dr01: Biorąc pod uwagę, jak działa ucieczka bash, może to być kwestia niewłaściwego cytatu. Myśl command > /bin/bash ...kontra command > (/bin/bash ...).
MSalters

7
Ostatnie zdanie było trudne ... :)
James Reinstate Monica Polk

6
@MSalters Niewłaściwie wyceniony uruchom jako root . To dwa błędy. Drugi to oczywiście testowanie skomplikowanych potoków jako root, a nie jako użytkownik nieuprzywilejowany.
derobert

12
@JamesKPolk nie, to wcale nie jest trudne. To prosta prawda. Kali to profesjonalne narzędzie przeznaczone do użytku przez ekspertów . Podają nawet tyle na swojej stronie internetowej. Jeśli nie jesteś ekspertem, naprawdę nie masz biznesu z Kali.
terdon

3
Ostatnie zdanie nie jest trudne. To prosta prawda.
Andrea Lazzarotto

65

Nie wyłączaj urządzenia.

Czy nadal masz działającą powłokę? Czy to bash? Jeśli tak, wszystko w porządku. (Ale nie rób tego więcej.)

Biegać:

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

Voila, wszystko jest dobrze.


Ponieważ ktoś w komentarzach wątpi, że to działa:

[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
W każdym razie po tym zaleca się ponowną instalację bash z twojej dystrybucji, np. W celu uzyskania poprawnych uprawnień (niektórzy łowcy rootkitów mogą być zaskoczeni wprowadzonymi tam zmianami), również w celu przywrócenia twardego linku lub dowiązania symbolicznego (np. Do /bin/shlub rbash)
Giacomo Catenazzi

4
@GiacomoCatenazzi, w rzeczywistości ta metoda zachowuje uprawnienia - jest to domyślna funkcja po rooturuchomieniu cp. Jednak twarde linki są dobrym punktem.
Wildcard

1
Maszyna została zrestartowana. Nie mogę otworzyć normalnej powłoki, ale mogę edytować zawartość za pomocą GUI. Jak powiedziano wcześniej, pojawia się komunikat o błędzie „Nie można wykonać procesu potomnego / bin / bash. (Zbyt wiele poziomów dowiązań symbolicznych)”.
GarrukApex

5

Jeśli możesz się zalogować, ale nie możesz otworzyć terminala lub w inny sposób uzyskać dostępu do powłoki, ale możesz uzyskać dostęp do plików za pośrednictwem GUI, przejdź do /bin, wyszukaj pliki, których nazwy kończą się na sh(ale nie .sh) i uruchom jeden (klikając dwukrotnie lub kliknięcie prawym przyciskiem myszy). W szczególności poszukaj następujących elementów:

  • sh
  • dash
  • ash
  • ksh (lub kshpo którym następuje liczba; np.  ksh93)
  • zsh
  • yash

lub w ostateczności

  • tcsh lub
  • csh

Jeśli możesz uruchomić powłokę, wypróbuj odpowiedź Philipposa .

Innym podejściem jest uruchomienie systemu w trybie pojedynczego użytkownika, postępując zgodnie z tymi instrukcjami, ale init=/bin/shzamiast tego podaj (lub jedną z innych powłok) init=/bin/bash.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.