Ubuntu 24.04 如何啟用 unattended-upgrades 自動更新
Ubuntu 24.04 預裝 unattended-upgrades 但需手動啟用。透過 20auto-upgrades 設定檔即可開啟。預設不執行自動重啟,建議執行 dry-run 指令確認更新清單。
為什麼值得設定自動安全性更新
未修補的伺服器是網路上最容易被攻擊的目標。大多數小型伺服器的入侵事件並非因為駭客技術高超,而是因為伺服器執行了未更新的舊版套件,且其中存在已知漏洞。Ubuntu 內建了一款能自動解決此問題的工具:unattended-upgrades 可在排程內自動安裝安全性更新,無需您手動登入。這是 VPS 上成本最低的安全性投資,在 Ubuntu 上只需幾分鐘即可完成設定。
該工具的設計相當保守。預設情況下,它僅套用安全性更新,而非所有套件升級。這是因為安全性修補程式風險極低,值得直接套用;而功能性升級可能會改變您所依賴的行為。對於大多數伺服器而言,此預設值是最合適的,本指南將保留此設定,並說明幾個值得調整的選項。
步驟 1:安裝並啟用
在 Ubuntu 24.04 上,該套件通常已預裝但未啟用。請安裝並啟動它:
sudo apt update
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgradesdpkg-reconfigure 提示會詢問一個是非題,詢問是否自動下載並安裝穩定版更新。請回答 yes。這會寫入設定檔並啟用每日排程任務:
cat /etc/apt/apt.conf.d/20auto-upgradesAPT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";第一行指令會每日重新整理套件清單;第二行則每日執行自動升級。兩者皆設為 1,代表機器會透過 systemd 計時器每日自動檢查並套用安全性更新,無需您進一步操作。
步驟 2:決定自動套用的範圍
更新原則位於 /etc/apt/apt.conf.d/50unattended-upgrades。請開啟該檔案並查看頂部的 Allowed-Origins 區塊:
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";
};-security 行是關鍵所在,且預設為啟用。這就是保守原則:僅納入安全性更新,一般的軟體功能更新則留待您自行決定何時手動套用。您可以加入 "${distro_id}:${distro_codename}-updates" 來源行來自動套用所有更新,但對於託管重要服務的伺服器,僅自動套用安全性修補程式是更安全的預設做法。除非有特殊理由,否則請維持預設設定。
步驟 3:處理重新開機
部分更新(如核心或核心函式庫)在重新開機後才會完全生效。unattended-upgrades 不會主動重啟您的伺服器,這意味著已修補的核心可能會在您下次重啟前處於閒置狀態。請決定您希望如何處理此情況,並在 50unattended-upgrades 中明確設定:
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";上述設定會在凌晨 4 點,且僅在更新需要時才重啟伺服器。對於沒有容錯移轉叢集的單一 VPS 而言,在凌晨進行短暫重啟通常是維持核心修補程式更新的最佳折衷方案。如果您的伺服器執行著絕對不能意外重啟的服務,請關閉自動重啟功能,並養成在檢查 /var/run/reboot-required 後手動重啟的習慣。
步驟 4:驗證運作狀態
不必等待一天來確認任務是否執行。您可以執行模擬測試,查看在不更動任何檔案的情況下會套用哪些更新:
sudo unattended-upgrade --dry-run --debug輸出結果會列出它所考量的套件及其來源,讓您確認原則是否生效。在實際任務至少執行過一次後,記錄會存放在此處:
cat /var/log/unattended-upgrades/unattended-upgrades.log該日誌是「我的伺服器是否正在自動修補」問題的答案。如果日誌顯示安全性套件按排程安裝,則表示任務運作正常。
定位與角色
自動更新是伺服器強化的一環,而非全部。它們能防止已知漏洞長期存在,但無法解決存取控制或服務暴露的問題。請搭配僅限金鑰的 SSH 強化 以防止前門遭受暴力破解、預設拒絕的 UFW 防火牆 以確保僅開放必要的連接埠,以及 非特權服務帳號 以防止受駭應用程式控制整台主機。您託管的應用程式本身也需額外防護,例如若此主機執行自架密碼庫,則需透過 Vaultwarden 強化指南 來保護管理權杖與備份檔案,這些是 apt 修補無法涵蓋的範圍。修補程式能封堵您已知的漏洞;其他層級則能限制您未知漏洞所造成的損害。
FAQ
unattended-upgrades 會套用所有更新還是僅限安全性更新?
預設僅套用安全性更新。/etc/apt/apt.conf.d/50unattended-upgrades 中的 Allowed-Origins 區塊啟用了 -security 來源,並將一般功能更新留給您手動處理。這是刻意設計的:安全性修補程式風險低且值得自動套用,而功能升級可能會改變行為,因此大多數伺服器應維持保守的預設值。
自動更新會重啟我的伺服器嗎?
僅在您允許的情況下才會。在設定檔中設定 Unattended-Upgrade::Automatic-Reboot "true" 與 Automatic-Reboot-Time,伺服器就會在更新需要時(例如核心修補後)於該時間點重啟。若未設定,已修補的核心會等到您手動重啟;請檢查 /var/run/reboot-required 以確認是否有待處理的重啟需求。
如何檢查自動更新是否正在執行?
執行 sudo unattended-upgrade --dry-run --debug 可查看目前會套用的更新(不進行任何變更),並閱讀 /var/log/unattended-upgrades/unattended-upgrades.log 以查看過去的執行記錄;每次自動安裝也會記錄在 /var/log/apt/history.log 中。如果日誌顯示安全性套件按每日排程安裝,則計時器運作正常。如果模擬測試顯示 No packages found that can be upgraded unattended,則代表系統已是最新狀態,或是您允許的來源過於狹窄,無法匹配安全性儲存庫。
單靠 unattended-upgrades 足以確保伺服器安全嗎?
不足夠,但它是必要的防護層。它能防止已知漏洞長期未修補,從而阻擋最常見的入侵方式,但它無法控制存取權限或服務暴露。請結合 SSH 強化、預設拒絕的防火牆以及最小權限的服務帳號,才能建立真正難以被攻破的伺服器。