カーネルモジュール
100%

Kernel · レッスン 6

カーネルモジュール

release 固有の Linux kernel module を調査、load、設定し、安全に削除する方法を学びます。

loadable kernel module は、driver、filesystem、network feature などの subsystem を追加して、動作中カーネルを拡張できる特権 code です。module によって全 optional feature を一つの kernel image に build せずに済みますが、load すると信頼される kernel attack surface が広がります。

Module を一覧・調査する

現在 load 済みの module を一覧表示します。

$ lsmod

出力は /proc/modules などの kernel state から得られ、module name、size、use count または dependency を含みます。count が 0 に見えても、安全に削除できる完全な証拠ではありません。driver が active device を所有したり、subsystem state に参加したりしている場合があります。

動作中カーネルで利用可能な module を調べます。

$ modinfo MODULE_NAME

modinfo は filename、alias、parameter、license、description、signature information を表示できます。metadata は説明情報として扱い、module が信頼できる、または workload と互換だという証明にはしないでください。

lsmod は何を表示しますか?

`modprobe` で Load する

名前で module を load します。

$ sudo modprobe MODULE_NAME

modprobe/lib/modules/$(uname -r)/ 以下にある動作中カーネルの dependency index、alias、configuration を参照します。必要な dependency を load し、設定済み parameter を渡します。一方 insmod は指定した一つの module file を直接 insert し、同じ dependency-resolution workflow を提供しません。

load 前に module provenance、signature policy、kernel release compatibility、parameter、想定する hardware binding、rollback を確認します。Secure Boot や kernel lockdown は unsigned module を拒否できます。非互換 code の強制は crash や compromise の危険があります。

通常、直接の insmod より modprobe が推奨されるのはなぜですか?

Module Parameter と Boot-Time Loading

永続的な parameter・alias policy は、/etc/modprobe.d/ 以下の .conf file に置きます。

options example_module mode=careful

この行は modprobe が module を load する方法へ影響しますが、それ自体では boot 時の load を要求しません。単純な boot-time load list は通常 /etc/modules-load.d/ 以下に置きます。

example_module

hardware alias によって明示的な list なしでも自動 load される場合があります。early boot 内で必要な module は、設定変更後にディストリビューション指定手順で initramfs を更新します。

/etc/modprobe.d/options 行は何をしますか?

Blacklist とその限界

modprobe 設定には次の行を書けます。

blacklist example_module

blacklist は通常、module alias を通じた自動 load を抑止します。すでに load 済み module を unload せず、initramfs からも取り除かず、正確な名前による明示 load や dependency としての load を必ず防ぐわけでもありません。security hardening には、threat 固有の module availability、signature enforcement、initramfs content、boot parameter、policy の組み合わせが必要です。

基本的な modprobe の blacklist 行が主に抑止するものは何ですか?

Module を安全に削除する

削除を要求します。

$ sudo modprobe -r MODULE_NAME

modprobe は適切な場合、使われなくなった dependency も削除できます。通常の reference tracking で module が busy ならカーネルは拒否しますが、それだけを安全確認にしないでください。active hardware を支える code を削除する前に、service を停止し、filesystem を unmount し、device を detach し、networking を quiesce して、別 driver または recovery path を確認します。

維持すべき system で module を強制 unload してはいけません。削除 bug や outstanding activity が kernel crash または data corruption を起こす可能性があります。

名前を指定し、dependency を考慮して module の削除を要求するコマンドはどれですか?

レッスン完了

カーネルモジュール を完了しました

これで、kernel-level risk を考慮しながら module を管理できます。

  • live state には lsmod、利用可能な metadata には modinfo を使う。

  • alias と dependency を考慮した load に modprobe を使う。

  • modprobe parameter と boot-time load request を分離する。

  • blacklisting を絶対的な block ではなく、限界のある policy として扱う。

  • modprobe -r 前にすべての consumer を quiesce する。

学習進捗を保存

無料アカウントを作成してこのレッスンを保存し、どのデバイスからでも学習を続けられます。

無料アカウントを作成
Kernel に戻る