服务器安全更新:自动更新怎么配,半夜不被打补丁吓醒
VPS 最大的安全风险是忘了更新:Debian/Ubuntu 的 unattended-upgrades 和 RHEL 系的 dnf-automatic 配置全图解,安全补丁自动打。
我是小够,只推够用的 VPS。
VPS 被黑,十有八九不是密码太简单,而是系统补丁太旧。一个公开的高危漏洞,从曝光到被批量扫,全网可能只要几天。你手动更新?忙起来两三个月想不起来一次,裸奔的就是这段时间。自动安全更新就是干这个的:只打安全补丁,不动大版本,配一次,剩下交给机器。
不更新会发生什么:典型被黑路径
别觉得"我这小博客没人惦记"。黑客不挑食,扫的是全网,流程高度自动化:
- 高危漏洞公开,网上出现利用代码
- 扫描器全网扫这个漏洞,没打补丁的机器一扫一个准
- 中招的机器被装挖矿木马或当跳板,CPU 跑满、流量异常
- 你发现时,机器已经替别人打工半个月了
整个过程不需要有人"盯上你",你是被批量扫中的分母。打补丁是最便宜的防御,自动打补丁是性价比最高的防御。
手动更新 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 / Ubuntu | unattended-upgrades | 只勾 -security 源 |
| RHEL / CentOS / Rocky / Alma | dnf-automatic | upgrade_type = security |
| Arch | 手动 / 定时 pacman | 滚动更新不适合自动,手动来 |
Arch 系是滚动更新,没有"安全更新"和"功能更新"的区分,不建议无人值守自动更新,手动 pacman -Syu 最稳。玩 Arch 的一般也不需要这篇教程。
自动重启:要不要开
安全补丁里有一种叫内核更新,装完要重启才生效。开不开自动重启,看场景:
- 个人博客、学习机:开。半夜自动重启,几十秒的事,比你手动强。unattended-upgrades 里配
Unattended-Upgrade::Automatic-Reboot "true";再加个时间Unattended-Upgrade::Automatic-Reboot-Time "03:00"; - 跑业务的生产机:别开。重启要自己挑时间,提前通知用户,自动重启可能把正在跑的任务掐断
够用主义:博客和学习机开自动重启,生产机手动。别一刀切。
验证和日志:别配完就不管
配完验证三件事:
- 干跑一次:
sudo unattended-upgrades --dry-run -d(Debian 系),看配置有没有报错 - 看日志:
/var/log/unattended-upgrades/,每次跑完都有记录,装了什么一清二楚 - 设个提醒:每个月抽一天看一眼日志,确认它真的在干活
自动更新不是"配完就忘",是"配完少操心"。每个月花一分钟看眼日志,比出了事再查强。
更新翻车了怎么办
安全补丁翻车的概率极低,但不是零。翻车了别慌,按这个顺序处理:
- 看日志定位:先看更新日志,确认是哪次更新、装了什么
- 快照回滚:商家后台有快照功能的,直接回滚到更新前,这是买VPS时选"带免费快照商家"的原因
- 没快照就重装:学习机直接重装,十分钟的事;有数据的机器,靠的就是平时配好的定时备份
所以自动更新和备份、快照是绑定的:备份是自动更新的底气。没备份就别开自动重启,翻车了没退路。
三个坑
- 磁盘满了更新失败:
/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》那篇讲过