首页/安全/安全加固速查/自动安全更新(unattended-upgrades)
补丁与漏洞管理50 条

自动安全更新(unattended-upgrades)

无人值守升级可自动装安全补丁:适合基线不敏感的角色,但要配置重启策略与黑名单,避免半夜自动重启生产。

安全加固速查安全更新于 2026-10-13

自动更新要配边界

无人值守升级(unattended-upgrades)让系统自动安装安全补丁,适合对变更不敏感的角色。它的风险点也很明确:默认的重启行为可能在夜里把生产机重启,或者把关键中间件的更新在业务高峰装上引发兼容问题。正确做法是让自动化只负责「装」,重启与高风险包交给人工或编排窗口。

基本信息

适用平台Linux(Debian / Ubuntu)
风险等级中
基线要求自动化策略与业务节奏匹配
关键配置/etc/apt/apt.conf.d/ 下的 20auto-upgrades 与 50unattended-upgrades
验证方式unattended-upgrade --dry-run

典型使用场景

  • 大批量非核心主机希望免人工打安全补丁
  • 排查机器半夜自动重启的原因
  • 把中间件排除在自动升级之外
  • 新机器装机时统一配置自动更新策略
  • 上线前用 dry-run 验证会安装哪些包

配置与验证

配置与验证
sudo dpkg-reconfigure -plow unattended-upgrades   # 交互式启用自动更新
grep -E 'Unattended-Upgrade|Automatic-Reboot' /etc/apt/apt.conf.d/20auto-upgrades /etc/apt/apt.conf.d/50unattended-upgrades   # 核对关键参数
sudo unattended-upgrade --dry-run -d 2>&1 | tail -20   # 干跑看会安装哪些包
systemctl status unattended-upgrades | head -5    # 确认定时器与服务状态

关键参数示例

关键参数示例
# Unattended-Upgrade::Automatic-Reboot "false";                      # 关闭自动重启
# Unattended-Upgrade::Automatic-Reboot-Time "03:00";                  # 如需重启则指定时间
# Unattended-Upgrade::Package-Blacklist { "nginx"; "mysql-server"; };  # 排除高风险包

配置项读法

配置项含义注意点
Automatic-Reboot内核更新后是否自动重启生产上建议关闭
Automatic-Reboot-Time允许重启的时间点需与业务低峰一致
Package-Blacklist不参与自动升级的包核对实际包名与变体名
更新源范围是否只安装安全更新避免引入功能性变更
定时器状态unattended-upgrades 是否在跑确认服务真的在执行
自动重启是常见事故源:内核更新后的重启应由业务窗口决定,自动化只负责装包,重启交给人工或编排流程。
黑名单里写了包名要核对仓库里的实际名称(不少是带后缀的变体名),名字对不上等于没排除,升级照样会发生。
自动更新跑起来后要留下一次执行记录:从 /var/log/unattended-upgrades/ 的日志确认每个周期真的装了包,长期看不到日志说明服务根本没有生效。

易错点

  • 只在测试环境验证过就直接推到全部生产机,先在少量非核心机器上跑一个完整周期
  • 黑名单写了包名但仓库里实际是变体名,排除没有生效,高风险包照样被自动升级
  • 开了自动重启却没设时间窗口,凌晨更新后业务在无人值守时中断
  • 配好后不检查定时器状态,服务实际没在跑,自以为在自动打补丁

数据来源与参考

  • Ubuntu 文档:Automatic Updates
  • Debian Wiki:unattended-upgrades

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌