通常、OSのシステムの根幹部分に対する修正が行われ、そのアップデートを手元のマシンにインストールする際、適用に再起動が必要になることがよくあります。
UbuntuをはじめとするLinuxもこの例に漏れることなく、定期的に配信されるOSコンポーネントへの更新(特にLinuxカーネルのアップデート)が入った場合は、システムを再起動させないと更新を適用することができませんでした。
サーバー管理者にとってこれは結構ジレンマを感じる場面で、悩みの種でした。(もっとも、複数台構成になっていれば片肺ずつ更新のような対策はとれるのですが…)
そこで、Ubuntuを開発しているCanonical社では、最近Linuxカーネルに搭載されたライブパッチ機能を利用した、”Canonical Livepatch”をリリースしました。
この機能を使用すれば、カーネルにセキュリティアップデートが入った場合に、OSを再起動するまでの間、新しいカーネルのバージョンに適用されたセキュリティアップデートと同様の変更を、カーネルを動作させたまま一時的に適用させることができるようになります。
つまり、実質的に再起動の回数を減らすことができるようになるわけです。
そんなありがたい機能を持つLivepatchですが、どんな場合でも対応できるかというとそうではなく、”再起動しないと適用できない”更新も存在しており、その場合はLivePatchを動かしていても再起動が必要になることもあります。
それを知らずに動かしっぱなしにしておくと、知らないうちにLivepatchのパッチ適用が停止してしまい、脆弱性が放置されたままになってしまいます。
現状のLivepatchの適用状態は、次のコマンドで確認できます。
canonical-livepatch status
$ canonical-livepatch status
client-version: 9.4.8
architecture: x86_64
cpu-model: Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
last-check: 2019-11-13T03:45:12+09:00
boot-time: 2019-10-15T09:13:47+09:00
uptime: 2938h52m37s
status:
- kernel: 4.4.0-138.164-generic
running: true
livepatch:
checkState: check-failed
checkInfo: 'livepatch check failed: Not checking for new patches based on reported
livepatch state. State: kernel-upgrade-required'
patchState: kernel-upgrade-required
version: "51.1"
fixes: |-
* CVE-2017-13168
* CVE-2017-5753
* CVE-2018-10880
...
上記のように、”更新をするにはカーネルのアップグレードが必要”となる場合もあり、この場合はこれ以降カーネルの更新を行うまでLivepatchが動作しなくなります。
この場合は新しいカーネルを適用したうえで再起動を行うことで、またLivepatchが適用されるようになります。
再起動をしなくても脆弱性対応をしてくれて、再起動の回数を減らすことができるLivepatchですが、放置せずに定期的に確認するようにした方がよさそうです。