Ubuntu没有官方“系统更新白名单”机制,实际通过三种方式近似实现:1. 用apt-mark hold锁定特定包;2. 限制apt仅从指定源更新;3. 配置unattended-upgrades按origin/suite/component筛选自动更新。

Ubuntu 没有官方支持的「系统更新白名单」机制——即不能像包管理器那样直接配置“只允许升级某些软件包,禁止其他所有更新”。apt 本身不提供白名单式更新控制,所谓“更新白名单”实际是通过包锁定(hold)+ 源限制 + 手动干预组合实现的近似效果。
下面分三种真实可行、被广泛使用的场景说明怎么做:
如何用 apt-mark hold 锁定特定软件包不更新
这是最常用、最稳妥的“白名单等效操作”:把你不希望升级的包锁住,其余照常更新。-
apt-mark hold不是黑名单,而是“保留旧版本”的显式指令,适用于内核、驱动、关键服务等怕升级出问题的包 - 锁定后,
apt upgrade和apt full-upgrade都会跳过这些包,但不会报错或中断流程 - 锁定状态可随时解除,不影响后续维护
操作步骤:
- 查看当前是否已被锁定:
apt-mark showhold - 锁定一个包(例如
nvidia-driver-535):sudo apt-mark hold nvidia-driver-535 - 验证是否生效:
apt list --upgradable中不应再出现该包 - 解除锁定:
sudo apt-mark unhold nvidia-driver-535
注意:不要对 linux-image-<em></em> 或 linux-headers- 无差别全锁,否则安全更新可能被拦住;建议按具体版本号精确锁定(如 linux-image-6.8.0-45-generic)。
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
如何限制 apt 只从特定源更新(模拟源级白名单)
如果你只想让某些软件来自某个仓库(比如只信任官方security.ubuntu.com,禁用第三方 PPA),本质是控制 /etc/apt/sources.list 和 /etc/apt/sources.list.d/ 下的启用状态。
-
apt从所有启用的源合并获取可用更新,没有“优先级白名单”,但可通过注释/移除/禁用源来缩小范围 - 第三方源(尤其是 PPA)往往是更新冲突和兼容性问题的来源,关闭它们是最有效的“收紧更新面”手段
实操建议:
- 列出所有启用的源:
grep -v "^#" /etc/apt/sources.list /etc/apt/sources.list.d/*.list | grep "deb " | grep -v "disabled" - 临时禁用某个 PPA:
sudo sed -i 's/^deb /#deb /' /etc/apt/sources.list.d/some-ppa.list - 只保留官方源和 security 更新源(推荐最小化配置):
sudo sed -i '/^deb.*archive.ubuntu.com/!{/^deb.*security.ubuntu.com/!s/^deb/#deb/}' /etc/apt/sources.list - 执行
sudo apt update后,apt list --upgradable显示的包就仅来自你留下的源
⚠️ 风险提示:禁用源后,依赖这些源安装的软件将无法获得更新,甚至可能因依赖缺失导致 apt upgrade 失败。务必先确认哪些包来自哪些源(apt policy <package></package>)。
如何用 unattended-upgrades 配置自动更新的包筛选(接近白名单)
Ubuntu 的自动更新服务unattended-upgrades 支持基于 origin、suite、component 的过滤,虽不是“包名白名单”,但能按来源精细控制。
- 它读取
/etc/apt/apt.conf.d/50unattended-upgrades,其中Unattended-Upgrade::Allowed-Origins是关键配置项 - 常见值如
"${distro_id}:${distro_codename}-security";表示只允许安全更新;加上"${distro_id}:${distro_codename}-updates";则扩展到常规更新 - 如果你只希望升级
main组件(排除universe和multiverse),就得显式删掉对应行
典型配置片段(/etc/apt/apt.conf.d/50unattended-upgrades):
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
// "${distro_id}:${distro_codename}-updates"; ← 注释掉这行,就禁用非安全更新
};
Unattended-Upgrade::Package-Blacklist {
// 空列表表示不限制,但可填入包名实现“反向白名单”
};
验证是否生效:
- 检查当前策略:
sudo unattended-upgrade --dry-run -d - 查看实际将被升级的包:
sudo unattended-upgrade --dry-run 2>&1 | grep "Installing"
真正想实现“只升级 nginx 和 openssl”,目前没有开箱即用的方式——你得靠 apt-mark hold 锁住其余所有包,或写脚本解析 apt list --upgradable 输出后手动 apt install 指定包。这种需求本身就偏离了 Ubuntu 的设计哲学,容易引发依赖断裂。
最后一句提醒:所谓“更新白名单”,本质上是在稳定性和安全性之间做权衡。锁太多包会漏掉关键修复,锁太少又失去控制意义。最务实的做法是——只锁明确知道会出问题的包,其余交给 unattended-upgrades 自动处理,并定期人工 review apt list --upgradable 输出。

















