여전히 루트 셸이 있으면 시스템을 복구 할 수 있습니다. 이제 당신은 모든 일반 디렉토리를 이동한다고 가정 해 봅시다 ( /bin
, /etc
, /lib
, /sbin
, /usr
- 이러한 회복을 어렵게 만들 수있는 것들입니다)에서 /oops
.
mv
전체 경로를 지정하더라도 명령을 직접 실행할 수 없습니다 /oops/bin/mv
. 동적으로 연결되어 있기 때문 mv
입니다 . 디렉토리를 이동 했기 때문에 코드의 일부를 구성하는 라이브러리를 찾을 수 없으므로 실행할 수 없습니다. 사실, 그보다 더 나쁜 : 찾기 수 없습니다 동적 로더 (이름이 아키텍처와 유닉스 변종에 따라 달라질 수 있으며, 디렉토리 등의 다른 이름이 될 수 또는 ). 따라서 디렉토리를 다시 이동할 때까지 링커를 명시 적으로 호출하고 이동 된 라이브러리의 경로를 지정해야합니다. 다음은 데비안 스퀴즈 i386에서 테스트 한 명령입니다./lib
mv
mv
/lib/ld-linux.so.2
/lib32
/lib64
/lib
export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /
다른 배포판이나 아키텍처에 대해서는 약간 조정해야 할 수도 있습니다. 예를 들어 x86_64의 CentOS의 경우 :
export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /
무언가를 망 쳤을 때 /lib
정적으로 링크 된 도구 상자를 감싸는 데 도움이됩니다. 일부 배포판 (CentOS에 대해 모른다)은 정적으로 링크 된 Busybox 사본을 제공합니다 . 많은 명령이 내장 된 독립형 쉘인 sash 도 있습니다 . 이 중 하나가 있으면 복구를 수행 할 수 있습니다. 사실 전에 설치하지 않은 경우 너무 늦습니다.
# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit
더 이상 루트 셸이 없지만 SSH 데몬이 수신 대기 중이고 ssh를 통해 루트로 직접 로그인 할 수 있으며 이러한 정적으로 링크 된 도구 상자 중 하나가있는 경우 ssh를 입력 할 수 있습니다. 당신이 이동 한 경우에 사용할 수 있습니다 /lib
및 /bin
있지만 /etc
.
ssh root@broken.example.com /oops/bin/sash
root@broken.example.com's password:
Stand-alone shell (version 3.7)
> -mv /oops/* /
일부 관리자는 정적으로 연결된 셸을 사용하여 대체 계정을 설정하거나 이러한 종류의 문제에 대해서만 루트 계정을 정적으로 연결된 셸을 사용하도록합니다.
루트 셸이없고 예방 조치를 취하지 않은 경우 Linux 라이브 CD / USB로 부팅해야합니다 (최근 디스크와 파일 시스템에 액세스 할 수있을 정도로 오래 지속되는 경우). 파일을 다시 이동하십시오.