我使用各种 Linux 发行版,主要是基于 Debian 的,通常都是默认的(我在内核/shell 或内部实用程序(发行版附带的实用程序)中没有进行任何更改。我通常在这些系统上安装 Apache、MySQL 和 PHP,并且不会这样做)也不要改变任何东西。
我从未对任何系统进行过内核升级,因为我不记得曾经有过这样的需求或收到过一些需要这样做的本地邮件。
我知道配置管理 (CM) 工具(例如 Ansible)用于编排、部署,也许还可以自动化操作系统层(当然包括内核)之上的所有内容,但令人好奇的是 - 可以使用 Ansible“深入研究”吗?到内核并用它自动进行内核升级?
如果您认为这是基本上全默认系统(发行版本身 - 其内核、shell 和内部实用程序根本没有更改的系统)中的最佳实践,也请分享。
答案1
对于大多数现代 Linux 发行版,内核都是作为一个包分发的,就像任何其他软件/库一样。因此,以 Ansible 为例,您可以执行如下任务:
- name: Ensure that latest kernel is installed
apt:
name: linux-image-amd64
state: latest
update_cache: yes
notify: reboot_server # You would need a corresponding handler that reboots the system
这将确保每次运行该游戏时,都会安装最新的内核包。
然而,该内核与大多数其他软件包的不同之处在于:
- 可以同时安装多个版本,因此您需要管理旧版本的删除。您不一定希望自动执行此操作,因为:
- 要启用新安装的内核,您需要重新启动系统,因此需要从业务流程 POV 和技术上进行管理。这并不是完全无风险的操作,因此取决于系统架构的性质,通常不被视为简单自动化的适当任务。
有一些方法可以在不重新启动的情况下激活新安装的内核,但它们仍然不是真正的主流方法。
至于是否应该进行内核更新,一般来说是的。鉴于由于过时的软件而导致的一系列引人注目的安全故障(并且引人注目的故障可能只是冰山一角),所有软件都应该保持最新。最近的 Meltdown 和 Spectre 漏洞强调了内核并不特殊,需要像任何其他软件包一样保持最新。
考虑到在此过程中可能发生的故障与不这样做可能发生的故障之间的权衡,维护有效的修补策略需要认真考虑。自动化当然可以提供帮助,但每个环境都是不同的,因此您必须检查自己的要求,以评估它在多大程度上适合您自己的情况。
无论哪种方式,如果当你说:
(发行版本身的系统 - 其内核、shell 和内部实用程序根本没有改变)
您的意思是,一旦安装,您就再也不会重新访问并修补/更新/升级这些元素,这会显着增加系统受到损害的风险。
答案2
是的,鉴于操作系统内核是软件而不是固件(如 BIOS 或引导加载程序),它可以从 shell 进行更改,并且 CM 可以通过以其特定方式实现 shell 来更改它(如 Ansible 的 YAML 方言) )。