「カーネルライブパッチ」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Kusakata がページ「Ksplice」を「カーネルライブパッチ」に移動しました)
(同期)
1行目: 1行目:
 
[[Category:カーネル]]
 
[[Category:カーネル]]
  +
[[en:Kernel live patching]]
[[Category:セキュリティ]]
 
  +
{{Related articles start}}
[[en:Ksplice]]
 
  +
{{Related|カーネルモジュール}}
  +
{{Related|カーネル/コンパイル}}
  +
{{Related|Kexec}}
  +
{{Related articles end}}
  +
  +
カーネルライブパッチ (Kernel Live Patching, KLP) を使うことでシステムを再起動することなくカーネル空間に即座に修正を適用することができます。バージョン 4.0 から、ライブパッチに関連するパッチが上流にマージされたことで [https://lwn.net/Articles/619390/][https://lwn.net/Articles/622936/][https://lwn.net/Articles/634649/]、誰でもライブパッチ機能を使えるようになりました。一般的に、KLP は以下の手順で行います:
  +
# 実行中のカーネルのソースツリーを取得。
  +
# カーネルに適用するパッチを用意。
  +
# ツールを使ってパッチを変換・ロード。
  +
  +
KLP が公式にサポートされる前から、ライブパッチ機能を提供するプロジェクトはいくつか存在していました。Oracle の [[#ksplice|ksplice]] や SuSE の [[#kGraft|kGraft]]、RedHat の [[#kpatch|kpatch]] などです。それぞれ異なる方法で KLP 機能を実装しています。メインストリームカーネルに取り込まれたパッチセットは kpatch と kGraft 由来のものです。
  +
  +
== kpatch ==
  +
  +
=== インストール ===
  +
  +
カーネルとして {{AUR|linux-kpatch}} を、ユーザースペースツールとして {{AUR|kpatch-git}} をインストールしてください。
  +
  +
{{ic|CONFIG_LIVEPATCH}}, {{ic|CONFIG_DEBUG_INFO}}, {{ic|CONFIG_KALLSYMS}} を有効にすることで kpatch が使用できるカーネルを手動でビルドすることも可能です。
  +
  +
{{Note|カーネルをインストールしたら必ずブートローダーを更新してください。}}
  +
  +
=== 使用方法 ===
  +
  +
パッケージのビルドが完了したら再起動後に以下のコマンドを実行:
  +
  +
$ export ROOTDIR=some/dir/aur/linux-kpatch/src/linux-x-y
  +
$ cd $ROOTDIR
  +
  +
作業ディレクトリでカーネルに修正を加えて ''some.patch'' パッチを作成したら (標準カーネルの ''x.y'' バージョンではなく {{ic|makepkg -o}} の後にソースツリーに対してパッチを作成します)、kpatch ユーティリティを起動:
  +
  +
$ kpatch-build -s $(pwd) -t $(pwd)/vmlinux ''some.patch''
  +
  +
上記のコマンドはオリジナルのカーネルとパッチ済みのカーネルの両方をビルドするため、完了するまでしばらく時間がかかります。ビルドが完了すると同じディレクトリに ''kpatch-some.ko'' モジュールが出来ているはずです。そうしたら以下のコマンドでパッチを適用できます:
  +
  +
# insmod ''kpatch-some.ko''
  +
  +
詳しくは man ページや [https://github.com/dynup/kpatch github リポジトリ] を参照してください。
  +
  +
== kGraft ==
  +
  +
KGraft は Arch 環境ではテストされておらず、サポートされていません。
  +
  +
== ksplice ==
  +
 
Ksplice はオペレーティングシステムを再起動することなく、システム管理者が実行中のカーネルにセキュリティパッチを適用できるようにする Linux カーネルのオープンソース拡張です。2011年から Ksplice は Oracle に取得され、Oracle のプレミアムサポート下でのみ利用できる状態です。
 
Ksplice はオペレーティングシステムを再起動することなく、システム管理者が実行中のカーネルにセキュリティパッチを適用できるようにする Linux カーネルのオープンソース拡張です。2011年から Ksplice は Oracle に取得され、Oracle のプレミアムサポート下でのみ利用できる状態です。
   
== インストール ==
+
=== インストール ===
  +
 
[[Arch User Repository]] から {{AUR|ksplice-git}}{{Broken package link|{{aur-mirror|ksplice-git}}}} パッケージをインストールしてください。
 
[[Arch User Repository]] から {{AUR|ksplice-git}}{{Broken package link|{{aur-mirror|ksplice-git}}}} パッケージをインストールしてください。
   
27行目: 73行目:
   
 
# ksplice-apply ksplice-*.tar.gz
 
# ksplice-apply ksplice-*.tar.gz
  +
 
{{ic|ksplice-apply}}, {{ic|ksplice-create}}, {{ic|ksplice-view}}, {{ic|ksplice-undo}} の man ページを参照してください。
 
{{ic|ksplice-apply}}, {{ic|ksplice-create}}, {{ic|ksplice-view}}, {{ic|ksplice-undo}} の man ページを参照してください。
  +
 
== 参照 ==
 
== 参照 ==
  +
*[https://github.com/jirislaby/ksplice Ksplice GitHub]
 
  +
* [https://www.kernel.org/doc/Documentation/livepatch/livepatch.txt ライブパッチのカーネルドキュメント]
*[https://en.wikipedia.org/wiki/Ksplice Ksplice on Wikipedia]
 
  +
* [[wikipedia:Kpatch]]
*[http://www.ksplice.com/ Ksplice Uptrack の公式ウェブサイト] (proprietary, owned by Oracle)
 
  +
* [[wikipedia:KGraft]]
*[http://cormander.com/2011/08/how-to-use-the-ksplice-raw-utilities/ How to use the Ksplice raw utilities]
 
  +
* [[wikipedia:Ksplice]]

2017年7月31日 (月) 23:30時点における版

関連記事

カーネルライブパッチ (Kernel Live Patching, KLP) を使うことでシステムを再起動することなくカーネル空間に即座に修正を適用することができます。バージョン 4.0 から、ライブパッチに関連するパッチが上流にマージされたことで [1][2][3]、誰でもライブパッチ機能を使えるようになりました。一般的に、KLP は以下の手順で行います:

  1. 実行中のカーネルのソースツリーを取得。
  2. カーネルに適用するパッチを用意。
  3. ツールを使ってパッチを変換・ロード。

KLP が公式にサポートされる前から、ライブパッチ機能を提供するプロジェクトはいくつか存在していました。Oracle の ksplice や SuSE の kGraft、RedHat の kpatch などです。それぞれ異なる方法で KLP 機能を実装しています。メインストリームカーネルに取り込まれたパッチセットは kpatch と kGraft 由来のものです。

kpatch

インストール

カーネルとして linux-kpatchAUR を、ユーザースペースツールとして kpatch-gitAUR をインストールしてください。

CONFIG_LIVEPATCH, CONFIG_DEBUG_INFO, CONFIG_KALLSYMS を有効にすることで kpatch が使用できるカーネルを手動でビルドすることも可能です。

ノート: カーネルをインストールしたら必ずブートローダーを更新してください。

使用方法

パッケージのビルドが完了したら再起動後に以下のコマンドを実行:

$ export ROOTDIR=some/dir/aur/linux-kpatch/src/linux-x-y
$ cd $ROOTDIR

作業ディレクトリでカーネルに修正を加えて some.patch パッチを作成したら (標準カーネルの x.y バージョンではなく makepkg -o の後にソースツリーに対してパッチを作成します)、kpatch ユーティリティを起動:

$ kpatch-build -s $(pwd) -t $(pwd)/vmlinux some.patch

上記のコマンドはオリジナルのカーネルとパッチ済みのカーネルの両方をビルドするため、完了するまでしばらく時間がかかります。ビルドが完了すると同じディレクトリに kpatch-some.ko モジュールが出来ているはずです。そうしたら以下のコマンドでパッチを適用できます:

# insmod kpatch-some.ko

詳しくは man ページや github リポジトリ を参照してください。

kGraft

KGraft は Arch 環境ではテストされておらず、サポートされていません。

ksplice

Ksplice はオペレーティングシステムを再起動することなく、システム管理者が実行中のカーネルにセキュリティパッチを適用できるようにする Linux カーネルのオープンソース拡張です。2011年から Ksplice は Oracle に取得され、Oracle のプレミアムサポート下でのみ利用できる状態です。

インストール

Arch User Repository から ksplice-gitAUR[リンク切れ: アーカイブ: aur-mirror] パッケージをインストールしてください。

使用方法

まず、使用しているカーネルのソースツリーと、以前にカーネルをビルドした時のファイルが必要です: System.map.config

前のビルドで使用した System.map が存在しない場合は、/proc/kallsyms をコピーして使うことができます。kernel.kptr_restrict カーネルパラメータが有効になっている場合は、必ず root でコピーしてください。

この例では --diffext オプションを利用して、新旧ソースファイルの差異からパッチを作成します。

カーネルのソースツリーに ksplice ディレクトリを作成して、前のビルドの System.map をコピーして、.config をツリーにコピーしてください (ソースツリーに存在しない場合):

# mkdir -p src/ksplice
# cp System.map src/ksplice
# cp .config src/

ksplice パッチを作成してカーネルがリビルドされるのを待ちます。new で終わるファイルが全て ksplice のパッチに組み込まれます。例えば、C のソースファイルなら、diffext が直接追加されて .cnew になります。

# ksplice-create --diffext=new src/

新しく生成したパッチを実行中のカーネルに適用:

# ksplice-apply ksplice-*.tar.gz

ksplice-apply, ksplice-create, ksplice-view, ksplice-undo の man ページを参照してください。

参照