
ある日、Ubuntu 20サーバーを再起動しようとしましたが、「カーネルパニック」のために起動が失敗しました。サービスプロバイダが提供する「回復モード」を使用して調査したところ、ルートディレクトリにフォルダがないことがわかりました。
- ゴミ箱
- 図書館
- 図書館 64
- 回転
我々はこの問題を解決し、/usr/xxxに対応するシンボリックリンクを作成した後、問題なく起動しました。
現在のところ、どのようにこのようなことが起こったのかわかりません。
- これらの症状に既知の脆弱性や悪用の例はありますか?
- 根本原因をより詳細に理解するには、何を確認する必要がありますか?
- 編集する -
答えが示唆したように、rootとして履歴を確認しましたが、「魔法のように消える」フォルダに関連する「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 /*
誰かまたは何かがroot権限で実行されました。history
(ルートとして)確認してください。
または、次の形式のコードを含む誤って書かれたスクリプトをたくさん見ました。
rm $someVar/*
Expect$someVar
は空ではなく、またはワイルドカード文字を含まず$IFS
、で始まりません-
。ただし、シナリオをトリガーできるのは、$someVar
変数が拡張され、コマンドが次のように空であることです。
rm /*
または、$someVar
発生する文字$IFS
(デフォルトでは空白、タブ、改行)で終わります。たとえば、someVar='dir '
この場合、コマンドは次のようになります。
rm dir /*
コードをよりよく書くと、rm -- "$someVar"/*
後者の問題は解決することができますが、それでも$someVar
nullの場合は対処できません。 2つのオプションは次のとおりです。
[ -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
設定の変数を逆参照するとシェルプロセスが中断され、これらの問題を引き起こす可能性がある変数名の誤字を検出するのにも役立ちます。