今回は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について、より詳しく説明します。