最新のLinuxカーネルでモジュールロードをグローバルに無効にできますか?

最新のLinuxカーネルでモジュールロードをグローバルに無効にできますか?

/proc/sys/kernel/cap-boundカーネル2.6.25以前は、システム全体でドロップを使用して、CAP_SYS_MODULE悪用や再起動なしにカーネルスペースにロードされた現在のコードセットがすべてあるかどうかを確認することができました。

CAP_NET_ADMINその後、(!)なしでカーネルモジュールをロードできるようにすることを決定し、CAP_SYS_MODULE値をCAP_SYS_MODULE超えました。最新のカーネルを検索してみると、ランタイムチェックがCAP_SYS_MODULEまだ存在しないことがわかりました。

現代的な選択肢は何ですか?

答え1

Kees Cookは、このニーズを満たすために2009年初めにsysctlを実装しました。文書に記載されているようにドキュメント/sysctl/kernel.txt:

modules_disabled:

別のモジュール式カーネルにモジュールをロードできるかどうかを示すトグル値。このトグルのデフォルト値はオフ(0)ですが、true(1)に設定できます。 trueの場合、モジュールをロードまたはアンロードできず、トグルを再びfalseに設定できません。通常、「kexec_load_disabled」トグルと一緒に使用されます。


kexec_load_disabled前述のように、カーネル空間でアクティブなコードを制御することが目標である場合は、次の方法を使用する必要があります。

kexec_load_disabled:

kexec_load システムコールが無効かどうかを示すトグルスイッチです。この値のデフォルト値は0(false:kexec_loadが有効)ですが、1 (true:kexec_loadが無効)に設定できます。 trueになると、kexecを使用できなくなり、トグルをfalseにリセットできなくなります。これにより、システムコールが無効になる前にkexecイメージをロードできるため、システムはイメージを変更せずにイメージを設定(後で使用)できます。通常、 "modules_disabled" sysctl と一緒に使用されます。

関連情報