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


11

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


1
/var/bin/su직접 달릴 수 없습니까?
Darkhogg

솔루션으로 질문을 편집하지 마십시오. 스택 교환 네트워크에서 답변을 추가하고 기존 답변에 의견을 남기면 답변이 향상됩니다.
Bernhard

@Darkhogg /var/bin/su: user root does not exist/ etc가 / var / etc에 있기 때문에 수행 할 수 없다고 판단한 것
같습니다

@Bernhard는 수정하려고
webaholik

답변:


22

시스템이 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.


좋은 생각. CentOS에는 일반적으로 initramfs 때문에 busybox가 설치되어 있으므로 제대로 작동 할 수 있습니다.
Pavel Šimerda

busybox불행히도 설치되지 않은 완벽한 솔루션 인 것처럼 들립니다.이 문제가 해결 된 후에 ... 어쨌든 명령 /var/lib64/ld-linux-x86-64.so.2대신 실행할 경로를 수정해야 /lib64/ld-linux-x86-64.so.2합니까? 이것은 명령을 죽이는 것 같습니다/var/bin
webaholik

@Patrick : OP 명령도 틀린 정보를 추가해 주시겠습니까? 그런 다음 지금 (거의) 중복되어 내 답변을 삭제할 수 있습니다. 그런데 스택 교환을 사용하는 올바른 방법입니까?
Pavel Šimerda

1
여러 가지을 찾고 /etc있는가 (없는 /etc/passwd, /etc/nsswitch, /etc/pam.d, 그리고 아마도 더). 들어 su작업에, /etc그것의 원래 위치에 다시해야합니다. 루트 쉘을 가지고 있지 않는 한, 당신이 붙어 있다고 생각합니다 :-(
Patrick

2
@ user1296209 livecd를 시작하면 루트 볼륨을 마운트하고 해당 디렉토리를 다시 이동하십시오. 다시 실행하기 위해 필요한 전부입니다.
Patrick

10

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

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

mv folder/* .

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


나는 몰랐다 : 나는 / var / bin & / var / etc로 cd 할 수 있고, 폴더가 var로 이동 된 것처럼 보인다. 어쨌든 폴더를 다시 이동할 수 있습니까?
webaholik

나는 / var / bin / su & get을 시도했다 : -bash : / var / bin / su : /lib64/ld-linux-x86-64.so.2 : 나쁜 ELF 인터프리터 : 그런 파일이나 디렉토리가 없다
webaholik

아하 .. 나는 대답을 고칠 것이다.
Pavel Šimerda

mv모든 파일과 폴더를 폴더에서 현재 디렉토리로 옮기는 명령은 무엇 입니까?
webaholik

1
@ user1296209 : 라이브 시스템을 부팅하는 경우 확실히 라이프 시스템에 대한 루트 액세스 권한이 있습니다. 실제 시스템은 라이브 시스템에 특별한 의미가없는 마운트 된 파티션 일뿐입니다. 유일한 합병증은 귀하 //var디렉토리가 다른 파티션에있을 수 있다는 것입니다.이 경우 둘 다 마운트해야합니다.
celtschk

2

실수로 / 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

U & L에 오신 것을 환영합니다. 입력하는 유일한 명령은 무엇입니까? 더 자세한 절차를 제공하십시오. (특히 10 mont의 오래된 질문에 대해서는 서두를 필요가 없습니다)
Archemar

1
예, 그 명령을 입력 한 후 모든 것이 복원되었습니다. 어쩌면 나는이 모든 동안 내가 뿌리 였다는 것을 언급해야합니다.
Mansehr

1

중요 여기에 있고 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) 성공!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.