第4回 Kspliceを使ったことありますか

今回はOracle Linuxの特徴の一つであるKspliceを紹介します。Kspliceは、OSを再起動することなくカーネルなどにパッチを適用できるライブパッチシステムです。10年以上の歴史があり、現時点でも他に追随を許さない優れた機能です。しかし、Oracle Linuxを使っていても、Kspliceを使っている人は少数派かもしれません。そこで今回はKspliceの理解が深まることを目指します。


Kspliceとは

Ksplice(ケースプライス)とは、Linuxカーネルや一部のユーザー空間ライブラリに対して、OSを再起動することなくパッチを適用できる機能です。例えば新しくリリースされたカーネルをインストールしても、それを有効にするにはOSを再起動する必要があります。しかし、Kspliceを使うことで、再起動しなくても最新のアップデートを有効化できるようになります。

つまり、Kspliceを使うことで次のメリットを得られるのです。

  • システム停止時間の最小化
  • 迅速なセキュリティ脆弱性への対応
  • パッチ適用に掛かる時間の最小化

再起動しなくてもアップデートを有効にできる特性は「外部からアクセス可能なサーバー」や「仮想マシンが数多く動作しているKVMホスト」では、特に重要な機能と言えます。外部からアクセス可能なサーバーは迅速にセキュリティ脆弱性に対応できた方が好ましいでしょう。また、KVMホスト上では複数の仮想サーバーが稼働しています。そのため、OS再起動となると、さまざまな事前調整が必要で、実際の作業時間もかかります。

つまり、Kspliceはエンタープライズ利用で特に効果を発揮する機能で、運用コスト削減とセキュリティ強度向上に役立ちます。


Ksplice FAQ

Kspliceを手っ取り早く理解するために、Ksplice FAQと題して概要を説明します。

Kspliceを利用できるOSは何ですか。

現時点(2022年9月)では以下のLinux OSをサポートしています。また、Oracle Linuxの場合、Red Hat互換カーネルとUnbreakable Enterprise Kernelの両方をサポートしています。

  • Oracle Linux 6
  • Oracle Linux 7
  • Oracle Linux 8
  • Oracle Linux 9
  • CentOS and RHEL 7
  • CentOS and RHEL 8
  • Ubuntu 18.04
  • Ubuntu 20.04

また、Intel/AMD(x86_64)に加え、64-bit Armにも対応しています。ただし、Armに対応しているのはUnbreakable Enterprise Kernelだけです。


Kspliceを使用するにはインターネットが必要ですか。

Kspliceにはオンラインモードとオフラインモードがあります。オンラインモードではOracle社が提供するULN(Unbreakable Linux Network)に接続するので、インターネットに接続できる必要があります(インターネットプロキシ経由可)。

また、オフラインモードではKspliceミラーを立てることで、インターネットに接続しなくてもKspliceを利用できます。ただし、Kspliceミラーとなるサーバーはインターネットに接続できる必要があります。



Kspliceのライブパッチ対象となるコンポーネントは何ですか。

次の2種類のカーネルに加え、glibcとopensslというユーザー空間パッケージをサポートしています。ただし、ユーザー空間パッケージをサポートしているのはOracle Linuxだけです。

  • Red Hat互換カーネル
  • Unbreakable Enterprise Kernel
  • glibc
  • openssl

Kspliceを利用するのは有償ですか。

Kspliceを利用するには、有償のOracle Linux Premier Support契約が必要です。ただし、Oracle Cloud Infrastructure上のOracle LinuxではKspliceを無償で利用できます(デフォルトでセットアップ済み)。例外的にUbuntu向けには無償で利用できます。


Kspliceのトライアルプログラムはありますか。

30日間お試しで利用できるトライアルプログラムがあります。また、Kspliceを簡単に試したいのであれば、Oracle Cloud InfrastructureのAlways Freeがオススメです。Oracle LinuxイメージはKspliceがセットアップ済みなので、すぐに使えます。


Kspliceのようなライブパッチシステムは他にありますか。

他のLinuxディストリビューションにも、次のライブパッチシステムがあります。ただし、いずれも近年提供されたばかりで実績はこれからです。

  • RHEL系Linuxのkpatch
  • SUSEのKLP
  • Ubuntu Livepatch Service

またWindowsでは、Windowsホットパッチという機能があります。ただし、Windows Server 2022 Datacenter:Azure Editionに限定されています。


Kspliceをさわってみよう

Kspliceを理解するには実際の動作を見たほうがよいでしょう。そこで今回は、簡単に試せるOracle Cloud InfrastructureのOracle Linux 8を使って説明します。セットアップや詳しいことは次回に説明します。

なお、Oracle Linux 7やOracle Linux 9でもほとんど同じですが、使用しているイメージバージョンによって少し違いがある可能性はあります。

Kspliceのセットアップ状況を確認する

Kspliceを使用するには、Kspliceクライアントが必要です。そこでKspliceクライアントがインストールされているか確認します。パッケージを検索すると、uptrackパッケージ(=Kspliceクライアント)がインストールされていることがわかります。

$ rpm -qa | grep -e ksplice -e uptrack | sort
ksplice-release-el8-1.0-4.el8.x86_64
ksplice-uptrack-release-1-5.noarch
uptrack-1.2.75-0.el8.noarch

次に設定ファイル/etc/uptrack/uptrack.confを確認します。設定ファイルが存在し、accesskeyが設定してあれればKspliceを使用できます。

$ grep -v -e '^\s*#' -e '^\s*$' /etc/uptrack/uptrack.conf
[Auth]
accesskey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx(キーは伏せ字)
[Network]
https_proxy =
gconf_proxy_lookup = no
[Settings]
install_on_reboot = yes
autoinstall = no

Kspliceの基本操作を学ぶ

Kspliceがセットアップされていることが分かったので、実際にKspliceを使ってみます。root権限が必要な動作がほとんどなのでsuします。毎回sudoをつけても構いません。

$ sudo su -

カーネルバージョンを確認する

現在有効なLinuxカーネルのバージョンを確認します。「5.4.17-2136.306.1.3」というUEK6が有効になっています。

# uname -r
5.4.17-2136.306.1.3.el8uek.x86_64

リポジトリの最新バージョンを調べると「5.4.17-2136.310.7.1」です。つまり、新しいバージョンがリリースされていることがわかります

# yum check-update kernel-uek
kernel-uek.x86_64              5.4.17-2136.310.7.1.el8uek              ol8_UEKR6

アップデートを表示する

従来の方法であれば、次のようにカーネルをアップデートして再起動です。

# yum update kernel-uek -y
# reboot

Kspliceではuptrack-upgradeコマンドを使います。次のように「uptrack-upgrade -n」を入力すると、適用可能なKspliceアップデートを表示できます。それぞれ1行が個別のアップデートです。

# uptrack-upgrade -n
Effective kernel version is 5.4.17-2136.306.1.3.el8uek
The following steps will be taken:
Install [n9kprcm6] Known exploit detection.
Install [qivpmdlu] Known exploit detection for CVE-2019-9213.
Install [50qj7qw1] Known exploit detection for CVE-2017-1000253.
Install [3iw8b16t] Known exploit detection for CVE-2016-5195.
Install [sgxyx32m] Known exploit detection for CVE-2021-27363.
Install [92k7sosn] Known exploit detection for CVE-2021-27364.
★以下省略

アップデートを適用する

これらのアップデートをすべて適用します。適用にかかる時間は、アップデートの数やマシンスペックによって変わり、今回は1分程度で完了しました。ここでの注目ポイントは、最終行の「5.4.17-2136.310.7」です。Kspliceによって、最新と同じカーネルバージョンになっています。

# uptrack-upgrade -y
The following steps will be taken:
Install [n9kprcm6] Known exploit detection.
Install [qivpmdlu] Known exploit detection for CVE-2019-9213.
Install [50qj7qw1] Known exploit detection for CVE-2017-1000253.
Install [3iw8b16t] Known exploit detection for CVE-2016-5195.
★中略
Installing [dad581dd] CVE-2022-2588: Use-after-free in IP Route Classifier.
Your kernel is fully up to date.
Effective kernel version is 5.4.17-2136.310.7.el8uek

Kspliceによるアップデートで有効になった実効(Effective)のカーネルバージョンはuptrack-unameコマンドで表示できます。

# uptrack-uname -r
5.4.17-2136.310.7.el8uek.x86_64

通常のunameでは、インストールされているカーネルバージョンが表示されます。

# uname -r
5.4.17-2136.306.1.3.el8uek.x86_64

インストールされているUEKのリストは以下の通りです。最新の「5.4.17-2136.310.7」はインストールされていません。つまり差分となるKspliceアップデート(パッチ)だけがインストールされているのです。

# rpm -q kernel-uek | sort -n
kernel-uek-5.4.17-2102.201.3.el8uek.x86_64
kernel-uek-5.4.17-2136.304.4.1.el8uek.x86_64
kernel-uek-5.4.17-2136.306.1.3.el8uek.x86_64

アップデートを表示する

適用しているKspliceアップデートはuptrack-showコマンドで表示できます。

# uptrack-show
Installed updates:
[n9kprcm6] Known exploit detection.
[qivpmdlu] Known exploit detection for CVE-2019-9213.
[50qj7qw1] Known exploit detection for CVE-2017-1000253.
★中略
[fza3q2mo] CVE-2022-2153: Denial-of-service in Kernel-based Virtual Machine.
[4eaq3lov] CVE-2022-21505: Lockdown bypass in Integrity Measurement Architecture.
[dad581dd] CVE-2022-2588: Use-after-free in IP Route Classifier.
Effective kernel version is 5.4.17-2136.310.7.el8uek

アップデートを削除する

適用したアップデートはuptrack-removeコマンドで簡単に削除できます。

# uptrack-remove --all -y
The following steps will be taken:
Remove [dad581dd] CVE-2022-2588: Use-after-free in IP Route Classifier.
Remove [4eaq3lov] CVE-2022-21505: Lockdown bypass in Integrity Measurement Architecture.
Remove [jjafy1ef] CVE-2022-29582: Use-after-free in asynchronous io_uring API.
★中略
Removing [qivpmdlu] Known exploit detection for CVE-2019-9213.
Removing [n9kprcm6] Known exploit detection.
Effective kernel version is 5.4.17-2136.306.1.3.el8uek

これでKspliceアップデートを適用しない最初の状態に戻りました。今回はアップデートを一括で適用しましたが、IDを指定して個別に適用することもできます。

# uptrack-uname -r
5.4.17-2136.306.1.3.el8uek.x86_64

# uname -r
5.4.17-2136.306.1.3.el8uek.x86_64

念のため、適用しているKspliceアップデートを表示すると何も表示されません。

# uptrack-show
Installed updates:
None

Effective kernel version is 5.4.17-2136.306.1.3.el8uek

おわりに

Kspliceがどのようなものか、ご理解いただけたでしょうか。また、実際に使ってみると、かなり簡単に使えることがわかっていただけたと思います。次回はKspliceについて、より詳しく説明します。

関連サービス

Oracle Linux

オラクル製品の開発は、Oracle Linux( Unbreakable Enterprise Kernel )に基づいて進められているため、オラクル製品に最適化されたOS環境をご利用いただけます。Kspliceによるゼロダウンタイムパッチを適用することが可能です。