Ubuntu Livepatchを使用してサーバーの再起動を回避する方法

自分のサーバーを管理している場合、遅かれ早かれこの問題に直面します。オペレーティングシステムを再起動する必要がありますが、マシンは中断できない重要なサービスを提供しています。
しかし、そもそもなぜ再起動する必要があるのでしょうか?apt-get upgradeコマンドの後、すべてが正常に動作しているように見えます。しかし、物事は常に見た目通りではありません。システムは、Windowsのように再起動を強制することなく、すべてのアップグレード後も幸せに動作し続けますが、それでも再起動が必要な場合があります。
たとえば、システムのコア(カーネル)に脆弱性が発見された場合、それはパッチされ、新しいパッケージとしてサーバーにプッシュされます。パッチされたカーネルをインストールした後、一部のファイルがディスクに書き込まれますが、実行中なのは依然として古いカーネルです。なぜなら、それがメモリ(RAM)にロードされているからです。
これは、サーバーが以前に発見されたセキュリティホールに対して依然として脆弱であることを意味します。他のプロセス、デーモン、サービスはオペレーティングシステムを再起動することなく再読み込みできます。しかし、カーネルはシステムの中心に位置しており、次回のブート時にのみ再読み込みできます。
さらに読む: Ubuntu Serverにユーザーを追加する方法
Ubuntu Livepatchは、再起動せずにカーネルのセキュリティホールを閉じることを可能にすることで、これを解決します。これにより、セキュリティを損なうことなく、数週間または数ヶ月の間、再起動を回避または遅延させることができます。
ライブパッチの背後にある基本的なアイデアはシンプルです:関数が脆弱な場合、それを書き換え、欠陥を排除し、新しい関数をメモリのどこかにロードします。関数が呼び出されると、カーネル内のコードを実行する代わりに、書き換えたコードを使用するように呼び出しをリダイレクトします。

しかし、シンプルに見えるほとんどのことと同様に、実装と技術的な詳細はそれほど単純ではありません。
UbuntuでLivepatchを設定する方法
このページに移動し、Ubuntu Oneアカウントを作成します。(すでに持っている場合は、ログインするだけです。)メールを確認し、その後アカウント確認リンクをクリックします。次に、Canonical Livepatch Serviceページにアクセスします。「Ubuntuユーザー」を選択し、トークンを生成するボタンをクリックします。次のページには、サーバーに入力する必要がある正確なコマンドが表示されます。最初のコマンドの後、次のように入力します。
sudo snap install canonical-livepatchスナップパッケージが完全にインストールされるまで数秒待ちます。完了すると、次の画像に示されているような結果が得られます。

最後に、Canonicalのページからの最後のコマンドで、
sudo canonical-livepatch enable#PASTE_YOUR_TOKEN_HEREサービスがアクティブになり、必要に応じてカーネルにセキュリティパッチが自動的に適用され、あなたの入力は必要ありません。
必要に応じてSnapデーモンをインストール
まれに、前のセクションの最初のコマンドが失敗し、次のエラーメッセージが表示されることがあります:-bash: /usr/bin/snap: No such file or directory。この場合、サーバーのプロバイダーがデフォルトでスナップデーモンサービスを含まないUbuntuオペレーティングシステムイメージを持っていることを意味します。次のコマンドでインストールします:
sudo apt update &&sudo apt install snapdその後、前のセクションの2つのコマンドを再度実行します。
さらに読む: dwm体験を向上させるための5つの便利なパッチ
サーバーを最新の状態に保つ
Livepatchは、カーネルに必要なすべてのセキュリティアップデートを適用します。しかし、システムの残りの部分も定期的にアップグレードする必要があります。次のようなコマンドで:
sudo apt update &&sudo apt upgradeこれを毎週、または可能であればもっと頻繁に行うべきです。重要なシステムパッケージは、最新のセキュリティ修正を適用するために再起動が必要であることを通知する場合があります。

これらは通常、優雅な再起動であり、プロセス中にサービスを中断しません。たとえば、この場合、SSHデーモンはアクティブなSSHセッションを中断することなく再起動されました。
他の状況では、新しいパッチコードが再読み込みされ、セキュリティ修正が適用されることを確認するために、自分でサービスを再起動することができます。たとえば、nginxパッケージがアップグレードされたことに気付いた場合、次のコマンドを実行できます。
systemctl restart nginx.serviceこれにより、nginxデーモンがメモリに再読み込みされます。そうしないと、パッケージがアップグレードされても、古い脆弱なコードで実行され続け、サーバーが既知の攻撃にさらされる可能性があります。一部のパッケージのアップグレードはこれを自動的に行いますが、他のものはそうではありません。だからこそ、「apt upgrade」が何をするかに注意を払い、必要に応じていくつかのサービスを再起動することは良い習慣です。また、これが自動的に行われたかどうかを確認するためにログを見ることもできます。
結論
ご覧のとおり、Canonicalはこれをサーバーに実装するのを非常に簡単にしています。カーネルに関しては、あなたの側でメンテナンス作業は必要ありません。あなたができる唯一のことは、
canonical-livepatch statusを時々実行して、状況を確認することです。