Ubuntu 自动安全更新:unattended-upgrades 配置与日志检查

2026-10-9 / 0 评论 / 2 阅读

Ubuntu 自动安全更新:unattended-upgrades 配置与日志检查 原创示意图

Ubuntu Server 通常默认安装 unattended-upgrades,每天自动检查并应用安全更新(Security updates)。自动更新能缩短漏洞暴露时间,但数据库、Web 服务或内核更新可能触发服务重启,因此生产服务器还需要监控、备份和维护窗口。

一、确认组件与运行状态

dpkg -l unattended-upgrades
systemctl list-timers 'apt-*'
systemctl status apt-daily-upgrade.timer --no-pager

若未安装:

sudo apt update
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

APT 的 apt-daily.timer 和 apt-daily-upgrade.timer 会按计划并带随机延迟启动更新任务。因此刚开机时遇到 APT 锁被占用,可能只是自动更新正在正常运行,不要直接删除锁文件。

二、两个主要配置文件

/etc/apt/apt.conf.d/20auto-upgrades
/etc/apt/apt.conf.d/50unattended-upgrades

20auto-upgrades 控制是否更新索引、是否执行无人值守升级以及间隔天数,常见设置是:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

数值 1 表示每天,0 表示禁用。50unattended-upgrades 决定允许从哪些来源(Allowed Origins)取得更新、是否排除软件包以及重启策略。Ubuntu 默认主要处理官方安全仓库;仅仅添加第三方仓库,并不代表它会自动纳入 unattended-upgrades。

修改前先备份,尽量把自定义内容放在新的高编号配置文件,例如 /etc/apt/apt.conf.d/52local-unattended-upgrades,便于与系统默认值分离。

三、自动重启要谨慎

核心选项示例:

Unattended-Upgrade::Automatic-Reboot "false";
Unattended-Upgrade::Automatic-Reboot-WithUsers "false";
Unattended-Upgrade::Automatic-Reboot-Time "03:30";

默认不自动重启更适合只有远程入口、没有带外管理的家庭服务器。即使设置了重启时间,也应确认虚拟机能自动启动、磁盘和网络正常、关键服务设置为开机启动。检查是否建议重启:

test -f /run/reboot-required && cat /run/reboot-required

Ubuntu 24.04 起,needrestart 默认可能自动重启部分受更新影响的服务。对不能随时中断的业务,应先研究对应服务的排除配置并建立维护窗口,而不是完全关闭所有安全更新。

四、排除特定软件包

50unattended-upgrades 中的 Package-Blacklist 使用正则表达式(Regular expression)。例如仅排除明确的包:

Unattended-Upgrade::Package-Blacklist {
    "example-package$";
};

排除依赖链底层的软件包可能阻塞其他安全更新。只有已知某版本会影响业务时才临时使用,并记录原因和解除日期。不要长期排除所有内核包,否则会错过重要内核安全修复。

五、先模拟再实际运行

sudo unattended-upgrade --dry-run --debug

模拟(Dry run)不会安装更新,可用于检查允许来源、候选包和配置语法。实际手动执行可用:

sudo unattended-upgrade -v

正式服务器应先在测试机或相同快照上验证,尤其是启用了第三方仓库和自编译组件的机器。

六、查看日志与建立告警

ls -l /var/log/unattended-upgrades/
less /var/log/unattended-upgrades/unattended-upgrades.log
less /var/log/unattended-upgrades/unattended-upgrades-dpkg.log
journalctl -u unattended-upgrades --since today

关注失败的软件包、被保留(Kept back)的更新、磁盘空间不足和需要重启提示。至少定期检查一次,而不是假设“自动”就永远成功。

一个稳妥流程是:每日自动安装官方安全更新;监控失败和重启需求;普通功能更新在维护窗口人工执行;大版本升级另行测试和备份。自动化的价值是稳定重复,不是隐藏失败。

七、查看合并后的真实配置

APT 会按文件名顺序合并 /etc/apt/apt.conf.d/ 下的配置。只查看一个文件可能误判最终值,可用:

apt-config dump | grep -i -E 'Periodic|Unattended|Automatic-Reboot'

同一选项在高编号文件中重新定义时,后者可能覆盖前者。修改后要再次运行 dry-run,并检查输出中的 Allowed origins 和准备升级的软件包,而不是只确认命令没有报错。

八、如何知道自动更新失败了

只有日志而没人看,失败就会长期沉默。小型服务器至少可用定时巡检检查最近日志、失败的 systemd 单元、磁盘空间和重启标记:

systemctl --failed
df -h
journalctl -u unattended-upgrades --since yesterday --no-pager

有邮件系统或监控平台时,可把失败状态发送给管理员。告警中不要附带仓库凭据、访问令牌等敏感配置。多台服务器应使用集中监控,避免逐台凭记忆检查。

九、自动更新与备份的关系

安全更新通常可靠,但不能代替备份。更新前后都可能发生应用配置不兼容、服务自动重启或磁盘写满。数据库要有独立备份,关键配置可用版本控制,虚拟机快照只适合短期回退。

当某项业务确实不能自动重启时,不要把整台服务器的安全更新全部关闭。优先为特定软件设置维护策略,保留其他安全修复,并记录尚未安装的漏洞更新。风险管理是明确取舍,不是永久搁置。

本文为中文学习整理。资料来源:Ubuntu Server 官方文档:Automatic updates。

评论一下?

OωO
取消