ubuntu/debian系统禁用自动更新需四步同步:停用unattended-upgrades服务(sudo systemctl disable --now unattended-upgrades)、同时修改/etc/apt/apt.conf.d/20auto-upgrades和10periodic将四项apt周期参数全设为"0"、用sudo apt-mark hold锁定所有已安装内核包、禁用motd更新提示及update-notifier服务,缺一不可。

unattended-upgrades 是自动更新的根源,禁用它 + 锁定内核包 + 关闭 APT 自动检查,三步缺一不可。只改一个配置,过两天又会悄悄恢复。
怎么停掉 unattended-upgrades 服务(最核心一步)
这个服务才是真正“偷偷下载安装”的执行者,不关它,其他配置都形同虚设。
运行以下命令彻底禁用并停止:
sudo systemctl disable --now unattended-upgrades
验证是否生效:
systemctl is-active unattended-upgrades
输出应为 inactive;如果还是 active,说明服务没真正停掉,可能被其他 timer 触发(比如 apt-daily.timer),需要继续处理。
/etc/apt/apt.conf.d/20auto-upgrades 和 10periodic 怎么改才有效
这两个文件控制 APT 的周期性行为,但注意:20auto-upgrades 优先级高于 10periodic,只改其中一个没用。
必须同时确保两个文件里这四行全设为 "0":
APT::Periodic::Update-Package-Lists "0";APT::Periodic::Download-Upgradeable-Packages "0";APT::Periodic::AutocleanInterval "0";APT::Periodic::Unattended-Upgrade "0";
常见错误:有人只改 20auto-upgrades,但忘了 10periodic 里还有一套默认值,结果重启后自动恢复。
推荐用一行命令覆盖(避免手误):
echo 'APT::Periodic::Update-Package-Lists "0"; APT::Periodic::Download-Upgradeable-Packages "0"; APT::Periodic::AutocleanInterval "0"; APT::Periodic::Unattended-Upgrade "0";' | sudo tee /etc/apt/apt.conf.d/20auto-upgrades /etc/apt/apt.conf.d/10periodic > /dev/null
为什么还要用 apt-mark hold 锁内核包
即使关了自动升级,手动执行 apt upgrade 或 apt dist-upgrade 时,APT 仍会把新内核当普通包一起升级——这对生产服务器是高危操作。
锁定当前内核版本最稳妥的方式是:
sudo apt-mark hold $(dpkg --get-selections | grep 'linux-image\|linux-headers' | grep -v deinstall | awk '{print $1}')
这条命令会自动找出所有已安装的内核镜像和头文件包,并全部 hold。之后再运行 apt upgrade,这些包就不会出现在待升级列表里。
注意:apt-mark hold 不影响安全补丁(比如 linux-image-5.4.0-100-generic 的微版本更新),只阻止大版本跃迁(如从 5.4 升到 6.1)。
别漏掉 MOTD 和 update-notifier 的干扰项
有些系统会在登录时显示 “X updates available”,或者关机时卡在 “正在进行无人值守升级” —— 这些不是真在更新,只是提示组件还在运行。
清理方法:
- 禁用 MOTD 更新提示:
sudo chmod -x /etc/update-motd.d/90-updates-available /etc/update-motd.d/91-release-upgrade - 清除缓存标记:
sudo rm -f /var/lib/update-notifier/updates-available /var/lib/ubuntu-release-upgrader/release-upgrade-available - 停掉通知服务:
sudo systemctl disable --now update-notifier-motd.timer
否则你明明关了更新,每次 SSH 登录还看到一堆红色提醒,容易误判。
实际环境中,unattended-upgrades 服务、APT 周期配置、内核锁定、MOTD 提示这四块必须同步处理。少一步,就可能在某次 reboot 后发现内核变了、SSH 连不上、或磁盘被旧日志撑爆——而这些都不是“突然出问题”,全是配置残留导致的延迟触发。











