8 KLPによるライブカーネルパッチ #
このドキュメントでは、KLP (カーネルライブパッチ)適用テクノロジーの基本原理について説明するとともに、SLE Live Patchingサービスの使用ガイドラインを提供します。
KLPでは、再起動せずにLinuxカーネルに最新のセキュリティアップデートを適用できます。これにより、ミッションクリティカルなシステムにとって特に重要なシステムのアップタイムと可用性が最大化されます。
このドキュメントで提供される情報は、AMD64/Intel 64、POWER、およびIBM Zアーキテクチャに関連しています。KLPはXenハイパーバイザーでサポートされています。
8.1 カーネルライブパッチの利点 #
KLPにはいくつかの利点があります。
多数のサーバを自動的に最新状態に保つことは、組織が特定のコンプライアンス認定を取得または維持するために不可欠です。KLPは、コストのかかる保守ウィンドウの必要性を削減しながら、コンプライアンスの達成に役立ちます。
サービスレベル契約を締結している企業は、特定レベルのシステムのアクセシビリティとアップタイムを保証する必要があります。ライブパッチにより、ダウンタイムを発生させることなくシステムにパッチを適用できます。
KLPは標準のシステムアップデートメカニズムの一部であるため、専門的なトレーニングや複雑な保守ルーチンの導入の必要はありません。
8.2 カーネルライブパッチの概要 #
カーネルライブパッチは、メインのカーネルパッケージとは別のコードが変更されたパッケージとして提供されます。ライブパッチは累積的であるため、最新のパッチには、カーネルパッケージの以前のものからのすべての修正が含まれています。各カーネルライブパッケージは発行された正確なカーネルリビジョンに関連付けられています。ライブパッチパッケージバージョン番号は修正が追加されるたびに増加します。
ライブパッチには重要な修正のみが含まれ、再起動が必要な通常のカーネルアップデートに置き換わるものではありません。ライブパッチは、適切なカーネルアップデートおよび再起動が実行されるまでカーネルを保護する一時的な対策として検討してください。
次の図は、ライブパッチとカーネルアップデートの全体的な関係を示しています。現在アクティブなライブパッチによって対処されるCVEと不具合レポートのリストは、klp -v patches
コマンドを使用して表示できます。
ライブパッチとともに複数のバージョンのカーネルパッケージをインストールすることができます。これらのパッケージは競合しません。実行中のカーネル用にライブパッチとともにアップデートされたカーネルパッケージをインストールできます。この場合、システムを再起動するように求められる場合があります。SLE Live Patchingサブスクリプションを持つユーザは、実行中のカーネルのライブパッチアップデートがある限り、テクニカルサポートを受ける資格があります(8.5.1項 「ライブパッチの有効期限を確認する」を参照)。
KLPを有効にすると、すべてのカーネルアップデートにライブパッチパッケージが付属します。このライブパッチには修正は含まれておらず、対応するカーネルの将来のライブパッチのシードとして機能します。これらの空のシードパッチは初期パッチ
と呼ばれます。
8.2.1 カーネルライブパッチのスコープ #
SLE Live Patchingのスコープには、SUSE Common Vulnerability Scoring System (CVSS、SUSE CVSSはCVSS v3.0システムに基づく)レベル7以上の脆弱性の修正と、システムの安定性またはデータ破損に関連するバグ修正が含まれます。ただし、指定されたカテゴリに該当するすべての修正のライブパッチを作成することは技術的に不可能な場合があります。したがって、SUSEではカーネルライブパッチの作成が技術的な理由で不可能な状況で修正をスキップする権利を留保します。現在、対象となる修正の95%以上がライブパッチとしてリリースされています。CVSS (SUSE CVSSレーティングのベース)の詳細については、「Common Vulnerability Scoring System SIG」を参照してください。
8.2.2 カーネルライブパッチの制限 #
KLPには、関数の置換と、相互に依存する関数セットの置換の適切な処理が含まれます。これは、古いコードへの呼び出しを別のメモリ位置にある更新されたコードにリダイレクトすることによって行われます。データ構造の変更は、データがそのまま残り、拡張または再解釈できないため、状況をより複雑にします。データ構造の間接的な変更を許可する技術はありますが、一部の修正はライブパッチに変換できません。この状況では、システムの再起動が、修正を適用する唯一の方法です。
8.3 YaSTを使用したカーネルライブパッチの有効化 #
ご使用のシステムでKLPを有効にするには、アクティブなSLESおよびSLE Live Patchingサブスクリプションが必要です。サブスクリプションのステータスを確認し、SLE Live Patchingサブスクリプションの登録コードを取得するには、SUSE Customer Centerを参照してください。
カーネルライブパッチをシステムで有効にするには、次の手順に従います。
yast2 registration
コマンドを実行して、 をクリックします。入手可能な拡張機能のリストで
を選択し、 をクリックします。ライセンス条項を確認し、
をクリックします。SLE Live Patchingの登録コードを入力し、
をクリックします。Live Patching
とSLE Live Patching Lifecycle Data
パターンが、依存関係を満たすための追加のパッケージとともにインストール用に自動的に選択される必要があります。
8.4 コマンドラインからのカーネルライブパッチの有効化 #
カーネルライブパッチを有効にするには、アクティブなSLESおよびSLES Live Patchingサブスクリプションが必要です。サブスクリプションのステータスを確認し、SLES Live Patchingサブスクリプションの登録コードを取得するには、SUSE Customer Centerを参照してください。
sudo SUSEConnect --list-extensions
を実行します。SLES Live Patchingの正確なアクティベーションコマンドに注意します。コマンド出力の例(省略形):$ SUSEConnect --list-extensions ... SUSE Linux Enterprise Live Patching 15 SP3 x86_64 Activate with: SUSEConnect -p sle-module-live-patching/15.3/x86_64 \ -r ADDITIONAL REGCODE
取得したコマンドに続いて
-r LIVE_PATCHING_REGISTRATION_CODE
を使用してSLES Live Patchingを有効にします。例:SUSEConnect -p sle-module-live-patching/15.3/x86_64 \ -r LIVE_PATCHING_REGISTRATION_CODE
コマンド
zypper install -t pattern lp_sles
を使用して必要なパッケージと依存関係をインストールします。
この時点で、システムはすでにライブパッチが適用されています。
プロセスがバックグラウンドでどのように機能するかを次に示します。パッケージインストールシステムが、ライブパッチを適用できるカーネルがインストールされていること、およびソフトウェアチャネルにそのカーネルのライブパッチがあることを検出すると、システムはインストール用のライブパッチを選択します。カーネルはパッケージインストールの一部としてライブパッチ修復を受信します。製品インストールが完了する前でも、カーネルにライブパッチが適用されます。
8.5 カーネルライブパッチの適用 #
カーネルライブパッチは、定期的なシステムアップデートの一部としてインストールされます。ただし、認識すべきいくつかのことがあります。
kernel-livepatch-*パッケージが実行中のカーネル用にインストールされている場合、カーネルにライブパッチが適用されます。コマンド
zypper se --details kernel-livepatch-*
を使用して、システムにインストールされているカーネルライブパッチパッケージを確認できます。kernel-defaultパッケージがインストールされる場合、アップデートマネージャはシステムを再起動するように求めます。このメッセージが表示されないようにするには、パッチ適用操作からカーネルアップデートを除外できます。これは、Zypperを使用してパッケージロックを追加することで実行できます。SUSE Managerはチャネルコンテンツをフィルタすることもできます(Live Patching with SUSE Manager (SUSE Managerによるライブパッチ適用)を参照)。
klp status
コマンドを使用してパッチ適用ステータスを確認できます。インストール済みのパッチを調べるには、klp -v patches
コマンドを実行します。システムに複数のカーネルパッケージがインストールされている可能性がありますが、任意の時点で実行されるのはそれらの1つのみであることに注意してください。同様に、複数のライブパッチパッケージがインストールされる場合がありますが、カーネルにロードされるライブパッチは1つのみです。
アクティブなライブパッチは、
initrd
に含まれています。これは、予期しない再起動が発生した場合に、ライブパッチ修正が適用された状態でシステムが起動するため、再びパッチを適用する必要がないことを意味します。
8.5.1 ライブパッチの有効期限を確認する #
lifecycle-data-sle-module-live-patchingがインストールされていることを確認し、zypper lifecycle
コマンドを実行します。出力のPackage end of support if different from product
セクションにライブパッチの有効期限が表示されるはずです。
すべてのライブパッチは基盤となるカーネルパッケージのリリースから1年間、アップデートを受け取ります。「Maintained kernels, patch updates and lifecyclepage」ページでは、製品の拡張機能をインストールすることなく、実行中のカーネルバージョンに基づいて有効期限を確認できます。
8.6 カーネルライブパッチの問題のトラブルシューティング #
8.6.1 手動によるパッチのダウングレード #
最新のライブパッチに問題がある場合は、現在インストールされているライブパッチを以前のバージョンにダウングレードできます。システムで問題が発生する前に、パッチのダウングレードを実行することをお勧めします。システムログにカーネル警告またはカーネルエラートレースが含まれているシステムは、パッチのダウングレード手順に適していない場合があることに注意してください。システムがパッチダウングレードの要件を満たしているかどうか不明な場合は、SUSEテクニカルサポートに連絡してください。
klp -v patches
コマンドを使用して実行中のライブパッチを特定します。RPM:
で開始される行に現在実行中のパッチが表示されます。例:RPM: kernel-livepatch-5_3_18-24_29-default-2-2.1.x86_64
前の例の
5_3_18-24_29-default
は、実行中のカーネルの正確なバージョンを示しています。コマンド
zypper search -s kernel-livepatch-RUNNING_KERNEL_VERSION-default
を使用して、以前のバージョンのパッチを検索します。このコマンドは、使用可能なパッケージバージョンのリストを返します。新しいライブパッチパッケージがリリースされるたびに、バージョン番号が1つずつ増加することに注意してください。現在のリリースより1つ前のバージョン番号を選択してください。コマンド
zypper in --oldpackage kernel-livepatch-RUNNING_KERNEL_VERSION-default=DESIRED_VERSION
を使用して目的のバージョンをインストールします。