サーバー構築

Linuxカーネルの更新方法 — 脆弱性を放置しないサーバー保守

この記事の対象者
  • VPSを運用しているが、カーネル更新をしたことがない方
  • カーネルの脆弱性リスクを理解したい方
  • セキュリティ更新の自動化を設定したい方

なぜカーネル更新が重要なのか

カーネルはOSの中核部分で、ハードウェアとソフトウェアの橋渡しをします。カーネルに脆弱性があると、攻撃者がroot権限を奪取できる可能性があります。

カーネルが古い 既知の脆弱性が未修正のまま
権限昇格の脆弱性 一般ユーザーからroot権限を奪取
サーバー完全掌握 データ漏洩・改ざん・踏み台化

放置するとどうなる?

カーネルの脆弱性は定期的に発見されています。古いバージョンのまま放置すると、公開された攻撃コード(PoC)を使って誰でも攻撃できる状態になります。

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

まず現在のカーネルバージョンを確認します。

ターミナル
uname -r
6.1.0-22-amd64

次に、利用可能な更新があるか確認します。

ターミナル
sudo apt update
apt list --upgradable 2>/dev/null | grep linux
linux-image-amd64/oldstable-security 6.1.162-1 amd64 [upgradable from: 6.1.94-1]

upgradable と表示されたら、セキュリティ修正が未適用です。特に linux-image はカーネル本体なので、早めの更新が推奨されます。

カーネルを更新する

Step 1 パッケージを更新する

ターミナル
sudo apt update && sudo apt upgrade -y

カーネルパッケージが含まれている場合、新しいカーネルイメージがインストールされます。

Step 2 サーバーを再起動する

カーネルの更新はファイルを置き換えるだけで、実行中のカーネルには反映されません。再起動が必須です。

ターミナル
sudo reboot

再起動の影響

再起動するとサイトが一時的にダウンします。Dockerコンテナに restart: always を設定していれば、再起動後に自動復旧します。メンテナンス時間帯に実施しましょう。

Step 3 更新を確認する

再起動後、SSH接続してカーネルバージョンを確認します。

ターミナル
uname -r
6.1.0-43-amd64

バージョンが更新されていれば成功です。Dockerコンテナも起動しているか確認しましょう。

ターミナル
docker ps

自動セキュリティ更新を設定する

手動で毎回更新するのは現実的ではありません。unattended-upgrades を使えば、セキュリティ更新を自動適用できます。

Step 1 インストール

ターミナル
sudo apt install unattended-upgrades -y

Step 2 有効化

ターミナル
sudo dpkg-reconfigure -plow unattended-upgrades

「自動的にセキュリティアップデートをダウンロードしてインストールしますか?」と聞かれるので「はい」を選択します。

Step 3 設定を確認

/etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
};

上記の設定により、セキュリティ更新のみが自動適用されます。通常のパッケージ更新は含まれないため、意図しない変更が入るリスクは低いです。

カーネル更新の自動再起動

カーネル更新は再起動が必要なため、自動更新だけでは反映されません。定期的に uname -r で確認し、更新がある場合は手動で再起動しましょう。

まとめ

  • カーネルの確認: uname -rapt list --upgradable で現状を把握
  • 更新手順: apt update && apt upgrade -yreboot で適用
  • 自動更新: unattended-upgrades でセキュリティパッチを自動適用
  • 定期確認: カーネル更新は再起動が必要なため、手動で定期的に確認する