/ bin / etc / lib64 / root / sbin usunięty lub przeniesiony przez folder mv / * / * podczas su

11

System operacyjny to Centos 6.5 64-bit

Pobrałem plik tar i chciałem go rozpakować mv.

Nie rozwiązałem problemu, a następnie przypadkowo (jako root) uruchomiłem mv folder/* /*zamiast mv folder/* .bash, powiedziałem, że nie może zastąpić niektórych plików, a następnie poprosiłem o pozwolenie na inne. Ctrl-c wyszedł.

Zostawiłem otwartą sesję terminalową, ale wyszedłem su.

Teraz straciłem dostęp do większości shellpoleceń, nie mogę znaleźć lsżadnych katalogów i nie mogę wrócić do su.

Wydaje się, że serwer i usługi nadal działają. Mogę uruchamiać bardzo mało poleceń, cdjest jednym z nich i kiedy próbuję to cdzrobić, /etclub /binwystępuje błąd no directory found.

EDIT Właśnie zauważyłem wszystkie foldery z brakujących /( bin, etc, lib64, root, sbin) został przeniesiony do /varkatalogu, próbowałem /var/bin/sui otrzymujemy: -bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

webaholik
źródło
1
Nie możesz biegać /var/bin/subezpośrednio?
Darkhogg
Proszę nie edytować pytania za pomocą rozwiązań. W sieci wymiany stosów raczej dodajesz odpowiedź, zostaw komentarz przy istniejącej odpowiedzi, aby poprawić odpowiedź.
Bernhard,
@Darkhogg /var/bin/su: user root does not existMyślę, że ustaliliśmy, że nie można tego zrobić, ponieważ / etc jest w / var / etc
webaholik
@Bernhard próbował poprawić
webaholik

Odpowiedzi:

22

Jeśli Twój system został busyboxzainstalowany, możesz użyć tego do przywrócenia rzeczy.

busyboxto plik binarny z wieloma wbudowanymi narzędziami. Rzeczy takie jak mv, sh, ls, itd.

Z twojego komentarza do odpowiedzi Pavela wynika, że ​​wszystko się skończyło /var. Możesz spróbować zrobić /var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /. To powinno przywrócić większość systemu do działania. Istnieje kilka takich katalogów, /tmpktóre również istnieją /var/tmp, więc nie można ich po prostu przenosić. Mam nadzieję, że mvto oni narzekali i zostali sami.

 

Uzyskiwanie powłoki roota

Wspomniałeś również, że straciłeś powłokę główną, a to supowoduje ld-linuxbłąd biblioteki. Możesz być w stanie użyć następujących elementów:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/su

Uwaga: po próbie nie działa. To dlatego, że suwymaga kilku plików w /etc( passwd, pam.di inne). Gdyby /etcnadal były nienaruszone, miałoby to spore szanse na sukces.

 

Bez zajęty

Jeśli nie masz dostępnego busyboksa, możesz użyć tej samej sztuczki ld-linux jak dla su:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /

 

Z płyty CD na żywo

Jak wspomniano w komentarzach, jeśli straciłeś powłokę root, to utknąłeś. Zasadniczo, aby to naprawić, potrzebujesz uprawnień roota. Jedynym sposobem, aby się tam dostać, jest posiadanie narzędzia, takiego jak sulub sudozwiększanie uprawnień (oba nie działają w tym momencie), lub przejęcie innego programu, który jest już uruchomiony jako root (w zależności od tego, co jest uruchomione, prawdopodobnie nie jest możliwe).

To pozostawia jedyną opcję, jaką jest live CD. Po uruchomieniu na żywo CD (lub Live USB, lub cokolwiek innego), po prostu zamontuj wolumin główny i przenieś katalogi, których dotyczy problem, z /varpowrotem do ich pierwotnego miejsca zamieszkania /.


Streszczenie tego, co się stało

folder/*rozwinąłby się w coś takiego jak folder/fooi folder/bar.
/*rozwinąłby się w coś takiego /bin /lib32 /lib64 /etc /home /root /var. Zauważ, że /varto ostatni element.
Gdy więc powłoka rozszerzy wszystkie globusy, uruchomi się coś takiego:

mv folder/foo folder/bar /bin /lib32 /lib64 /etc /home /root /var

Podobnie /varjak ostatni element na liście, wszystko zostało do niego przeniesione.


Dlaczego /var/bin/subłędy z/lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

Prawie wszystkie pliki binarne w systemie Linux są dynamicznie powiązane ld-linux. ld-linuxjest biblioteką odpowiedzialną za ładowanie innych bibliotek wymaganych przez plik binarny. W twoim systemie to żyje /lib64/ld-linux-x86-64.so.2. Ponieważ ten katalog został przeniesiony, żaden dynamicznie połączony plik wykonywalny przestanie działać.

Powodem, dla którego busy jest aktywne, jest to, że zajęty jest statycznie powiązany. Nie używa ld-linux.

Patrick
źródło
Dobry pomysł. CentOS zazwyczaj ma zainstalowany busybox z powodu initramfs , więc to może działać dobrze.
Pavel Šimerda
busyboxbrzmi jak idealne rozwiązanie, niestety nie zainstalowane, czy po tym zostanie naprawione ... czy w międzyczasie istnieje poprawna ścieżka dla poleceń do wykonania /var/lib64/ld-linux-x86-64.so.2zamiast /lib64/ld-linux-x86-64.so.2? Wydaje się, że to właśnie zabija polecenia/var/bin
webaholik
@Patrick: Czy możesz dodać informacje, że również polecenie OP, którego zamierzasz użyć, jest nieprawidłowe? Mógłbym wtedy usunąć swoją odpowiedź, ponieważ jest ona (prawie) zbędna. Nawiasem mówiąc, czy to właściwy sposób na wymianę stosów?
Pavel Šimerda
1
To patrząc na kilka rzeczy w /etcktórych nie istnieją ( /etc/passwd, /etc/nsswitch, /etc/pam.d, i prawdopodobnie więcej). Aby sudziałać, /etcmusi być z powrotem w oryginalnej lokalizacji. Chyba, że ​​masz wokół siebie skorupę korzenia, myślę, że utknąłeś :-(
Patrick
2
@ user1296209 Po uruchomieniu kopii na żywo wystarczy zamontować wolumin główny i przenieść te katalogi z powrotem. To powinno wystarczyć do ponownego uruchomienia.
Patrick,
10

mv folder/* ./*też jest źle. Powinieneś bardziej uważać na semantykę uruchamianych poleceń. mvPolecenia z więcej niż dwóch argumentów właśnie bierze wszystko argumentu oprócz ostatniego i przesuwa ścieżki wskazują one w katalogu określonym w ostatnim argumentem.

Aby przenieść wszystkie katalogi (oprócz ukrytych) z folderu do bieżącego katalogu, należy użyć:

mv folder/* .

Zepsułeś działający system. Twoje powłoki i wbudowane polecenia nadal działają. Będziesz musiał uruchomić live CD i przenieść katalogi z powrotem. Nie znam wbudowanego basha do przenoszenia / zmiany nazw plików, który pozwoliłby ci naprawić sytuację bez ponownego uruchamiania, zobacz odpowiedź Patricka, aby uzyskać więcej szczegółów.

Pavel Šimerda
źródło
Nie zdawałem sobie z tego sprawy: mogę cd do / var / bin & / var / etc, wygląda na to, że foldery zostały przeniesione do var, w każdym razie mogę je przenieść z powrotem? ... bez LIVECD?
webaholik
Próbowałem / var / bin / su & get: -bash: / var / bin / su: /lib64/ld-linux-x86-64.so.2: zły interpreter ELF: brak takiego pliku lub katalogu
webaholik
Aha ... Naprawię odpowiedź.
Pavel Šimerda
jakie powinno być moje mvpolecenie, aby przenieść wszystkie pliki i foldery z folderu do bieżącego katalogu?
webaholik
1
@ user1296209: Jeśli uruchamiasz system działający na żywo, na pewno masz dostęp do konta root w swoim systemie życia. Twój rzeczywisty system jest tylko zamontowaną partycją bez specjalnego znaczenia dla systemu na żywo. Jedyną komplikacją jest to, że twój /i /varkatalogi mogą znajdować się na różnych partycjach, w takim przypadku musisz zamontować oba.
celtschk
2

Przypadkowo przeniosłem / usr do / usr_old i wszystko poszło do piekła. Na szczęście pozostałem w wierszu polecenia i mogłem wykonać następujące polecenie, aby przywrócić folder usr:

LD_LIBRARY_PATH=/usr_old/lib64 /usr_old/lib64/ld-linux-x86-64.so.2 /usr_old/bin/mv /usr_old /usr
Mansehr
źródło
Witaj w U&L, czy to było jedyne polecenie, które wpisujesz? Podaj bardziej szczegółową procedurę. (specjalnie dla dziesięciomiesięcznego pytania, nie trzeba się spieszyć)
Archemar
1
Tak, po wpisaniu tego polecenia wszystko zostało przywrócone. Może powinienem wspomnieć, że przez cały ten czas byłem rootem.
Mansehr
1

WAŻNE Jeśli jesteś tutaj i działałeś mvniepoprawnie, nie możesz uruchamiać shellpoleceń, a folderów brakuje w katalogu głównym ( /), przede wszystkim, jeśli tak SU, NIE WYJDŹ, SUdopóki nie zostanie naprawiony, ponieważ nie odzyskasz go. Jeśli jesteś zdalnie połączony, jeśli się rozłączysz, nie będziesz w stanie ssh, zostaw serwer w spokoju, nie reboot- większość działających usług powinna być OK. Możesz wypróbować jedno z wielu rozwiązań zaproponowanych przez Patricka ... jednak prawdopodobnie będziesz potrzebować fizycznego dostępu, jeśli spieprzysz tak jak ja.

Raz przed komputerem ponownie go uruchomiłem. Zgodnie z oczekiwaniami, dostałem panikę jądra.

Pomyślałem, że to całkiem łatwa poprawka, włóż Livecd, wejdź w tryb ratunkowy DO PUNKTU, BYŁO ŁATWE - wtedy musiałem spróbować zamontować katalog główny. Potrzebowałem jednak czegoś więcej niż zwykłego polecenia montowania.

Stało się tak, ponieważ podobnie jak wiele osób miałem system plików lvm i po raz pierwszy miałem do czynienia z ratunkiem takim jak ten. Musiałem przeszukać internet, aby zobaczyć, co muszę zrobić. Skonsolidowałem te informacje z tym postem. Oto mój proces rozwiązania problemu.

1) Wstawiono CD Centos_6.4_min

2) Interfejs GUI zapytał, co chcę zrobić, wybrałem Rescue

3) Rescue próbował zamontować obecny system, ale wskazał, że nie mam partycji Linuksa

4) Wybierz, aby podać, shellkiedy podano opcję

W tym momencie próbowałem wielu rzeczy, aby zamontować system, ale bez powodzenia, jestem prawie pewien, że są to wszystkie kroki, które musiałem podjąć (z powodu lvm):

5) Zeskanowałem moje tomy,

lvmdiskscan

6) Ran lvscan, pokazał wszystkie wymienione jako „nieaktywne”

lvscan

7) załaduj moduł urządzenia

modprobe dm-mod

8) zmień istniejące woluminy na aktywne

vgchange -ay

9) Uruchomiono lvscanponownie, teraz wszystkie elementy wymienione jako „aktywne”

10) Utworzono punkt montowania i zamontowano partycję logiczną

mkdir /mnt/root

mount /dev/VolGroup00/LogVol00 /mnt/root

11) Przeniesiono foldery z powrotem (możesz potrzebować innych):

mv /var/{bin,etc,lib64,mnt,root,sbin} /

12)reboot

13) SUKCES!

webaholik
źródło