「カーネルライブパッチ」の版間の差分
細 (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 は以下の手順で行います:
- 実行中のカーネルのソースツリーを取得。
- カーネルに適用するパッチを用意。
- ツールを使ってパッチを変換・ロード。
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 ページを参照してください。