服务器安全更新:自动更新怎么配,半夜不被打补丁吓醒

VPS 最大的安全风险是忘了更新:Debian/Ubuntu 的 unattended-upgrades 和 RHEL 系的 dnf-automatic 配置全图解,安全补丁自动打。

我是小够,只推够用的 VPS。

VPS 被黑,十有八九不是密码太简单,而是系统补丁太旧。一个公开的高危漏洞,从曝光到被批量扫,全网可能只要几天。你手动更新?忙起来两三个月想不起来一次,裸奔的就是这段时间。自动安全更新就是干这个的:只打安全补丁,不动大版本,配一次,剩下交给机器。

不更新会发生什么:典型被黑路径

别觉得"我这小博客没人惦记"。黑客不挑食,扫的是全网,流程高度自动化:

  1. 高危漏洞公开,网上出现利用代码
  2. 扫描器全网扫这个漏洞,没打补丁的机器一扫一个准
  3. 中招的机器被装挖矿木马或当跳板,CPU 跑满、流量异常
  4. 你发现时,机器已经替别人打工半个月了

整个过程不需要有人"盯上你",你是被批量扫中的分母。打补丁是最便宜的防御,自动打补丁是性价比最高的防御。

手动更新 vs 自动更新

手动更新自动安全更新
及时性想起来才做每天检查
风险拖延=裸奔只打安全补丁,风险低
适合生产机大版本升级所有机器的安全补丁

结论:安全补丁交给自动,大版本升级留给手动,两者不冲突。

先说结论:只自动安全更新

自动更新分两种:安全更新(修漏洞)和大版本升级(换系统版本)。我们只自动前者,原因很简单:

  • 安全补丁:修漏洞,不改功能,风险极低,适合自动
  • 大版本升级:可能改配置、停服务,必须手动,找个空闲时间盯着做

记住这条线,后面所有配置都围绕它:安全补丁自动打,大版本手动升。这条线守住了,自动更新就翻不了大车。

先确认你的系统,再动手

配之前先看自己是什么系统,命令对不上会白忙活:

cat /etc/os-release

看 NAME 那一行:Debian/Ubuntu 走 unattended-upgrades,RHEL/CentOS/Rocky/Alma 走 dnf-automatic。别在 Ubuntu 上敲 dnf,也别在 CentOS 上找 apt,听起来像笑话,但新手真干过。

Debian / Ubuntu:unattended-upgrades

Debian 和 Ubuntu 自带这个工具,没装就装一下:

sudo apt install unattended-upgrades -y

装完配两个地方。先开自动更新:

sudo dpkg-reconfigure -plow unattended-upgrades

选 Yes,搞定一半。然后编辑配置文件,确认只装安全更新:

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

找到 Unattended-Upgrade::Allowed-Origins 这一段,默认一般已经只勾了安全源(-security),别手贱把普通更新源也勾上。想收到更新邮件,配这一行:

Unattended-Upgrade::Mail "你的邮箱";

需要系统装了 mail 工具才能发,个人博客不配也行,日志里能查。

最后确认定时任务生效:

systemctl status unattended-upgrades

看到 active 就是跑起来了。它每天自动跑一次,有安全补丁就装,没有就安静。想改检查时间,改 /etc/apt/apt.conf.d/20auto-upgrades 里的 APT::Periodic::Unattended-Upgrade,默认每天一次,够用了,别调太频繁。

RHEL / CentOS / Rocky:dnf-automatic

RHEL 系用 dnf-automatic,装上:

sudo dnf install dnf-automatic -y

编辑配置:

sudo nano /etc/dnf/automatic.conf

改三个关键项:

upgrade_type = security
apply_updates = yes
emit_via = stdio

upgrade_type = security 是核心:只装安全更新。apply_updates = yes 是自动应用,默认是 no(只下载不装),记得改。配完启动定时器:

sudo systemctl enable --now dnf-automatic.timer

enable 是开机自启,--now 是现在就启动,两个都要,别只 enable 不启动,那样要等下次开机才生效。

用 systemctl list-timers | grep dnf 确认定时器在跑。

各发行版配置对照

发行版工具核心配置
Debian / Ubuntuunattended-upgrades只勾 -security 源
RHEL / CentOS / Rocky / Almadnf-automaticupgrade_type = security
Arch手动 / 定时 pacman滚动更新不适合自动,手动来

Arch 系是滚动更新,没有"安全更新"和"功能更新"的区分,不建议无人值守自动更新,手动 pacman -Syu 最稳。玩 Arch 的一般也不需要这篇教程。

自动重启:要不要开

安全补丁里有一种叫内核更新,装完要重启才生效。开不开自动重启,看场景:

  • 个人博客、学习机:开。半夜自动重启,几十秒的事,比你手动强。unattended-upgrades 里配 Unattended-Upgrade::Automatic-Reboot "true"; 再加个时间 Unattended-Upgrade::Automatic-Reboot-Time "03:00";
  • 跑业务的生产机:别开。重启要自己挑时间,提前通知用户,自动重启可能把正在跑的任务掐断

够用主义:博客和学习机开自动重启,生产机手动。别一刀切。

验证和日志:别配完就不管

配完验证三件事:

  1. 干跑一次:sudo unattended-upgrades --dry-run -d(Debian 系),看配置有没有报错
  2. 看日志:/var/log/unattended-upgrades/,每次跑完都有记录,装了什么一清二楚
  3. 设个提醒:每个月抽一天看一眼日志,确认它真的在干活

自动更新不是"配完就忘",是"配完少操心"。每个月花一分钟看眼日志,比出了事再查强。

更新翻车了怎么办

安全补丁翻车的概率极低,但不是零。翻车了别慌,按这个顺序处理:

  1. 看日志定位:先看更新日志,确认是哪次更新、装了什么
  2. 快照回滚:商家后台有快照功能的,直接回滚到更新前,这是买VPS时选"带免费快照商家"的原因
  3. 没快照就重装:学习机直接重装,十分钟的事;有数据的机器,靠的就是平时配好的定时备份

所以自动更新和备份、快照是绑定的:备份是自动更新的底气。没备份就别开自动重启,翻车了没退路。

三个坑

  • 磁盘满了更新失败:/boot 分区满了,新内核装不上。定期 apt autoremove 清旧内核,Ubuntu 尤其注意。配个 cron 每月清一次,一劳永逸
  • 第三方源冲突:加了 Docker、宝塔这些第三方源,自动更新可能装上不兼容的版本。生产机先在测试机上跑一遍,或者把第三方源从自动更新里排除
  • 以为开了就高枕无忧:自动更新只管系统补丁,你网站程序(WordPress、面板)的漏洞还得自己管,两回事。系统补丁+应用更新+强密码,三件套缺一不可

邮件通知:让机器汇报工作

想第一时间知道更新了什么,配邮件通知。Debian 系在 50unattended-upgrades 里加:

Unattended-Upgrade::Mail "你的邮箱";
Unattended-Upgrade::MailOnlyOnError "false";

MailOnlyOnError 设成 false,每次跑完都发邮件;设 true,只有出错才发。个人建议设 true,没消息就是好消息,邮箱不会被刷屏。系统要装 mailutils 或 postfix 才能发信,云商家一般自带,不行就装一个,几分钟的事,配好后发一封测试邮件确认能收到。

小够的检查清单:配完对一遍

  • 只开了安全更新,没勾大版本源
  • 定时器/服务在运行(systemctl 确认过)
  • 自动重启按场景开了或关了(博客开,生产关)
  • 定时备份配好了(更新翻车的退路)
  • 日历上记了每月看一次日志

五项都勾,安全更新这事就算落地了。剩下的,就是每个月花一分钟看眼日志,确认机器还在替你干活。

小够提醒

  • 新开的 VPS,第一件事就是配自动安全更新,比装面板优先级高
  • 大版本升级(比如 Ubuntu 22.04 升 24.04)永远手动,先快照再升级,这是铁律
  • 备份和自动更新是两兄弟:更新前有备份,更新翻车了能回滚,cron 定时备份配上,前面《定时任务 cron》那篇讲过