現在3回のうち1回再起動するシステムがありますが、日時を見つけることができ、誰が(システムと言えば)知ることができますが、理由は不明です。
再起動スクリプトを役に立たないスクリプトに置き換えて、誰が、どこで、なぜ再起動を有効にしようとしているのかを把握することができるのだろうか。どうすればいいですか?
私はLinux linaroを使用しています。 UbuntuベースのFSです。この問題のデバッグに関する提案を歓迎します。
答え1
汚いスクリプト方式
再起動する方法はいくつかあります。私が調べることができると思ったアプローチの1つは、スクリプトを使用してシャットダウン、シャットダウン、再起動、および初期化を置き換えることです。
for cmd in shutdown halt reboot init
do
mv /usr/bin/$cmd /usr/bin/${cmd}.ori
ln -s /usr/bin/${cmd}.ori /usr/bin/$cmd
done
次に、情報を記録するシェルスクリプトを作成します。
#!/bin/bash
echo "$0 called with $@ by $USER at `time` - Processes: `ps axjf`" >> /var/log/reboot.log
${0}.ori $@
そしてそれをにコピーまたはリンクする必要があります。ただし、再起動時にのみ誰でもログインできるようにする/usr/bin/{shutdown,halt,reboot,init}
必要があります。/var/log/reboot.log
root
ps axjf
スクリプトと呼ばれるプロセスを見ることができるはずです。ログにさらに情報を追加したいかもしれませんが、これは良いスタートです。
あなたが見逃す可能性のあるもの
他のコマンドは、システムコールを呼び出してシステムを再起動できます。reboot
。これは「正式な」コマンドでも、「悪意のある」コマンドでもかまいません。
Xサーバーはシャットダウンでき、一部の設定ではすべてのユーザーがシャットダウンできます。リモートアクセスとシャットダウンが許可されている場合は、他の人がリモートシャットダウンを要求できます(ただし、3回目の再起動動作を説明するわけではありません)。
ターゲットの初期化
あなたはできます:
- ステップを追加する目標の始めにランレベル 0 と 6 で一定時間(たとえば
sleep 60
もう少し)待ちます。 ps axjf
60秒ごとに実行され、ファイルに書き込むスクリプトがあります。
これは、シャットダウン時に実行されていたプロセスに関する情報を提供する必要があります。もちろん、60秒ごとに実行される内容を調べるのに役立つ他のコマンドを追加することもできます。
カーネル監査
この問題を調査するもう1つの方法は、次を使用することです。カーネル監査機能ただし、カーネルで有効にする必要があります(多くのディストリビューションではそうではありません)。
次に、次を使用します。
auditctl -a entry,always -S reboot
各再起動呼び出しを記録して使用するausearch
完了した通話を見つけてください。