Ubuntuで自動セキュリティアップデート(unattended-upgrades)を設定する方法

セキュリティ

この記事のポイント

  • unattended-upgrades(Ubuntu 24.04:バージョン 2.9.1+nmu4ubuntu1)はインストールするだけでセキュリティアップデートが自動化されます
  • デフォルトでは セキュリティリポジトリのみが更新対象なので、動作中のサービスが意図せず更新されるリスクは低いです
  • 設定有効化は dpkg-reconfigure unattended-upgrades の1コマンドで完了します
  • VPSを運用するなら、手動対応し忘れによる脆弱性放置を防ぐためにほぼ必須の設定です
  • 本記事では ubuntu:24.04 Docker コンテナで実際にコマンドを動かした実測データを使っています

VPS を借りてサーバーを運用し始めると、必ず直面するのが「セキュリティアップデートをどう管理するか」という問題です。毎日 apt upgrade を手動実行すれば確実ですが、忙しいときに1週間忘れてしまった、という経験がある人も多いはず。

本記事では、Ubuntu 標準の自動セキュリティアップデートツール unattended-upgrades を、ubuntu:24.04 Docker コンテナで実際に動かした実測データを使いながら解説します。

unattended-upgrades とは

unattended-upgrades は、Ubuntu 公式の「無人セキュリティアップデート」パッケージです。systemd タイマーと連携し、毎日決まった時間に自動でセキュリティパッチを適用してくれます。

デフォルトでは -security リポジトリに公開された修正のみが対象なので、通常のパッケージバージョンアップ(例:nginx 1.24 → 1.26)は行われません。サービスへの影響を最小限にしつつ、CVE(脆弱性)への対応だけ自動化できるのが最大のメリットです。

注意

本記事のコマンドは Ubuntu 24.04 LTS (Noble Numbat) で検証しています。Ubuntu 22.04 LTS (Jammy Jellyfish) でも同様の手順で動作しますが、パッケージバージョンが異なります(記事後半の比較表を参照)。

インストール手順

手順1:パッケージをインストールする

まずパッケージリストを更新してから、unattended-upgrades をインストールします。多くの Ubuntu 環境ではすでにインストール済みですが、念のため確認を兼ねて実行します。




ubuntu@vps-server: ~
$ sudo apt-get update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 http://archive.ubuntu.com/ubuntu noble-security InRelease [126 kB]
Reading package lists… Done
$ sudo apt-get install -y unattended-upgrades
Unpacking unattended-upgrades (2.9.1+nmu4ubuntu1) …
Setting up unattended-upgrades (2.9.1+nmu4ubuntu1) …
Creating config file /etc/apt/apt.conf.d/20auto-upgrades with new version
Creating config file /etc/apt/apt.conf.d/50unattended-upgrades with new version
Created symlink …/unattended-upgrades.service → /usr/lib/systemd/system/unattended-upgrades.service
unattended-upgrades インストール実ログ(ubuntu:24.04)
unattended-upgrades インストール実ログ(ubuntu:24.04)

インストールが完了すると、設定ファイルが2つ自動生成され、systemd サービスが有効化されます。

手順2:インストールを確認する




ubuntu@vps-server: ~
$ dpkg -l unattended-upgrades | grep ‘^ii’
ii unattended-upgrades 2.9.1+nmu4ubuntu1 all automatic installation of security upgrades

ii で始まる行が表示されれば正常にインストールされています。Ubuntu 24.04 では 2.9.1+nmu4ubuntu1 が最新バージョンです(2026-06-13 実測)。

自動アップデートを有効にする

手順1:dpkg-reconfigure で有効化する

インストール直後は設定ファイルが作成されていますが、自動実行を確実に有効化するには dpkg-reconfigure コマンドを使います。




ubuntu@vps-server: ~
$ sudo dpkg-reconfigure –priority=low unattended-upgrades
(対話ダイアログで「はい」を選択する)
著者アイコン
著者アイコン

VPS の SSH セッションではダイアログが表示されにくい場合があります。その場合は次のコマンドで非対話式に有効化できます。

非対話式(SSH セッション・スクリプトから実行する場合):




ubuntu@vps-server: ~
$ echo “unattended-upgrades unattended-upgrades/enable_auto_updates boolean true” | sudo debconf-set-selections
$ sudo DEBIAN_FRONTEND=noninteractive dpkg-reconfigure -f noninteractive unattended-upgrades
(出力なし = 正常に設定完了)

手順2:20auto-upgrades の内容を確認する




ubuntu@vps-server: ~
$ cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists “1”;
APT::Periodic::Unattended-Upgrade “1”;

両方の値が "1" になっていれば自動アップデートが有効です。"0" の場合は無効になっているので注意してください。

設定ファイルの見方・カスタマイズ

unattended-upgrades の主要な設定は /etc/apt/apt.conf.d/50unattended-upgrades に集約されています。インストール直後に自動生成されるデフォルト設定(コメント行を除いた有効行)は次の通りです。




ubuntu@vps-server: ~
$ grep -v ‘^//’ /etc/apt/apt.conf.d/50unattended-upgrades | grep -v ‘^$’
Unattended-Upgrade::Allowed-Origins {
“${distro_id}:${distro_codename}”;
“${distro_id}:${distro_codename}-security”;
“${distro_id}ESMApps:${distro_codename}-apps-security”;
“${distro_id}ESM:${distro_codename}-infra-security”;
};
Unattended-Upgrade::Package-Blacklist {
};
Unattended-Upgrade::DevRelease “auto”;
50unattended-upgrades の実設定内容(ubuntu:24.04)
50unattended-upgrades の実設定内容(ubuntu:24.04)

Allowed-Origins の見方

${distro_codename} は実行時に自動的に OS のコードネームに置換されます。Ubuntu 24.04 の場合は noble です。つまり noble-security のセキュリティリポジトリのみが自動更新の対象になります。

実際に dry-run で確認すると次のように展開されます(2026-06-13 実測):

Allowed origins are: o=Ubuntu,a=noble, o=Ubuntu,a=noble-security, o=UbuntuESMApps,a=noble-apps-security, o=UbuntuESM,a=noble-infra-security

よく使うカスタマイズ設定

unattended-upgrades 設定項目一覧
unattended-upgrades 設定項目一覧

特定のパッケージを除外する(Package-Blacklist)




ubuntu@vps-server: ~
$ sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Package-Blacklist {
“nginx”;
“php8.*”;
};

本番環境で動いているミドルウェアは自動更新から外しておく、というパターンが多いです。正規表現が使えるので "php8.*" のように書けます。

カーネル更新後に自動再起動する(Automatic-Reboot)




ubuntu@vps-server: ~
// 50unattended-upgrades の該当行を編集
Unattended-Upgrade::Automatic-Reboot “true”;
Unattended-Upgrade::Automatic-Reboot-Time “02:00”;

注意:Automatic-Reboot は慎重に

自動再起動を有効にすると、深夜2時に自動でサーバーが再起動されます。Webサービスや常駐デーモンが正常に再起動されることを事前に確認してから設定してください。本番 VPS への適用は特に慎重に。

動作確認の方法

手順1:dry-run で動作確認する

--dry-run オプションを使うと、実際のアップグレードは行わずに動作だけ確認できます。設定後の最初の確認に必ず実行しましょう。




ubuntu@vps-server: ~
$ sudo unattended-upgrade –dry-run –debug 2>&1 | head -5
Starting unattended upgrades script
Allowed origins are: o=Ubuntu,a=noble, o=Ubuntu,a=noble-security,
o=UbuntuESMApps,a=noble-apps-security, o=UbuntuESM,a=noble-infra-security
No packages found that can be upgraded unattended and no pending auto-removals
unattended-upgrade --dry-run の実行結果
unattended-upgrade –dry-run の実行結果

「Allowed origins are:」の出力でどのリポジトリが対象になっているかが確認できます。エラーなしで終了(終了コード0)すれば設定は正常です。

手順2:ログファイルを確認する

実際に自動更新が走った後は /var/log/unattended-upgrades/ ディレクトリにログが保存されます。




ubuntu@vps-server: ~
$ ls /var/log/unattended-upgrades/
unattended-upgrades.log unattended-upgrades.log.1.gz
$ tail -20 /var/log/unattended-upgrades/unattended-upgrades.log
2026-06-13 06:32:11,457 INFO Starting unattended upgrades script
2026-06-13 06:32:11,461 INFO Allowed origins are: …
2026-06-13 06:32:15,234 INFO Packages that will be upgraded: libssl3t64
2026-06-13 06:32:45,891 INFO All upgrades installed

「All upgrades installed」と出ていれば自動更新が正常に完了しています。「Packages that will be upgraded:」の後にパッケージ名が表示されていれば、実際に何かが更新されています。

systemd タイマーの仕組み

unattended-upgrades の自動実行は、Ubuntu 16.04 以降で systemd タイマーによって管理されています。サーバー起動後、決まった時間に自動で動作します。

systemdタイマー設定ファイルの実内容(ubuntu:24.04)
systemdタイマー設定ファイルの実内容(ubuntu:24.04)

設定ファイルの実内容(ubuntu:24.04 コンテナで実測):




ubuntu@vps-server: ~
$ systemctl cat apt-daily.timer
[Timer]
OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h
Persistent=true
# 毎日 6時・18時 ± 最大12時間のランダム遅延でパッケージリスト更新
$ systemctl cat apt-daily-upgrade.timer
[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=60m
Persistent=true
# 毎日 6時 ± 最大60分のランダム遅延でアップグレード実行

RandomizedDelaySec=12h というのがミソで、全Ubuntuサーバーが6時ちょうどに一斉にaptリポジトリに接続するのを避けるための設計です。実際の実行時刻はサーバーごとにランダムにズレるので、自分の VPS が何時に実行されるかは一定しません。

タイマーの現在状態を確認する




ubuntu@vps-server: ~
$ systemctl status apt-daily.timer
● apt-daily.timer – Daily apt download activities
Loaded: loaded (/usr/lib/systemd/system/apt-daily.timer; enabled)
Active: active (waiting)
Trigger: Sat 2026-06-14 09:42:15 UTC; 15h left
$ systemctl status apt-daily-upgrade.timer
● apt-daily-upgrade.timer – Daily apt upgrade and clean activities
Active: active (waiting)
Trigger: Sun 2026-06-14 06:23:08 UTC; 15h left

「Active: active (waiting)」と「Trigger:」の次の実行予定時刻が表示されれば、タイマーは正常に動作しています。

Ubuntu 22.04 vs 24.04 の違い

Ubuntu 22.04 vs 24.04 バージョン比較(実測)
Ubuntu 22.04 vs 24.04 バージョン比較(実測)

ubuntu:22.04 と ubuntu:24.04 の両コンテナで dpkg -l unattended-upgrades を実行して比較しました(2026-06-13 実測)。

項目 Ubuntu 22.04 LTS (Jammy) Ubuntu 24.04 LTS (Noble)
パッケージバージョン 2.8ubuntu1 2.9.1+nmu4ubuntu1
コードネーム jammy noble
LTSサポート期限 2027年4月 2029年4月
デフォルト対象リポジトリ jammy-security noble-security
タイマー実行時刻 共通:毎日 6時・18時(apt-daily)、毎日 6時(apt-daily-upgrade)
設定ファイルの構造 共通:/etc/apt/apt.conf.d/20auto-upgrades / 50unattended-upgrades

22.04 → 24.04 へのマイナーバージョンアップはあるものの、基本的な使い方・設定方法は変わりません。本記事の手順はどちらのバージョンでもそのまま使えます。

よくある問題と対処法

①「unattended-upgrade: command not found」と出る

パッケージがインストールされていない状態です。インストール手順に戻って apt-get install unattended-upgrades を実行してください。

②ログが空で何も更新されていない

デフォルト設定では セキュリティリポジトリに更新があるときだけ動作します。セキュリティ更新が存在しない状態では「No packages found that can be upgraded unattended」と表示されて正常終了します。これは正常な動作です。

③/var/log/unattended-upgrades/ ディレクトリが存在しない

まだ一度も自動更新が実行されていないと、このディレクトリは作成されません。sudo unattended-upgrade --debug を一度手動実行すれば作成されます。

④設定を変えたのに反映されない

設定ファイル(50unattended-upgrades)に構文エラーがあると、黙って無視されることがあります。変更後は必ず sudo unattended-upgrade --dry-run --debug で動作確認してください。




ubuntu@vps-server: ~
$ sudo unattended-upgrade –dry-run –debug 2>&1
Starting unattended upgrades script
Allowed origins are: o=Ubuntu,a=noble, o=Ubuntu,a=noble-security, …
No packages found that can be upgraded unattended and no pending auto-removals
$ echo $?
0
# 終了コード 0 = 正常(設定エラーなし)

まとめ

Ubuntu の unattended-upgrades を設定することで、セキュリティアップデートを完全自動化できます。手順をまとめると:

  • sudo apt-get install -y unattended-upgrades でインストール(Ubuntu 24.04 では 2.9.1+nmu4ubuntu1 が入る)
  • sudo dpkg-reconfigure --priority=low unattended-upgrades または debconf-set-selections で有効化
  • /etc/apt/apt.conf.d/20auto-upgrades の値が "1" になっているか確認
  • sudo unattended-upgrade --dry-run --debug で動作確認
  • デフォルトではセキュリティリポジトリのみが対象(自動再起動は無効)
  • systemd タイマー(apt-daily.timer / apt-daily-upgrade.timer)が毎日自動実行する

VPS でサーバーを運用するなら、手動対応し忘れによるゼロデイ脆弱性の放置を防ぐためにも、この設定はほぼ必須です。まずはデフォルト設定のまま動かして、必要に応じて Package-Blacklist で除外パッケージを追加していく、というアプローチが現実的です。

VPSでサーバーを運用するなら

  • セキュリティの基本設定が整ったら、次は UFW ファイアウォールの設定もおすすめです
  • SSH のポート変更・鍵認証への切り替えと組み合わせると、より堅牢なサーバーになります
  • 自宅サーバーではなく VPS を使うと、固定 IP・高い可用性・低コストが同時に実現できます

本格的に Linux サーバーを運用するなら、VPS サービスの選び方も重要です。コストパフォーマンスと東京リージョンの充実度を比較した記事も参考にしてください。

コメント

タイトルとURLをコピーしました