Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

1.8. システムの起動時にカーネルモジュールが自動的にロードされないようにする

以下の手順では、システムの起動プロセス中にカーネルモジュールが自動的に読み込まれないように拒否リストに追加する方法を説明します。

前提条件

  • root 権限
  • kmod パッケージがインストールされている。
  • 拒否リストに指定したカーネルモジュールが現在のシステム設定に重要でないことを確認する。

手順

  1. 拒否リストに追加するカーネルモジュールを選択します。

    $ 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>/ ディレクトリーにあります。

  2. 拒否リスト用の設定ファイルを作成します。

    # 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 拡張子は名前の末尾に追加しないでください。カーネルモジュール名には拡張子はありません。ただし、対応するファイルには拡張子があります。

  3. 再構築を行う前に、現在の初期 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)
  4. 変更を反映するために新しい初期 ramdisk イメージを生成します。

    # dracut -f -v
    • 現在起動しているものとは異なるカーネルバージョンの初期 ramdisk イメージを構築する場合は、ターゲット initramfs とカーネルバージョンの両方を指定します。

      # dracut -f -v /boot/initramfs-<TARGET_VERSION>.img <CORRESPONDING_TARGET_KERNEL_VERSION>
  5. システムを再起動します。

    $ reboot
重要

この手順で説明している変更は、システムを再起動しても持続されます。主要なカーネルモジュールを拒否リストに誤って追加した場合には、システムが不安定になったり、稼働しなくなったりする可能性があります。

関連情報

  • dracut ユーティリティーの詳細は dracut(8) man ページを参照してください。
  • Red Hat Enterprise Linux 8 以前のバージョンでのシステム起動時のカーネルモジュールの自動ロードを防止する方法は、How do I prevent a kernel module from loading automatically? を参照してください。