はじめに
このドキュメントでは、Secure Endpoint Linux(SEL)コネクタの障害11を特定、解決、および確認する方法について説明します。
背景説明
コネクタは、システムのアクティビティとイベントを監視するために必要なeBPFモジュールをロードできない場合に、Fault 11を生成します。
Linuxコネクタのリリース1.25以降、コネクタはeBPF CO-RE (Compile Once - Run Everywhere)を優先し、カーネルヘッダをインストールせずにBTFをサポートするカーネルのシステムイベントを監視します。このシステムの可観測性の方法は、より効率的で推奨されるオプションです。
コネクタは、1.25より古いLinuxコネクタリリースを使用している場合、またはBTFをサポートしていないカーネルで実行している場合に、カーネルヘッダーをインストールする必要がある従来のeBPFロード方式に戻ります。通常、これらのヘッダーは標準の配布インストールには含まれず、個別にインストールする必要があります。
いずれかの方法を使用してコネクタがeBPFモジュールのロードに失敗すると、障害11が発生し、システムが保護されていない状態であることが示されます。このドキュメントでは、この問題の解決に必要な手順について詳しく説明します。
BTFサポートの決定
このコネクタでは、ファイルシステムとネットワークアクティビティの監視に必要なeBPFモジュールをロードするために、次のいずれかをtrueに設定する必要があります。
1. 現在のカーネルではCONFIG_DEBUG_INFO_BTF
が有効になっています。(これは推奨されるオプションです)。
2. 現在稼働中のカーネルバージョンのカーネルヘッダがシステムにインストールされていること。
現在実行中のカーネルでCONFIG_DEBUG_INFO_BTF
が有効になっているかどうかを確認するには、次のコマンドを実行します。
cat /boot/config-$(uname -r) | grep CONFIG_DEBUG_INFO_BTF
CONFIG_DEBUG_INFO_BTF=y
と表示された場合、カーネルはBTFをサポートしており、コネクタはeBPFを使用してファイルシステムとネットワークイベントを監視できます。
BTFはサポートされていません
コネクタバージョン1.25以降を実行している場合は、カーネルをBTFをサポートするバージョンにアップグレードすることを検討してください。BTFがデフォルトで有効になっているディストリビューションの一覧は、このドキュメントの後半で説明します。
現在のカーネルがBTFをサポートしていない場合、コネクタはカーネルヘッダファイルをインストールする必要があります。コネクタがこれらの必要なファイルを見つけられない場合、エラー11が発生します。この問題を解決するには、「見つからないカーネルヘッダーのインストール」で説明されている手順に従います。
BTF対応ディストリビューション
これらのディストリビューションの最新のカーネルバージョンでは、CONFIG_DEBUG_INFO_BTF
がデフォルトで有効になっています。
- Centos/RHEL 8.2以降
- Ubuntu 20.04以降
- Oracle Linux 8.5以降
- Debian 11とそれ以降
- Alma Linux 8.3以降
- Rocky Linux 8.3以降
- SUSE Enterprise 15 SP4/openSUSE Leap 15.4以降
BTF対応カーネルへのアップグレード
より新しいカーネルバージョンでBTFをサポートするディストリビューションを使用している場合は、障害11を解決するためにカーネルを更新することをお勧めします。
カーネルのアップデートに進む前に、まずLinuxコネクタをバージョン1.25.0以降にアップグレードして、コネクタがBTFをサポートしていることを確認してください。
RPMベースディストリビューション
このセクションは、次のものに適用されます。
- アルマLinux
- Amazon Linux
- CentOS Linuxの場合
- Oracle Linux Red Hat Compatible Kernel(RHCK)
- Red Hat Enterprise Linux(日本での対応時期未定)
- ロッキーLinux
最新のカーネル・バージョンにアップグレードするには:
- カーネルに利用可能なアップデートがあるかどうかを確認します。
yum check-update
出力にkernel.x86_64
が表示されている場合は、カーネルのアップグレードが利用可能です。
- カーネルパッケージを更新します。
sudo yum update kernel
- システムを再起動します。
sudo reboot
- 新しいカーネルがBTFをサポートし、障害11がコネクタによってクリアされることを確認します。
Oracle Linux Unbreakable Enterprise Kernel(UEK)
最新のカーネル・バージョンにアップグレードするには:
- カーネルに利用可能なアップデートがあるかどうかを確認します。
yum check-update
出力にkernel-uek.x86_64
と表示されている場合は、カーネルのアップグレードが利用可能です。
- カーネルパッケージを更新します。
sudo yum update kernel-uek
- システムを再起動します。
sudo reboot
- 新しいカーネルがBTFをサポートし、障害11がコネクタによってクリアされることを確認します。
SUSE Linux EnterpriseおよびopenSUSE Leap
最新のカーネル・バージョンにアップグレードするには:
- 現在のカーネルのバージョンを確認してください。
uname -r
- 使用可能な
kernel-default
パッケージを一覧表示します。 zypper search -s --match-exact kernel-default
出力は次のようになります。
| kernel-default | package |
|
|
ステップ1で特定した、現在のカーネルのバージョンよりも新しいバージョン
を探します。
- 次のコマンドを使用して、新しいバージョンの
kernel-default
をインストールします。 sudo zypper install kernel-default=
- システムを再起動します。
sudo reboot
- 新しいカーネルがBTFをサポートし、障害11がコネクタによってクリアされることを確認します。
Debianベースのディストリビューション
最新のカーネル・バージョンにアップグレードするには:
- 最新のパッケージリストを取得します。
sudo apt update
- 最新のパッケージをインストールします。
sudo apt upgrade
- システムを再起動します。
sudo reboot
- 新しいカーネルがBTFをサポートし、障害11がコネクタによってクリアされることを確認します。
不足しているカーネルヘッダーのインストール
不足しているカーネルヘッダーをインストールする前に、システムをBTF対応バージョンにアップグレードしてみてください。これで障害11が解決しない場合、またはディストリビューションが最新バージョンのBTFをまだサポートしていない場合は、不足しているカーネルヘッダのインストールを続けてください。
RPMベースディストリビューション
このセクションは、次のものに適用されます。
- アルマLinux
- Amazon Linux
- CentOS Linuxの場合
- Oracle Linux Red Hat Compatible Kernel(RHCK)
- Red Hat Enterprise Linux(日本での対応時期未定)
- ロッキーLinux
確認
RPMベースのディストリビューションでは、現在稼働中のカーネルにkernel-devel
パッケージをインストールする必要があります。現在実行中のカーネルにkernel-devel
パッケージがインストールされているかどうかを確認するには、次のコマンドを実行します。
rpm -qa | grep kernel-devel-$(uname -r)
何も結果が得られない場合、必要なkernel-devel
パッケージが見つからないため、インストールする必要があります。
正しいkernel-
develpackageがインストールされていて、コネクタが引き続きfault 11を発生させている場合、必要なファイルの一部が改ざんされている可能性があります。このコマンドは、変更されたファイルや欠落しているファイルがあるかどうかをチェックします。
rpm --verify --nomtime --noghost kernel-default-devel
不足しているファイルや変更されているファイルがある場合は、必要なファイルを確実に使用できるようにkernel-
develpackageをアンインストールしてから再インストールする必要があります。このコマンドは、すべてのパッケージファイルが変更されずに残っている場合には出力しません。
解決方法
必要なkernel-devel
パッケージをインストールするには、次のコマンドを実行します。
sudo dnf install -y kernel-devel-$(uname -r)
再検証。障害11は、約1分後にコネクタによってクリアされます。
Oracle Linux Unbreakable Enterprise Kernel(UEK)
確認
Oracle Linux UEKでは、現在稼働中のカーネルにkernel-uek-devel
パッケージをインストールする必要があります。現在実行中のカーネルにkernel-uek-devel
パッケージがインストールされているかどうかを確認するには、次のコマンドを実行します。
rpm -qa | grep kernel-uek-devel-$(uname -r)
何も結果が得られない場合、必要なkernel-uek-devel
パッケージが見つからないため、インストールする必要があります。
解決方法
必要なkernel-uek-devel
パッケージをインストールするには、次のコマンドを実行します。
sudo dnf install -y kernel-uek-devel-$(uname -r)
再検証。障害11は、約1分後にコネクタによってクリアされます。
SUSE Linux EnterpriseおよびopenSUSE Leap
確認
SUSEおよびopenSUSEでは、現在稼働中のカーネルにkernel-default-devel
パッケージをインストールする必要があります。現在稼働中のカーネルにkernel-default-devel
パッケージがインストールされているかどうかを確認するには、次のコマンドを実行します。
zypper search -si kernel-default-devel | grep $(uname -r | sed "s/-default//")
何も結果が得られない場合、必要なkernel-default-devel
パッケージが見つからないため、インストールする必要があります。
解決方法
カーネルヘッダーのインストール
- 使用しているカーネルバージョンに適した
kernel-default-devel
パッケージをインストールできるかどうかを確認するには、次のコマンドを実行します。 zypper search -s kernel-default-devel | grep $(uname -r | sed "s/-default//")
出力には次の構文が含まれます。
| kernel-default-devel |
|
|
|
同様の出力が表示された場合は、出力で指定されたバージョン
をメモして、ステップ2に進みます。それ以外の場合は、このセクションをスキップし、代わりにカーネルを更新し、一致するカーネルヘッダーをインストールする手順を使用します。
- 次のコマンドを使用して
kernel-default-devel
パッケージをインストールします。<version>
の部分は、前のステップで特定した使用可能なバージョンに置き換えます。 sudo zypper install --oldpackage kernel-default-devel=
kernel-default-devel
パッケージがインストールされていることを確認します。障害11は、約1分後にコネクタによってクリアされます。
カーネルの更新と一致するカーネルヘッダーのインストール
必要なkernel-default-devel
パッケージが利用できない場合は、カーネルをサポートされているバージョンに更新し、一致するカーネルヘッダーをインストールします。
- 次のコマンドを使用して、使用可能な
kernel-default
パッケージとkernel-default-devel
パッケージをリストします。 zypper search -s --match-exact kernel-default kernel-default-devel
kernel-default
とkernel-default-devel
パッケージのバージョンが一致するものを探します。例:
| kernel-default | package |
|
|
| kernel-default-devel | package |
|
|
出力で指定されたnew-version
をメモします。
注:アップグレード先の新しいカーネルが見つからない場合は、新しい配布リリースバージョンにアップグレードする必要があります。
- 次のコマンドを使用して、新しいバージョンの
kernel-default
とkernel-default-devel
をインストールします。 sudo zypper install kernel-default=
kernel-default-devel=
- システムを再起動します。
sudo reboot
- 再検証。障害11はコネクタによってクリアされます。
Debianベースのディストリビューション
確認
Debianベースのディストリビューションでは、現在稼働中のカーネルにlinux-headers
パッケージをインストールする必要があります。現在稼働中のカーネルにlinux-headers
パッケージがインストールされているかどうかを調べるには、次のコマンドを実行します。
apt list linux-headers-$(uname -r)
結果が得られない場合、必要なlinux-headers
パッケージが見つからないため、インストールする必要があります。
解決方法
必要なlinux-headers
パッケージをインストールするには、次のコマンドを実行します。
sudo apt install linux-headers-$(uname -r)
再検証。障害11は、約1分後にコネクタによってクリアされます。