必须优先锁定内核、基础运行时(glibc/openssl)、核心系统服务(systemd/dbus)及深度定制组件,Debian/Ubuntu用apt-mark hold精准控制,RHEL系用dnf versionlock管理多版本,并需通过--dry-run等三步验证生效。

关键系统服务一旦被意外更新,轻则配置失效、服务中断,重则引发整站崩溃或安全策略失效。锁定不是拒绝更新,而是把控制权收回来——只在你确认安全、完成测试后才升级。
哪些服务必须优先锁定
不是所有包都值得锁,但以下几类组件一旦变动,风险极高:
- 内核(linux-image-*):驱动、容器运行时、SELinux 策略均依赖 ABI 稳定性,主版本切换常导致硬件不可用或服务起不来
- 基础运行时(glibc、openssl、libcap):几乎所有动态链接程序都依赖它们,小版本升级也可能破坏二进制兼容性
- 核心系统服务(systemd、dbus、rpm/dpkg):影响启动流程、权限模型和包管理逻辑,升级失败可能使系统无法维护
- 已深度定制的组件(如特定版本的 NVIDIA 驱动、监控 agent 或 kernel-module):绑定固定内核头文件或内部接口,换版本即失效
Debian/Ubuntu:用 apt-mark hold 精准生效
这是最轻量、最直接的方式,修改 /var/lib/apt/extended_states 记录状态,对 apt upgrade 和 apt full-upgrade 均有效:
- 锁定当前安装的 nginx 和 PHP-FPM:
sudo apt-mark hold nginx php-fpm - 查看所有被锁包:
apt-mark showhold - 解除锁定(升级前必需):
sudo apt-mark unhold nginx
注意:它不阻止手动指定版本安装(如 apt install nginx=1.20.1-1~focal),也不影响安全更新推送机制本身——除非该包本身就是 CVE 修复目标。
RHEL/CentOS/Rocky:用 dnf versionlock 管理多版本
需先启用插件:sudo dnf install python3-dnf-plugins-extras-versionlock,规则写入 /etc/dnf/plugins/versionlock.list,支持通配符与精确版本:
- 锁定当前内核:
sudo dnf versionlock add kernel-$(uname -r) - 锁定 glibc 当前版本:
sudo dnf versionlock add glibc-$(rpm -q glibc | sed 's/glibc-//') - 查看锁定列表:
dnf versionlock list - 临时解锁单个包:
sudo dnf versionlock delete glibc
versionlock 不干扰 dnf update --advisory=RHSA-xxxx 手动打补丁,适合既要稳又要安的生产环境。
验证是否真正生效
锁定后务必验证,避免配置遗漏:
- 执行
apt list --upgradable(Debian/Ubuntu)或dnf list upgrades(RHEL系),确认目标包未出现在列表中 - 运行一次模拟升级:
apt upgrade --dry-run或dnf update --assumeno,观察输出是否跳过被锁包 - 检查日志:
grep "held back" /var/log/apt/history.log(Ubuntu)或journalctl -u dnf-makecache | grep versionlock(RHEL)

















