GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu20.04LTSでのLinuxカーネルライブパッチ

Linuxカーネルにライブパッチを適用するという約束はどうなりましたか?この記事では、その歴史、問題、およびUbuntu Focus Fossa(20.04 LTS)でそれを行うための最も安価で簡単な方法について説明します。

はじめに

「ライブパッチ」とは、実行中のシステムを停止せずにプログラムを更新する行為です。最初ははんだとワイヤーで、後にはさみと接着剤で行われました。これは新しいことではありません。今日、Linuxカーネルへのライブパッチ適用ははるかに粘着性が低くなっています。

この記事では、それが何であるか、それがどのように機能するか(非技術的な用語で)、そしてそれがどこから来たのかを説明します。最後に、CanonicalLivepatchServiceとKernelCareを使用してUbuntu20.04LTS(Focal Fossa)のカーネルセキュリティ更新を自動化する方法を示します。

ライブパッチとは何ですか?

ソフトウェアでは、パッチは修正コードの小さな部分です。パッチ適用とは、プログラム全体の動作や仕様を損なうことなく、プログラムのごく一部を修復または改善することです。ライブ(またはホット)パッチとは、実行中のプログラムを停止せずに変更することを意味します。

移動中の車に閉じ込められ、電球を修理する必要があると想像してみてください。悪くはないですが、内側にあると、外側は少しトリッキーだと言うかもしれません。ここで、カムシャフトの修理、ピストンロッドの交換、またはひびの入ったブロックのシールを想像してみてください。

これは、ライブパッチがLinuxカーネルで実行しようとしていることと似ています。動いているものの一部を、変更したり壊したりせずに修復しようとしていますが、最も重要なのは、停止せずに修復することです。カーネルは、更新を適用するためにシャットダウンと再起動が必要なLinuxシステムの唯一の部分です。ベンダーがカーネルアップデートをリリースするとき、システム管理者はサーバーの再起動をスケジュールする以外に選択肢はありません。

再起動の何がそんなに悪いのですか?

再起動とは、システムを使用しているか、システムを担当しているかによって、人によって意味が異なります。多くのシステム管理者は、定期的な再起動を、定期的な腸のように健康の兆候と見なしています。多くの人がそうしないのと同じように、たとえば、これらのようなアプリケーションなど、投資して収益を上げているアプリケーションの中断に抵抗します。

  • 多くのタイムゾーンでビジーでアクティブなユーザーがいるウェブサーバー
  • オンラインマルチプレイヤーゲーム
  • ペイパービューのライブまたは録画されたビデオストリーミング
  • 暗号通貨マイニング
  • リモートの24時間年中無休のビデオ監視および録画サービス

私にとって最も関連性のある理由は、システムが後で同じにならないこと、そして重要な(金儲けの)アプリケーションが起動しないことへの恐れです。多くのシステム管理者がカーネルの更新、さらには最も重要な種類のセキュリティ更新を延期するのは、これであり、大暴れするユーザーのビジョンではないと思います。

(ここでは、更新についてのみ話します 。カーネルのアップグレード 何か他のものです。アップグレードは完全に新しいカーネルです。パッチはカーネルの一部に対する更新であり、通常、セキュリティやその他の幅広い影響があるために待つことができないバグ修正です。)

Linuxベンダーがカーネルパッチをリリースするとき、それは通常、セキュリティの問題を修正することです。関連するアドバイザリノートには、「できるだけ早くインストールしてください」のようなものが表示されます。同じページに「インストールしないと、パッチを適用したエクスプロイトに対して脆弱になります。約。良い一日を。」

このように無茶苦茶に書かれたメモは、ライブパッチの出現を推進するジレンマを浮き彫りにします。ライブパッチは、ロックとハードプレイスの間のパラダイスアイランドになることを約束します。ライブパッチは、ダウンタイムに影響を与えたり、サービスに影響を与えたりすることなく、サーバーを安全かつ最新のセキュリティレベルに保つのに役立つことを約束します。

パラダイス島?キャッチは何ですか?

ライブパッチソフトウェアのソースコードは無料で入手できますが、パッチは入手できません。あなたがあなた自身のパッチを書かなければならないとき、ライブパッチングの甘い約束は酸っぱいです。血圧は管理を減らすことで緩和されますが、複雑なカーネルコードを処理することで再び上昇します。

独自のパッチを作成することは技術的には可能ですが、多くの作業と多くの専門知識が必要です。そして、それは危険です–ひどく書かれたパッチは、システムをクラッシュさせる可能性があります。 (kpatch githubページのこのメッセージは、スチームハンマーの操作マニュアルからのメッセージのように読めます:「警告:注意して使用してください!カーネルがクラッシュし、自発的に再起動し、データが失われる可能性があります!」)

Linuxベンダーは、ライブパッチを適切に実行することがいかに難しいかを知っており、この事実を利用するために有益なサービスを開発してきました。各主要なLinuxディストリビューションには、無料でインストールできますが、使用できないライブパッチアプローチがあります。アイデア全体が役に立たないパッチは、代償を払わなければなりません。

それでも、ライブカーネルパッチの利点は非常に魅力的であるため、これらのビジネスモデルはLinuxの主に無料のオープンソースソフトウェアエコシステムで繁栄します。私にとって、これは、このテクノロジーがLinuxベースのシステムの将来において重要で重要な役割を果たしていることを示しています。

ライブパッチの仕組み

まだその架空の車に閉じ込められており、(願わくば)空の段ボール箱の架空の山に向かって下り坂で雷が鳴っています。ブレーキをどのように修正しますか?作業を行うための一時的なローリングジャックを作成しますか? 3つの車輪に寄りかかって、1つが停止するのを待ち、それを外して、完了するまで繰り返しますか?

Linuxカーネルプログラマーは、ライブパッチの問題に取り組む際に同じ種類の考え方を使用したに違いありません。同じ種類の概念的な装置(サスペンド、スワッピング、一時的なサポート構造の使用)がソリューションで機能していることを感じます。上記の私の大まかなブレーキ変更の例えは、ライブパッチソフトウェアベンダーによって実装された2つの相反する戦略を示しています。

  • すべてを停止し、すべての修正を一度に実行します。
  • 個々のコンポーネントが停止するのを待ってから、それらを交換します。完了するまで繰り返します。

この部門では、各ベンダーが同じ問題を解決するためのさまざまなアプローチを考え出した理由を説明します。ただし、彼らが共有しているのは、Linuxのロード可能なカーネルモジュールフレームワークの使用です。パッチ適用プロセスを調整および実装するソフトウェアは、Linuxカーネルモジュールです。つまり、互換性のあるカーネルにパッチ機能を追加するのは簡単で、削除するのも同じくらい簡単です。

夢中になってしまう前に、注意点を述べておかなければなりません。

実行中のシステムに適用できるソフトウェアパッチの範囲と規模には制限があります。一つには、カスタマイズされた、最適化された、または非標準のカーネルは、カーネルにライブパッチを適用することを困難または不可能にします。もう1つは、ライブパッチでは、パッチ間でデータやメモリを再マッピングできません。関数定義のみを変更できます。

これらの欠点は、KspliceがLinuxライブパッチの分野で最初になることを妨げませんでした。バイナリパッチを作成する元の古いソースコードと新しいソースコードを比較することで機能します。システムをフリーズし、変更が必要な関数を特定し、ヘッダーを編集します。呼び出されると、関数は新しいバージョンに転送されます。パッチが適切に記述されている場合、制御は何も起こらなかったかのように進行します。

地震イベント(次のセクションで説明)では、Red HatのKpatchとSUSEのKgraftが、ライブパッチの主要な問題について独自の解釈でシーンに参加しました。

Kpatchは、新旧のソースコードを比較してパッチを作成します。 Kspliceと同様に、カーネルftraceフレームワークを使用して関数呼び出しをリダイレクトし、変更された関数を一度に切り替えることで機能します。

Kgraftの動作は異なります。これは、古い関数と新しい関数の2つの同時セットを使用し、オーケストレーターモジュールが、実行に到達した場所に応じて関数をリダイレクトするタイミングを決定します。関数内のどこにプログラムポインタがあるかを一度に予測することは不可能であるため、遷移は瞬間的ではなく段階的です。

ライブパッチの起源

誰も気付かないうちにソフトウェアを修正するというアイデアは、絶えず変化する人間の努力のモノリスであるLinuxカーネルにどのようにして入り込んだのでしょうか。

コンセプトはプログラム可能な計算の初期の時代にまでさかのぼりますが、私たちの目的のために、ヒューレットパッカードが不足しているハードウェア機能を補うためにソフトウェアを動的に更新する方法の特許を取得した2001年にトレイルが始まります。 1年後、Microsoftは、システム(Windows)を中断することなく更新するためのアイデアを提示します。

どちらもLinuxについては言及していませんが、アプリケーションは幅広く、それぞれがコンピューター上で実行されているプロセスを中断することなく、コンピューター上のソフトウェアまたはハードウェアの問題を修正する方法を説明しています。 (アイデアが特に役立つと思われない場合は、MeltdownとSpectreの2つの単語でもう一度考えさせられます。)

2008年、Jeff Arnoldは、Linuxカーネルを再起動せずにパッチを適用するソフトウェアであるKspliceを発表しました。これは、Linux向けのこの種の最初のものです。そして、それに感謝するために、未知の名前のないハッカーがいます。

その理由を知るために、ジェフのMIT学生時代に戻りましょう。彼は、学生コミュニティのサーバーを管理するボランティアグループのメンバーです。サーバーの1つにセキュリティパッチが必要です。彼はユーザーをキックオフしたくないので、数日間スライドさせます。

それらの数日で、彼がそれを更新することができる前に、誰かがシステムをハッキングします。オンラインに戻す唯一の方法は、最初から完全に再インストールすることです。彼の同僚が気づいたとしましょう。彼らが苦しんでいないとしても、ジェフは学期の残りを学生の嘲笑の燃えがらにゆっくりと焙煎するのに費やしていると思います。

ストーリーが外典である場合は、それを寓話と見なします。ライブパッチは、利便性ではなくセキュリティの子であることを思い出させてください。そして、すべての良い寓話のように、ハッピーエンドがあります。

この事件により、ジェフはLinuxカーネルパッチを遅滞なく、中断することなくインストールする方法を研究するようになりました。彼はこの問題を2006年の修士論文のトピックにしています。このソリューションは、Kspliceと呼ばれるソフトウェアの形で提供されます。彼は同僚と一緒に、「Ksplice:AutomaticRebootlessKernelUpdates」というタイトルの論文を書いています。

ジェフと彼の学生の同僚3人は会社を設立し、2009年5月にMITの10万ドルの起業家精神コンペティション賞を受賞しました。彼らは2010年に商用サービスを開始します。もう1年後、すべてのソフトウェア開発者が夢見るようなカルマの閉鎖で、オラクルはKspliceIncを買収します。

Karmaは、この驚くほど便利な新しいユーティリティのユーザーや顧客の心からはほど遠いものです。彼らにとって、それは長くて疲れ果てた悪夢の連続の始まりです。オラクルはKspliceを完全に同化しており、サポート料がかかる独自のバージョンのLinuxの顧客のみがツールを使用しないようにしています。

この地震の衝撃により、SUSEとRed Hatは独自のソリューションを開発するようになり、他の人に意図やソリューションアーキテクチャを伝えることはありません。それらは2011年から2014年まで独立して機能し、互いに数週間以内に独自のアプローチをリリースします。そして2014年5月、Webホスティング分野でよく知られているLinuxバリアントのプロデューサーであるCloudLinuxは、KernelCareという名前で商用のLinuxカーネルライブパッチサービスをリリースしました。

同時に、ライブパッチ適用ABIがカーネルのメインラインに組み込まれ、Livepatchという名前で4.0リリースの日の目を見ることができます。 2016年10月、Ubuntuの作成者であるCanonicalは、恥ずかしがらずに流用された「Canonical Livepatch Service」という名前で、商用サービスの基盤として使用しています。 Canonicalは、最初に16.04 LTSでリリースし、次に14.04 LTSでリリースします。どちらも、コマンドラインでセットアップする必要があります。 18.04 LTSでは、より見やすく、使いやすく、Ubuntuデスクトップエクスペリエンスにうまく統合され、20.04LTSで利用できるようになりました。

実行方法:Ubuntu20.04LTSでのカーネルセキュリティ更新の自動化

それでは、実際の動作を確認してください。 Ubuntuには2つのライブパッチソリューションがあり、次の2つのセクションで説明します。

Canonical Livepatch Service(CLS)のインストール

CLSは、非営利の個人は最大3台まで無料です。登録が必要ですが、UbuntuOneアカウントをお持ちの場合は使用できます。 3台以上のマシンにインストールする場合は、エンタープライズスタイルのサポートサービス契約を購入する必要があります。

始める前に

  • システムが最新でバックアップされていることを確認してください。
  • LivepatchまたはUbuntuOneアカウントに登録します。
  • 20.04 LTSサーバーの場合、キーを取得してメモします。 (これはデスクトップ版では必要ありません。)

Ubuntu20.04LTSデスクトップへのLivepatchのインストール

Ubuntu 20.04 LTSデスクトップには、CLSをアクティブ化するためのGUI設定があります。インストール後のセットアップ中、または後で[ソフトウェアとアップデート]を開いて[Livepatch]タブに移動することで実行できます。

Ubuntuの新規インストールの場合

新規インストールを最初に再起動した後、「Ub​​untuの新機能」ダイアログウィンドウの2番目の画面に注意してください。これにより、Livepatchを設定できます。

  1. [Livepatchの設定...]をクリックします
  2. [Ubuntuシングルサインオンアカウント]画面で、LivepatchまたはUbuntuOneアカウントでログインします。
  3. テキストベースのインストールGUIを使用している場合は、[注目のサーバースナップ]でcanonical-livepatchを選択します。
既存のUbuntuインストールの場合
  1. [ソフトウェアとアップデート]を開き、[Livepatch]タブに移動します。
  2. サインインします。
  3. サインイン後、ログインを確認するポップアップが表示されたら、[続行]をクリックします。
  4. 以上です。ライブパッチはUbuntu20.04デスクトップに設定されています。


Livepatchを使用したUbuntu20.04のエラー

Ubuntu 20.04 Focus FossaでLivepatchを有効にすると、次のエラーが発生する場合があります。

Failed to enable Livepatch: cannot enable machine: this machine ID is already enabled with a different key or is non-unique. Either "sudo canonical-livepatch disable" on the other machine, or regenerate a unique /etc/machine-id on this machine with "sudo rm /etc/machine-id /var/lib/dbus/machine-id && sudo systemd-machine-id-setup" server response: Conflicting machine-id

エラーを修正するには、ターミナルで次のコマンドを入力します。

cp /etc/machine-id /etc/machine-id.original 
cp /var/lib/dbus/machine-id /var/lib/dbus/machine-id.original
nano /etc/machine-id (to remove the existing value)
systemd-machine-id-setup
> Initializing machine ID from D-Bus machine ID.
cat /etc/machine-id

Ubuntu20.04LTSサーバーへのLivepatchのインストール

これは、ウィンドウシステムがインストールされていない標準サーバーバージョンのコマンドラインアプローチです。 16.04 LTS、14.04 LTS、18.04LTSバージョンでも動作します。

ターミナルを開き、次の2つのコマンドを入力します。

sudo snap install canonical-livepatch
sudo canonical-livepatch enable <your key>
ヒント
  • 2番目のコマンドはマシントークンを返します。目的はなく、記録する必要もありません。
  • 登録するマシンを追跡します。登録を解除する前に追跡できなくなったり、マシンまたはVMを廃棄したりすると、3つの無料ライセンスのうちの1つが事実上破棄されます。 (ここにヘルプがあります。)
  • サーバーの登録を解除するには、次のコマンドを使用します:
sudo canonical-livepatch disable <your key>
  • サービスのステータスを確認するには、次のコマンドを使用します。
sudo canonical-livepatch status --verbose

KernelCareのインストール

KernelCareはコマンドライン設定を使用します。 GUIはありません。 CentOS、RHEL、Oracle Linux、Debian、Ubuntuなどの幅広いオペレーティングシステムをサポートします。また、古い2.6.32カーネルラインもサポートしています。

CLSとは対照的に、CLSは完全に自動化されており、4時間ごとにパッチのリリースをチェックし、利用可能な場合は監視なしでパッチをインストールします。その機能を上書きしたり、サーバーを固定日付のパッチに関連付けたりする必要がある場合は、これやその他のことを実行できるコマンドラインユーティリティ(kcarectl)があります。

KernelCareは非営利団体には無料ですが、残りの組織には30日間の無料トライアルがあります。 (Kspliceユーザーの場合は、2段階のKspliceからKernelCareへの移行スクリプトを試してみることをお勧めします。)

始める前に

  • システムが最新でバックアップされていることを確認してください。
  • ここから無料の試用版キーを入手してください。

Ubuntu20.04LTSデスクトップおよびサーバーへのKernelCareのインストール

ターミナルを開き、次の2つのコマンドを入力します。

sudo wget -qq -O - https://repo.cloudlinux.com/kernelcare/kernelcare_install.sh | bash
sudo /usr/bin/kcarectl --register KEY

これらのコマンドは、16.04 LTS、14.04 LTS、および18.04LTSバージョンでも機能します。

ヒント

  • サーバーの登録を解除するには、次のコマンドを使用します:
sudo kcarectl --unregister
  • サービスのステータスを確認するには、次のコマンドを使用します。
sudo kcarectl --info

結論

Linuxでのライブパッチは非常に便利で、長期間無料で利用できませんでした。

Ubuntuの20.04LTSリリースでは、Linuxカーネルのライブセキュリティパッチの利点をより簡単に享受でき、最大3つのホストが無料で利用できます。その後、毎年、サーバーごとの料金が適用されます。

多くの種類のLinuxを実行しているが、さまざまな製品を学びたい、またはさまざまなサポート契約に加入したくない場合は、KernelCareをご覧ください。年間サブスクリプションの場合は約5倍安く、柔軟な月額サブスクリプションを提供します。


Ubuntu
  1. Ubuntu /LinuxMintにLinuxKernel5.10LTSをインストールする方法

  2. Linuxカーネル5.13がリリースされました! Ubuntu21.04にインストールする方法

  3. UbuntuとLinuxMintにLinuxカーネル4.3をインストールする方法

  1. UbuntuでLinuxカーネルを更新する方法

  2. Ubuntu18.04LTSおよびLinuxMintにChromiumをインストールします

  3. Linuxカーネルライブパッチの歴史

  1. Ubuntu16.04にLinuxカーネル4.10.1をインストールする方法

  2. Linuxカーネル5.15をUbuntu20.04にインストールする方法

  3. Ubuntu20.04に最新のLinuxカーネル5.15をインストールする方法