Ubuntu Server에서 "bin, lib, lib64 및 sbin" 폴더를 마법처럼 삭제하는 방법은 무엇입니까?

Ubuntu Server에서 "bin, lib, lib64 및 sbin" 폴더를 마법처럼 삭제하는 방법은 무엇입니까?

어느 날 Ubuntu 20 서버를 다시 시작하려고 했지만 "커널 패닉"으로 인해 부팅이 계속 실패했습니다. 서비스 제공업체에서 제공하는 "복구 모드"를 사용하여 조사한 결과 루트 디렉터리에 폴더가 없음을 발견했습니다.

  • 쓰레기통
  • 도서관
  • 도서관 64
  • 회전

우리는 이 문제를 해결하고 /usr/xxx에 해당하는 심볼릭 링크를 생성한 후 문제 없이 부팅했습니다.

현재로서는 어떻게 이런 일이 일어났는지 모르겠습니다.

  1. 이러한 증상에 대해 알려진 취약점이나 악용 사례가 있습니까?
  2. 근본 원인을 더 자세히 이해하려면 무엇을 확인해야 합니까?

- 편집하다 -

답변에서 제안한 대로 루트로 기록을 확인했지만 "마법처럼 사라지는" 폴더와 관련된 "rm -rf *"(또는 이와 유사한 것)와 관련된 내용을 볼 수 없습니다. 내가 얻는 결과는 다음과 같습니다.

역사 | grep rm

  887  rm 09
  888  rm _new*
  891  rm _new*
  893  rm _new*
  916  rm _new_*
  918  rm _new_*
  922  rm _new_*
  927  rm _*
  934  rm _*
  936  rm _*
  974  rm woo*
  975  rm -r woocommerce_uploads/
  980  rm -r test/
 1024  rm -r directory-files-converter_MODIFIED/
 1165  history | grep rm

역사 | 그렙 빈

  502  joe /usr/local/bin/copias
  516  joe /usr/local/bin/copias
  518  joe /usr/local/bin/copias
  520  joe /usr/local/bin/copias
  575  cd /usr/local/bin/
  609  cd /usr/local/bin/dreport
  610  cd /usr/local/bin/dcheck/
  760  cat /usr/local/bin/copias
  764  /usr/local/bin/dreport
 1166  history | grep bin

어디를 볼지에 대한 다른 아이디어가 있나요?

답변1

rm /*누군가 또는 무언가가 루트 권한으로 실행되었습니다. history(루트로) 확인하십시오 .

또는 다음 형식의 코드가 포함된 잘못 작성된 스크립트를 많이 보았습니다.

rm $someVar/*

Expect $someVar는 비어 있지 않으며, 또는 와일드카드 문자를 포함하지 않으며 $IFS, 로 시작하지 않습니다 -. 그러나 시나리오를 트리거할 수 있는 것은 $someVar변수가 확장되고 명령이 다음과 같이 비어 있다는 것입니다.

rm /*

또는 $someVar발생하는 문자 $IFS(기본적으로 공백, 탭, 개행)로 끝납니다. 예를 들어 someVar='dir '이 경우 명령은 다음과 같습니다.

rm dir /*

코드를 더 잘 작성하면 rm -- "$someVar"/*후자의 문제가 해결될 수 있지만 여전히 $someVarnull 경우에는 대처할 수 없습니다. 두 가지 옵션은 다음과 같습니다.

[ -n "$someVar" ] && rm -f -- "$someVar"/*    # Execute only if set

rm -f -- "${someVar:?is undefined}"/*         # Abort with error if unset or empty

nounset옵션( set -o nounset또는 )을 설정하면 set -u설정되지 않은 변수를 역참조할 때 쉘 프로세스가 중단되고, 이러한 문제를 일으킬 수 있는 변수 이름의 오타를 감지하는 데도 도움이 됩니다.

관련 정보