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。
评论一下?