1.8. システムの起動時にカーネルモジュールが自動的にロードされないようにする
以下の手順では、システムの起動プロセス中にカーネルモジュールが自動的に読み込まれないように拒否リストに追加する方法を説明します。
前提条件
- root 権限
-
kmod
パッケージがインストールされている。 - 拒否リストに指定したカーネルモジュールが現在のシステム設定に重要でないことを確認する。
手順
拒否リストに追加するカーネルモジュールを選択します。
$ lsmod Module Size Used by fuse 126976 3 xt_CHECKSUM 16384 1 ipt_MASQUERADE 16384 1 uinput 20480 1 xt_conntrack 16384 1 …
lsmod
コマンドは、現在実行中のカーネルに読み込まれているモジュールのリストを表示します。もしくは、読み込みを阻止する、アンロードしたカーネルモジュールを特定します。
すべてのカーネルモジュールは、
/lib/modules/<KERNEL_VERSION>/kernel/<subsystem>/
ディレクトリーにあります。
拒否リスト用の設定ファイルを作成します。
# vim /etc/modprobe.d/blacklist.conf # Blacklists <KERNEL_MODULE_1> blacklist <MODULE_NAME_1> install <MODULE_NAME_1> /bin/false # Blacklists <KERNEL_MODULE_2> blacklist <MODULE_NAME_2> install <MODULE_NAME_2> /bin/false # Blacklists <KERNEL_MODULE_n> blacklist <MODULE_NAME_n> install <MODULE_NAME_n> /bin/false …
この例では、
vim
エディターで編集したblacklist.conf
ファイルの内容を示しています。blacklist
の行では、システムの起動プロセス中に関連のカーネルモジュールが自動的に読み込まれないように指定します。ただし、blacklist
コマンドは、拒否リストに入っていない他のカーネルモジュールの依存関係としてのモジュールの読み込みを阻止することはありません。したがって、install
の行では、モジュールのインストールの代わりに、/bin/false
が実行されます。ハッシュ記号で始まる行は、ファイルがより読みやすいコメントです。
注記カーネルモジュールの名前を入力する際には、
.ko.xz
拡張子は名前の末尾に追加しないでください。カーネルモジュール名には拡張子はありません。ただし、対応するファイルには拡張子があります。再構築を行う前に、現在の初期 ramdisk イメージのバックアップコピーを作成します。
# cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).img
上記のコマンドは、新しいバージョンに予期しない問題が発生したときに、バックアップの
initramfs
イメージを作成します。または、カーネルモジュールを拒否リストに指定するカーネルバージョンに対応する、その他の初期 ramdisk イメージのバックアップコピーを作成します。
# cp /boot/initramfs-<SOME_VERSION>.img /boot/initramfs-<SOME_VERSION>.img.bak.$(date +%m-%d-%H%M%S)
変更を反映するために新しい初期 ramdisk イメージを生成します。
# dracut -f -v
現在起動しているものとは異なるカーネルバージョンの初期 ramdisk イメージを構築する場合は、ターゲット
initramfs
とカーネルバージョンの両方を指定します。# dracut -f -v /boot/initramfs-<TARGET_VERSION>.img <CORRESPONDING_TARGET_KERNEL_VERSION>
システムを再起動します。
$ reboot
この手順で説明している変更は、システムを再起動しても持続されます。主要なカーネルモジュールを拒否リストに誤って追加した場合には、システムが不安定になったり、稼働しなくなったりする可能性があります。
関連情報
-
dracut
ユーティリティーの詳細はdracut(8)
man ページを参照してください。 - Red Hat Enterprise Linux 8 以前のバージョンでのシステム起動時のカーネルモジュールの自動ロードを防止する方法は、How do I prevent a kernel module from loading automatically? を参照してください。