Linux 系统更新与内核升级实战:apt 安全更新、内核管理与重启策略

很多站长买来服务器以后,装好面板、部署完网站就再也不管系统了,直到某天网站被入侵、被挂马、被挖矿,才追悔莫及。根据安全机构的统计,大量服务器被攻破的根因就是系统存在已知漏洞而没有及时打补丁。Linux 系统更新这件事,看似简单,其实有不少门道:apt update 和 apt upgrade 有什么区别?如何只自动更新安全补丁而不乱动其他软件?内核要不要升级、怎么升级、升级后怎么回滚?重启服务器会不会导致网站长时间不可用?这篇文章就把这些问题一次讲清楚。

为什么系统更新是安全底线

Linux 发行版的维护团队会持续修复安全漏洞,包括内核漏洞、OpenSSL 漏洞、Nginx 和 PHP 等常用软件的漏洞。这些补丁通过系统更新通道发布,只要你及时更新,漏洞就被堵上了。反过来,如果长期不更新,服务器就像一个没有锁的门,攻击者用现成的漏洞利用工具就能轻松闯入。特别是挖矿木马和勒索病毒,它们扫描全网,专挑没打补丁的服务器下手。系统更新是你花最少的时间、获得最实在的安全加固手段,没有之一。

更新前的准备工作

虽然正常更新很少出问题,但服务器是有业务的,谨慎一点没有坏处。更新前建议做三件事:

  • 备份:数据库执行一次 mysqldump 或 pg_dump 备份,网站目录用 tar 打包一份,哪怕只是临时放在本机磁盘。
  • 检查磁盘空间:df -h 确认根分区有足够剩余空间,内核更新和软件包下载都需要空间,空间不足会导致更新中断。
  • 选好时间窗口:不要在网站流量高峰期做重大更新,尤其是涉及重启的操作,选在凌晨低峰期最稳妥。

如果服务器是云服务器,更新前还可以在云控制台打一个快照,万一更新后出现意外,几分钟就能回滚到更新前的状态,这是最省心的保险。

apt 更新命令详解

Debian 和 Ubuntu 系统使用 apt 管理软件包,三个命令要分清:

sudo apt update

apt update 只是从软件源拉取最新的软件包索引,告诉系统"有哪些更新可用",它本身不会更新任何软件,速度快,可以随时执行。执行完可以查看有哪些可更新的包:

apt list --upgradable

然后执行真正的更新:

sudo apt upgrade

apt upgrade 会把所有可更新的软件包升级到新版本,但不会删除或新增软件包,也不会升级内核到跨版本的新内核,是最稳妥的常规更新命令。如果某些更新需要安装新依赖或删除旧包,就要用:

sudo apt full-upgrade

full-upgrade 会智能处理依赖关系,可能安装新包或删除旧包,适合发行版小版本升级等场景。日常维护中,先 apt update 再 apt upgrade 就够了,升级前用 apt list --upgradable 和 apt changelog 软件包名 查看更新内容,做到心里有数。

自动安全更新:unattended-upgrades

人总有忘记更新的时候,尤其是节假日。Debian 和 Ubuntu 提供了 unattended-upgrades 工具,可以自动安装安全补丁,让服务器在无人值守的情况下保持安全。安装并启用:

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades

它的配置文件在 /etc/apt/apt.conf.d/50unattended-upgrades,默认只自动更新安全相关的软件包,不会自动更新普通软件,更不会自动重启服务器。常用配置项包括:

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Automatic-Reboot "false";

第一段表示只更新 security 源里的安全补丁,第二段明确禁止自动重启。如果希望更新后收到通知,可以配置邮件,或者把日志写到文件里定期查看。自动安全更新开启后,再配合每天凌晨的定时备份,服务器就进入了一个相对省心的状态。

内核升级与多内核管理

内核是操作系统的核心,负责管理 CPU、内存、网络等硬件资源。内核漏洞的危害往往比普通软件漏洞更大,所以内核更新值得重视。Debian 和 Ubuntu 下,常规的内核安全更新会随 apt upgrade 一起安装,无需特殊操作。如果需要安装更新的内核版本,可以:

sudo apt install linux-image-amd64

安装新内核后,系统并不会立刻使用它,需要重启才会加载新内核。查看当前运行的内核和已安装的内核列表:

uname -r                       # 当前运行的内核版本
dpkg --list | grep linux-image # 已安装的所有内核

系统会保留多个内核版本,重启时通过 GRUB 菜单选择。旧内核不建议全部删除,保留一两个可以应急回滚。清理确实不用的旧内核可以用:

sudo apt autoremove --purge

apt autoremove 会自动移除不再需要的旧内核和依赖包,但一般会保留当前内核和最近的一两个版本,不会误删正在用的内核。

重启策略:什么时候必须重启

更新完成后不一定需要重启:普通的软件包更新(比如 PHP 小版本、Nginx 补丁)重启对应服务即可生效。但有两类更新必须重启服务器:内核更新,以及 glibc、systemd 这类底层基础库的更新。判断系统是否需要重启,可以用工具检查:

sudo needs-restarting      # RHEL 系
sudo checkrestart          # Debian 系(需安装 debian-goodies)

这类工具会列出哪些进程还在使用旧版本的库文件,从而判断是否必须重启。重启前注意几点:先确认备份完成、数据库正常关闭;尽量选低峰期;如果网站通过负载均衡或 CDN 提供服务,可以先从调度中摘除这台服务器,重启完成后再加回来,实现零感知维护。重启后执行 uptime、uname -r、systemctl status nginx 等命令,确认系统正常、内核是新版本、所有服务都起来了。

内核出问题怎么回滚

万一新内核导致网卡驱动异常或者网站无法访问,别慌,回滚很简单。重启时在 GRUB 菜单的高级选项里选择旧内核启动即可。如果重启后默认还是新内核,可以手动设置默认启动项:

sudo grep menuentry /boot/grub/grub.cfg   # 查看所有可用的启动项
sudo grub-set-default "旧内核的菜单名"
sudo update-grub

确认旧内核稳定后,再把有问题的内核删除,删除后记得 update-grub 刷新引导菜单。

CentOS 与 RHEL 系统的差异

CentOS、Rocky Linux、AlmaLinux 等 RHEL 系发行版使用 yum 或 dnf 命令:yum update 一键更新所有软件包,yum --security update 只更新安全补丁,内核通过 yum update kernel 升级。判断是否需要重启同样用 needs-restarting。核心思路与 Debian 系完全一致:先备份、分批更新、关注安全补丁、谨慎对待重启。

常见问题

问:apt upgrade 会不会把网站搞挂?答:常规的软件包更新一般不会影响运行中的服务,但 PHP 或 Nginx 更新后建议重启对应服务让新版本生效。更新前做好备份、选择低峰期操作,风险完全可控。

问:要不要追着最新内核升级?答:不需要。跟随发行版的安全更新即可,不必手动安装最新内核。生产服务器追求的是稳定,官方维护渠道里的内核版本已经经过了充分测试。

问:更新后 SSH 突然连不上怎么办?答:先检查是不是防火墙规则被更新覆盖,或者 SSH 服务没有自动启动。通过云控制台的 VNC 或救援模式登录服务器,执行 systemctl start sshd 即可恢复。

问:unattended-upgrades 会自动重启服务器吗?答:默认不会。配置文件里的 Automatic-Reboot 默认是 false,只有在显式开启的情况下,系统才会在需要重启时自动重启,个人服务器保持默认即可。

问:更新和备份哪个更重要?答:都重要,而且顺序有讲究:先备份、后更新。备份是更新操作的保险,更新是系统安全的保障,两者配合才是完整的运维习惯。

问:面板(宝塔等)里的更新和命令行更新冲突吗?答:不冲突。面板本质上也是在调用系统的包管理工具,只是换了个图形界面。两者混用要注意:面板提示的更新数量与命令行 apt list --upgradable 的结果应该一致,如果发现不一致,以命令行结果为准,那才是系统真实的更新状态。

Last modification:August 26th, 2026 at 08:13 am

Leave a Comment