[unix] / bin / etc / lib64 / root / sbin이 su 동안 mv 폴더 / * / *에 의해 삭제되거나 이동되었습니다.

OS는 Centos 6.5 64 비트입니다

tar 파일을 다운로드하여 압축을 풀고 싶었 mv습니다.

압축을 풀고 bash mv folder/* /*대신 우연히 루트로 실행 하여 mv folder/* .일부 파일을 덮어 쓸 수 없다고 말한 후 다른 사람에게 권한을 요청했습니다. 나는 ctrl-c를 꺼냈다.

터미널 세션을 열어 두었지만 종료했습니다 su.

이제 대부분의 shell명령에 대한 액세스 권한을 잃어 버렸고 ls디렉토리를 찾을 수 없으며 다시 돌아올 수 없습니다 su.

웹 서버와 서비스가 여전히 실행중인 것 같습니다. 나는 거의 명령을 실행할 수 있습니다, cd그 중 하나 내가하려고 할 때 cd/etc/bin와 그 오류 no directory found.

편집 그냥이 누락 된 모든 폴더를 발견 /( bin, etc, lib64, root, sbin)로 이동있어 /var내가 시도, 디렉토리 /var/bin/su및 수 :
-bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory



답변

시스템이 busybox설치된 경우이를 사용하여 다시 되돌릴 수 있습니다.

busybox많은 표준 유틸리티가 내장 된 바이너리입니다. 것 같은 mv, sh, ls, 등

Pavel의 답변에 대한 귀하의 의견에서 모든 것이에서 끝나는 것처럼 들립니다 /var. 당신은 시도 할 수 있습니다 /var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /. 그러면 대부분의 시스템이 다시 작동하게됩니다. 같은 몇 가지 디렉토리가 있습니다 /tmp또한 존재하는 /var/tmp당신은 단지 그들을 이동할 수는. 잘만되면 이것들은 mv불평했고 그들은 홀로 남겨졌습니다.

 

루트 쉘 얻기

당신은 또한 당신의 루트 쉘을 잃었 언급, 그것은 su당신에게주고있다 ld-linux라이브러리 오류가 발생했습니다. 다음을 사용할 수 있습니다.

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

참고 :이 시도하면 작동하지 않습니다. 때문이다 su에서 여러 개의 파일이 필요합니다 /etc( passwd, pam.d, 등을). /etc그래도 그대로 라면 성공할 가능성이 높습니다.

 

비지 박스 없음

busybox를 사용할 수 없다면 다음과 같은 ld-linux 트릭을 사용할 수 있습니다 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} /

 

라이브 CD에서

주석에서 논의했듯이 루트 쉘을 잃어 버린 경우 거의 붙어 있습니다. 기본적으로이 문제를 해결하려면 루트 권한이 필요합니다. 얻을 수있는 유일한 방법은 같은 유틸리티를 가지고있다 su거나 sudo(이 시점에서 비 기능적 둘 다) 사용 권한을 확대를, 또는 다른 프로그램이 이미 (실행하지 가능성이 수 있는지에 따라) 루트로 실행 납치.

이것은 유일한 옵션은 라이브 CD입니다. 라이브 CD (또는 라이브 USB 등)로 부팅 한 후에는 루트 볼륨을 마운트하고 영향을받는 디렉토리 /var를에서 원래 홈 으로 다시 옮기십시오 /.


일어난 일의 개요

folder/*같은 뭔가 밖으로 확대 한 것 folder/foofolder/bar.
/*같은 것으로 확장했을 것 /bin /lib32 /lib64 /etc /home /root /var입니다. 그것이 /var마지막 항목 임을 주목 하십시오.
따라서 쉘이 모든 글로브를 확장하면 다음과 같이 실행됩니다.

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

/var목록의 마지막 항목과 마찬가지로 모든 것이 항목으로 이동되었습니다.


/var/bin/su오류가 발생 합니까?/lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

리눅스의 거의 모든 바이너리는에 대해 동적으로 링크 ld-linux됩니다. ld-linux바이너리에 필요한 다른 라이브러리를로드하는 라이브러리입니다. 귀하의 시스템에서 이것은에 있습니다 /lib64/ld-linux-x86-64.so.2. 이 디렉토리가 이동되었으므로 동적으로 링크 된 실행 파일은 더 이상 작동하지 않습니다.

busybox가 작동하는 이유는 busybox가 정적으로 연결되어 있기 때문입니다. 사용하지 않습니다 ld-linux.


답변

mv folder/* ./*또한 잘못되었습니다. 실행하는 명령의 의미에 대해 더주의해야합니다. mv두 개 이상의 인수 명령은 마지막 하나를 제외한 모든 인자를 마지막 인수에 지정된 디렉토리가 가리키는 경로를 이동합니다.

폴더 에서 현재 디렉토리 로 모든 디렉토리 (숨겨진 디렉토리 제외)를 이동하려면 다음을 사용해야합니다.

mv folder/* .

실행중인 시스템이 손상되었습니다. 쉘 및 내장 명령이 계속 작동합니다. 라이브 CD를 부팅하고 디렉토리를 다시 이동해야합니다. 재부팅하지 않고 상황을 해결할 수있는 파일을 이동 / 이름 바꾸기위한 bash 내장을 알고 있지 않습니다. 자세한 내용은 Patrick의 답변을 참조하십시오.


답변

실수로 / usr을 / usr_old로 옮기고 모든 것이 지옥에 갔다. 운 좋게 프롬프트에 머물면서 usr 폴더를 복원하기 위해 다음 명령을 실행할 수있었습니다.

LD_LIBRARY_PATH=/usr_old/lib64 /usr_old/lib64/ld-linux-x86-64.so.2 /usr_old/bin/mv /usr_old /usr


답변

중요
여기에 있고 mv잘못 실행 shell된 경우 루트 디렉토리 ( /) 에서 누락 된 명령 및 폴더를 실행할 수 없습니다 . 우선, 가지고있는 경우 에는 다시 복구 할 수 없으므로 수정 될 때까지 SU종료하지 마십시오 SU. 원격으로 연결된 경우 연결을 끊으면 ssh서버를 그대로 둘 수 없으며 reboot대부분의 실행중인 서비스가 정상이어야합니다. Patrick이 제안한 많은 솔루션 중 하나를 시도 할 수는 있지만 내가했던 것처럼 망쳐 놓으면 물리적 액세스가 필요할 것입니다.

기계 앞에서 한 번 재부팅했습니다. 예상대로 커널 패닉이 발생했습니다.

나는 이것이 매우 쉬운 수정이라고 생각하고 livecd를 삽입하고 복구 모드로 들어갑니다.이 시점까지는 쉬웠습니다. 루트 디렉토리를 마운트하고 마운트해야했습니다. 그러나 단순한 마운트 명령 이상의 것이 필요했습니다.

이것은 많은 사람들과 마찬가지로 lvm 파일 시스템을 가지고 있었기 때문에 처음으로 이와 같은 구조를 다루어야했습니다. 웹을 검색하여 필요한 작업을 확인해야했습니다. 해당 정보를이 게시물에 통합했습니다. 내 문제를 해결하는 과정은 다음과 같습니다.

1) 삽입 된 Centos_6.4_min cd

2) GUI 인터페이스는 내가하고 싶은 것을 물었고, Rescue를 선택했습니다.

3) Rescue가 현재 시스템을 마운트하려고했지만 Linux 파티션이 없음을 나타냅니다.

4) shell선택권이 주어 졌을 때 들어가는 관

이 시점에서 운 좋게도 시스템을 마운트하기 위해 많은 것을 시도했지만, 이것이 lvm 때문에 수행해야 할 모든 단계라고 확신합니다.

5) 내 볼륨을 스캔했습니다.

lvmdiskscan

6) Ran lvscan, 모두 “비활성”으로 표시

lvscan

7)로드 장치 모듈

modprobe dm-mod

8) 존재하는 볼륨 변경

vgchange -ay

9) lvscan다시, 이제 모든 항목이 “활성”으로 표시됨

10) 마운트 포인트 생성 및 논리 파티션 마운트

mkdir /mnt/root

mount /dev/VolGroup00/LogVol00 /mnt/root

11) 폴더를 다시 이동 함 (YOU에 다른 폴더가 필요할 수 있음) :

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

12)reboot

13) 성공!


답변