在计算机的世界里,生产环境就像是一个繁忙的工厂,每一台服务器都在有条不紊地运转着,为业务提供着坚实的支持。而 apt 作为 Debian 系 Linux 系统中常用的软件包管理工具,在日常的软件安装、更新等操作中扮演着重要角色。不过在生产环境中,apt 的自动升级有时候会成为一个潜在的风险源,可能会导致软件版本不兼容、服务异常等问题。所以,学会如何禁止 apt 自动升级就显得尤为重要。下面,我们就来详细探讨一下关闭自动更新、锁定更新服务以及配置更新白名单这三种配置方法。
一、关闭自动更新
1.1 应用场景
在生产环境中,很多时候我们希望服务器的软件版本保持稳定,不希望因为自动更新而引入新的问题。比如,某个业务系统依赖特定版本的数据库软件,一旦自动更新到新版本,可能会出现兼容性问题,导致业务无法正常运行。这时候,关闭 apt 的自动更新就可以避免这种情况的发生。
1.2 技术优缺点
优点很明显,能够确保系统软件版本的稳定性,避免因自动更新带来的潜在风险。缺点则是需要手动去关注软件的更新情况,并在合适的时候进行更新,增加了一定的运维工作量。
1.3 详细步骤及示例
在 Debian 系系统中,apt 的自动更新通常是由 unattended-upgrades 服务来实现的。我们可以通过以下步骤关闭它。
步骤 1:检查 unattended-upgrades 服务状态
# 检查服务状态
sudo systemctl status unattended-upgrades
如果服务是运行状态,输出结果会显示 active (running)。
步骤 2:停止 unattended-upgrades 服务
# 停止服务
sudo systemctl stop unattended-upgrades
步骤 3:禁止 unattended-upgrades 服务开机自启
# 禁止开机自启
sudo systemctl disable unattended-upgrades
另外,我们还可以通过修改配置文件来进一步确保自动更新不会启动。编辑 /etc/apt/apt.conf.d/20auto-upgrades 文件:
# 编辑配置文件
sudo nano /etc/apt/apt.conf.d/20auto-upgrades
将文件内容修改为以下内容:
// 禁止自动下载更新包
APT::Periodic::Download-Upgradeable-Packages "0";
// 禁止自动安装更新
APT::Periodic::Unattended-Upgrade "0";
保存并退出文件。这样,apt 的自动更新就被彻底关闭了。
1.4 注意事项
在关闭自动更新后,我们要定期手动检查软件的更新情况,并在合适的时间进行更新。可以使用 sudo apt update 和 sudo apt list --upgradable 命令来检查可用的更新。
二、锁定更新服务
2.1 应用场景
有些时候,我们可能只需要锁定某些特定软件的更新,而其他软件还是可以正常更新。比如,某个关键的中间件软件,当前版本已经经过了长时间的测试和验证,非常稳定,我们不希望它被自动更新。这时候,就可以使用锁定更新服务的方法。
2.2 技术优缺点
优点是能够灵活地控制特定软件的更新,保证关键软件的稳定性。缺点是如果软件包的依赖关系比较复杂,可能会影响到其他软件的更新。
2.3 详细步骤及示例
我们可以使用 apt-mark 命令来锁定软件包的版本。
示例:锁定 nginx 软件包的更新
# 锁定 nginx 软件包
sudo apt-mark hold nginx
执行上述命令后,nginx 软件包就被锁定了,不会再自动更新。如果想要查看哪些软件包被锁定了,可以使用以下命令:
# 查看被锁定的软件包
sudo apt-mark showhold
如果后续需要解除锁定,让软件包可以正常更新,可以使用以下命令:
# 解除 nginx 软件包的锁定
sudo apt-mark unhold nginx
2.4 注意事项
在锁定软件包时,要充分考虑软件包之间的依赖关系。如果锁定了一个关键的依赖包,可能会导致其他依赖该包的软件无法正常更新,甚至无法安装新的软件。
三、配置更新白名单
3.1 应用场景
当我们希望只允许某些特定的软件进行自动更新,而其他软件保持不变时,就可以使用配置更新白名单的方法。比如,我们只希望系统的安全补丁可以自动更新,而其他应用程序的更新需要手动处理。
3.2 技术优缺点
优点是能够精确控制哪些软件可以自动更新,提高了系统的安全性和稳定性。缺点是配置相对复杂,需要对软件包有一定的了解。
3.3 详细步骤及示例
我们可以通过修改 /etc/apt/apt.conf.d/50unattended-upgrades 文件来配置更新白名单。
步骤 1:备份原配置文件
# 备份配置文件
sudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak
步骤 2:编辑配置文件
# 编辑配置文件
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
在文件中找到以下部分:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
// "${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
};
默认情况下,只有安全更新是允许自动更新的。如果我们想要添加其他软件包到白名单,可以在 Unattended-Upgrade::Package-Blacklist 部分进行修改。例如,我们只希望 openssh-server 可以自动更新,可以将配置修改为:
Unattended-Upgrade::Package-Blacklist {
// 排除所有软件包
"*";
// 允许 openssh-server 自动更新,添加例外
"!openssh-server";
};
保存并退出文件。这样,只有 openssh-server 会被允许自动更新,其他软件包则不会。
3.4 注意事项
在配置更新白名单时,要确保白名单中的软件包不会因为自动更新而引入新的问题。同时,要定期检查白名单的配置是否需要调整。
四、文章总结
在生产环境中,禁止 apt 自动升级是保障系统稳定性和业务正常运行的重要措施。关闭自动更新可以从整体上避免自动更新带来的风险,但需要增加手动更新的工作量;锁定更新服务可以灵活控制特定软件的更新,适用于关键软件的版本保护;配置更新白名单则可以精确地控制哪些软件可以自动更新,提高系统的安全性和稳定性。我们可以根据实际的应用场景和需求,选择合适的配置方法。同时,无论采用哪种方法,都要定期关注系统的软件更新情况,在合适的时候进行更新,以保证系统的安全性和性能。
评论