어느 날 Ubuntu 20 서버를 다시 시작하려고 했지만 "커널 패닉"으로 인해 부팅이 계속 실패했습니다. 서비스 제공업체에서 제공하는 "복구 모드"를 사용하여 조사한 결과 루트 디렉터리에 폴더가 없음을 발견했습니다.
- 쓰레기통
- 도서관
- 도서관 64
- 회전
우리는 이 문제를 해결하고 /usr/xxx에 해당하는 심볼릭 링크를 생성한 후 문제 없이 부팅했습니다.
현재로서는 어떻게 이런 일이 일어났는지 모르겠습니다.
- 이러한 증상에 대해 알려진 취약점이나 악용 사례가 있습니까?
- 근본 원인을 더 자세히 이해하려면 무엇을 확인해야 합니까?
- 편집하다 -
답변에서 제안한 대로 루트로 기록을 확인했지만 "마법처럼 사라지는" 폴더와 관련된 "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"/*
후자의 문제가 해결될 수 있지만 여전히 $someVar
null 경우에는 대처할 수 없습니다. 두 가지 옵션은 다음과 같습니다.
[ -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
설정되지 않은 변수를 역참조할 때 쉘 프로세스가 중단되고, 이러한 문제를 일으킬 수 있는 변수 이름의 오타를 감지하는 데도 도움이 됩니다.