単一のコマンドラインでカーネルパニックを引き起こすことは可能ですか?
Sudoingユーザーにとって最もわかりやすいそのようなコマンドは何ですか?また、もしあれば、通常のユーザーにとっては何でしょうか?
コマンドの一部として何かをダウンロードすることを提案するシナリオはカウントされません。
mkdir /tmp/kpanic && cd /tmp/kpanic && printf '#include <linux/kernel.h>\n#include <linux/module.h>\nMODULE_LICENSE("GPL");static int8_t* message = "buffer overrun at 0x4ba4c73e73acce54";int init_module(void){panic(message);return 0;}' > kpanic.c && printf 'obj-m += kpanic.o\nall:\n\tmake -C /lib/modules/$(Shell uname -r)/build M=$(PWD) modules' > Makefile && make && insmod kpanic.ko
panic
関数を呼び出してカーネルをクラッシュさせるモジュールをコンパイルします。ルートが必要で、make
とgcc
が必要です
コマンドの「0x4ba4c73e73acce54でのバッファオーバーラン」を、よりドラマに興味深いものに置き換えます。
カーネルは何があっても実行し続けることを目的としています。したがって、ユーザーの操作によってカーネルパニックを引き起こす方法はすべてあります(Bruce Edigerが提案しているように、強力なrootによる意図的な破壊行為を除き、現在ほとんどのカーネルはビルドされているため、これらのいたずらのほとんどはそもそも機能しません)。 非常に深刻なバグ。
これが以前に言及されなかった理由がわかりません...
Sudo kill -9 1
「initを強制終了しようとしました」というメッセージのパニック。
これを試して:
dd if=/dev/urandom of=/proc/sysrq-trigger
これは非常に高速なカーネルパニックを引き起こしましたが、ライブのUbuntuインストールでそれを実行したため、プロセスがどれほど安全かはわかりません。しかし、私が純粋なターミナル環境でそれをしたとき、カーネルは私にスパムエラーメッセージを出しました。
最も簡単な方法は、Alt +印刷画面(sysrq)を押したまま、cを押したままにすることです。これはecho c > /proc/sysrq-trigger
と同じです。簡単な説明:sysrqキーは、低レベルのコマンドをカーネル自体に送信するために使用されます、システムを保存しようとする最後の手段として。 alt + print screen(sysrq)を押したままそれらの隣にある別のキーを押すと、そのsysrq-triggerファイルでキーをエコーする場合と同じように動作します。彼らはそれをトリガーと呼びます; 3 'c'はカーネルにクラッシュを指示します(カーネルパニックの原因)
ただし、「proc/sys/kernel/sysrq」の内容を見たい場合があります。それが178またはその他の場合は、1に変更する必要があります。0はすべて無効、1はすべて有効、1より大きいものは、カーネルがsysrqで実行できる特定のことのためのビットマップです。
次のコードをモジュールにコンパイルしてinsmodしてください。パニックが発生するはずです。
static int crash_module_init(void)
{
printf("crash module starting\n");
int *p = 0;
printk("%d\n", *p);
return 0;
}
static void crash_module_exit(void)
{
printf("crash module exiting\n");
}
module_init(crash_module_init);
module_exit(crash_module_exit);