如何保持 Rocky Linux 9 服务器更新
介绍
在本教程中,您将探索一些使 Rocky Linux 9 服务器堆栈保持最新的最佳实践。与网络安全强化一样,您可以采取许多步骤来确保您的服务器在未来无需干预的情况下继续安全运行。
除了自动为您配置的之外,您还可以将许多工具和配置应用于大多数 Rocky Linux 服务器。如果您正在执行自己的服务器管理,手动修补所有环境可能会造成破坏并容易出错。
本教程将涵盖:
- 按照应用程序管理的最佳做法测试平稳重启,以尽量减少维护更新带来的任何并发症
- 为您机器上运行的大多数包和库配置自动更新
- 实时内核补丁,以及有关内核更新的其他最佳实践
先决条件
- 一台 Rocky Linux 9 服务器和一个具有 sudo 权限的非根用户。您可以在我们的使用 Rocky Linux 9 进行初始服务器设置指南中详细了解如何为用户设置这些权限。
第 1 步 – 遵循应用程序管理的最佳实践
配置服务器以进行自动升级的一个基本部分是确保服务器上运行的所有应用程序都能够在计划外停机或重新启动后正确重新启动。 Linux 包管理器旨在在后台无中断地运行,因此必要的维护不会带来任何额外开销。尽管如此,没有一个好的更新策略的最常见原因之一是担心您的服务器在重新启动后的行为方式。
只要有可能,堆栈中的应用程序应由服务器的初始化系统管理,在包括 Rocky Linux 在内的大多数现代 Linux 发行版中,该系统都是 systemd。 Systemd 提供了 systemctl 命令来与您正在运行的服务进行交互,并根据需要自动重启它们。几乎所有通过包管理器安装并设计为在后台运行的软件都应该自动提供 systemd 服务和配置单元文件作为最佳实践。
当运行您自己的软件或从 Git 存储库部署的软件时,编写您自己的单元文件以与 systemd 集成是个不错的主意。作为一种轻量级替代方案,您可能更喜欢使用带有 @reboot
语法的 cron 调度程序之类的工具。
配置到位后,请确保通过重新启动对其进行测试。您可以通过运行 sudo shutdown now -r
重新启动,这将完全停止正在运行的进程并立即重新启动。您还可以指定一个以 hh:mm 为单位的时间,或从现在开始的分钟数,而不是 now
以安排将来重新启动。在任何计划外中断后,生产部署通常不需要您的关注,并且所有必要的服务和端点都应该自动恢复。
现在您已经确保您的环境在维护重启后不会遇到任何问题,在下一步中,您将学习如何安排自动升级。
第 2 步 – 配置自动升级
Rocky 的包管理器 dnf
有两种执行完整系统升级的主要方法。您可以运行 dnf upgrade
而无需指定包来升级系统上的每个包。您还可以运行 dnf upgrade-minimal
将每个包仅升级到最新的错误修复或安全补丁版本,这将执行必要的维护,同时避免任何潜在的上游破坏性更改。您可以从 dnf 文档中阅读有关 dnf
命令的更多信息。
Rocky 还提供了一个名为 dnf-automatic
的独特工具,可以自动为您的服务器检索和安装安全补丁和其他必要的升级。您可以使用 dnf
安装它:
- sudo dnf install dnf-automatic -y
dnf-automatic
安装后不会自动启用。相反,它提供了几种不同的服务,您可以向 Systemd 注册这些服务以自定义其行为。这些都是:
- dnf-automatic – 此服务遵循
/etc/dnf/automatic
中的dnf-automatic
配置文件选项。 - dnf-automatic-notifyonly – 这会覆盖配置文件,仅通知您可用的更新而不是安装它们。
- dnf-automatic-download – 这通过仅下载包而不安装它们来覆盖配置文件。
- dnf-automatic-install – 通过始终安装下载的软件包来覆盖配置文件。
对于本教程,您将启用 dnf-automatic-install
服务,但首先,您将对 dnf-automatic
配置文件进行更改。使用 vi
或您喜欢的文本编辑器打开文件:
- sudo vi /etc/dnf/automatic
[commands]
# What kind of upgrade to perform:
# default = all available upgrades
# security = only the security upgrades
upgrade_type = security
random_sleep = 0
# Maximum time in seconds to wait until the system is on-line and able to
# connect to remote repositories.
network_online_timeout = 60
# To just receive updates use dnf-automatic-notifyonly.timer
# Whether updates should be downloaded when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
download_updates = yes
# Whether updates should be applied when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
apply_updates = no
…
此文件中的大多数选项对应于不同 Systemd 服务提供的各种覆盖。 upgrade_type
选项是个例外,它默认设置为 default
。如果您要实施自动升级(最主动的配置),最好只默认安装安全升级,以避免功能发生意外变化。如上例所示,将 upgrade_type
值更改为 security
,然后保存并关闭文件。如果您正在使用 vi
,您可以通过输入 :x
来保存并退出。
现在您可以使用 systemctl
启用该服务:
- sudo systemctl enable dnf-automatic-install.timer
您可以使用 systemctl
检查以确保 dnf-automatic-install
服务正常运行:
- sudo systemctl status dnf-automatic-install
Output● dnf-automatic-install.service - dnf automatic install updates
Loaded: loaded (/usr/lib/systemd/system/dnf-automatic-install.service; static; vendor preset: disabled)
Active: inactive (dead)
Jul 14 21:01:03 droplet-name dnf-automatic[40103]: No security updates needed, but 154 updates available
Jul 14 21:01:03 droplet-name systemd[1]: dnf-automatic-install.service: Succeeded.
Jul 14 21:01:03 droplet-name systemd[1]: Started dnf automatic install updates.
与某些 Systemd 服务不同,dnf-automatic
被实现为一个计时器,而不是作为一个在后台永久运行的服务。这意味着 Active: inactive (dead)
的状态是预期的,只要服务已加载并且日志反映成功运行。
您可以使用 systemctl cat
检查该计时器的详细信息:
- sudo systemctl cat dnf-automatic-install.timer
Output[Unit]
Description=dnf-automatic-install timer
# See comment in dnf-makecache.service
ConditionPathExists=!/run/ostree-booted
Wants=network-online.target
[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=60m
Persistent=true
[Install]
WantedBy=timers.target
默认情况下,该服务配置为每天 6:00 左右运行。您不需要更改此值。
您现在应该已准备好解决方案,以确保您服务器上的所有包都能在无需任何额外干预的情况下获得必要的安全更新。在最后一步中,您将学习如何保持内核更新,以及如何在必要时最好地处理服务器重启。
第 3 步 – 更新和实时修补内核
与其他软件包相比,您需要更新系统内核的频率较低。 Linux 内核包含(几乎)所有正在运行的硬件驱动程序,并负责大多数低级系统交互。内核更新通常只有在存在需要解决的高调漏洞、需要使用已公开的新内核功能,或者内核已经变得太旧以至于存在累积错误和漏洞的更大风险时才需要。你可能不知道。
没有自动安排 Linux 内核更新的通用方法。这是因为内核更新历来需要完整的系统重启,如果不对您的环境做出假设,就不可能安排重启。许多服务器应尽可能提供接近 24/7 的可用性,并且重新启动可能需要未知的时间,或者需要手动干预。
大多数生产部署需要额外的复杂性来像这样重新启动以确保服务可用性。例如,您可以使用负载均衡器自动将流量重定向到可以在水平扩展部署中提供相同功能的服务器,同时它们会按顺序单独重新启动,以避免任何可见的停机时间。
启用实时修补以确保内核更新期间的服务器正常运行时间
为避免在内核升级期间停机,您可以使用 Linux 内核的一项称为实时修补的功能。此功能可以在不重新启动的情况下实施内核更新。 Rocky Linux 生态系统中有两个主要的内核实时补丁维护者:Red Hat 的 kpatch
,它为 Red Hat Enterprise Linux 提供实时补丁,以及除了大多数其他主要 Linux 发行版之外还支持 Rocky Linux 的 KernelCare .两者都需要注册才能使用。
由于 Red Hat Enterprise Linux 许可模型的工作方式,您在运行 Rocky Linux 时将无法通过 kpatch
接收实时内核补丁 - Rocky 在许多方面都像 Red Hat 的未许可版本,如果不运行完整许可的 Red Hat 实例,则无法注册内核实时补丁。但是,启用它的方法在 Rocky 或 RHEL 上是相同的。首先,安装 kpatch-dnf
包:
- sudo dnf install kpatch-dnf
接下来,运行 dnf kpatch auto
自动订阅在线补丁服务:
- sudo dnf kpatch auto
OutputLast metadata expiration check: 0:00:06 ago on Thu 14 Jul 2022 09:12:07 PM UTC.
Dependencies resolved.
Nothing to do.
Complete!
kpatch
将检查配置的补丁服务,如果没有找到,将优雅地退出。在 Red Hat 上,这将改为执行许可证检查并向 Red Hat kpatch
服务器注册。在 Rocky 上,您可能希望将 KernelCare 作为商业支持选项进行调查。
结论
在本教程中,您探索了多种让 Rocky Linux 服务器自动更新的策略。您还了解了包存储库、内核更新和处理服务器重启的一些细微差别。这些都是 DevOps 和更广泛地使用服务器的重要基础,几乎所有生产配置都建立在这些核心概念之上。
接下来,您可能想学习使用 Watchtower 来自动更新 Docker 容器镜像。