Динамическое исправление (Live Patching)
Динамическое исправление ядра Linux: зачем и как работает
Динамическое исправление (Live Patching) позволяет обновлять ядро Linux без перезагрузки системы. Это важно для высоконагруженных сред, где простои недопустимы. Традиционный метод требует перезагрузки, что, как правило, приводит к простоям и риску сбоя в работе приложений.
Как это работает?
Обнаружение уязвимости: разработчики выпускают патч для исправления ошибки.
Загрузка патча: патч загружается в ядро как модуль.
Перехват функций: для перехвата вызовов функций используются Kprobes и Ftrace.
Замена функций: старая функция заменяется на исправленную версию.
Очистка: старый код удаляется из памяти.
Преимущества динамического исправления (Live Patching):
Снижение времени простоя: обновиться можно без перезагрузки, что особенно важно для сервисов с высоким SLA (Соглашение об уровне обслуживания).
Повышение безопасности: быстрое устранение уязвимостей снижает риск атак.
Удобство для администраторов: обновление становится проще и быстрее.
Поддержка высокой доступности: критические системы остаются доступными даже при обновлении.
Снижение затрат: устранение необходимости перезагрузки экономит ресурсы.
Поддержка критических систем: обновление возможно без остановки работы системы.
Ускорение процесса: обновление ядра занимает меньше времени.
Поддержка длительных процессов: обновление не прерывает длительные задачи.
Динамическое исправление (Live Patching) — эффективный способ обновления ядра, минимизирующий простои и повышающий стабильность систем.
Популярные инструменты для динамического исправления (Live Patching):
kpatch (от Red Hat) м используется в RHEL (Red Hat Enterprise Linux) и CentOS.
kgraft (от SUSE) — используется в SUSE Linux Enterprise.
Livepatch от Canonica — интегрирован в Ubuntu.
kpatch для хостинговой редакции ОС МСВСфера 9
Рассмотрим, как используется технология динамического исправления (Live Patching) для хостинговой редакции ОС МСВСфера 9.
В текущей конфигурации поставка исправлений для критических уязвимостей ядра осуществляется с обязательной перезагрузкой. При этом в ядро вносятся хостинг-специфичные модификации, не требующие правок самого ядра.
Для реализации хостинговых продуктов используются различные подсистемы ядра, но не все стандартные алгоритмы подсистем подходят для работы хостингового ПО.
С помощью kpatch от Red Hat были модифицированы несколько подсистем ядра.
Вот что было модифицировано в поставляемых kpatch пакетах для хостинговой редакции.
Возможность контроля за файловой системой пользователя, ограниченного квотой.
LimitedFS независимо от квоты пользователя требует в каталоге пользователя разместить дополнительную служебную информацию, и без внесения изменений в ядро это сделать не получится.
Алгоритм учёта лимитов числа процессов в CGroup.
Подсистема CGroups разрешает помещать в группу новые процессы, если их помещает привилегированный пользователь, но для хостинга необходимо, чтоб лимит действовал всегда. Без внесения изменений в ядро, есть возможность превысить лимит NPROC.
Пример работы kpatch
В ОС МСВСфера 9 для хостинга установите пакет msvsphere-hosting-integration-0.1.7-1.el9.inferit и запустите команду:
$ sudo msvsphere_hosting_convert kpatch
Данная команда автоматически определит текущее ядро, а также все установленные на сервере ядра. И произведёт установку патчей для каждого установленного ядра. Это будет выглядеть следующим образом:
🔧 PRE TRANSACTION
📦 hosting-kpatch-patch-5_14_0-503_19_1-1-20251013.el9
📦 hosting-kpatch-patch-5_14_0-503_23_2-1-20251013.el9
📦 hosting-kpatch-patch-5_14_0-570_12_1-1-20251013.el9
📦 kpatch-0.9.7-3.el9_6
📦 kpatch-dnf-0.9.7_0.5-3.el9_6
🧩 Ожидаемые патчи: set()
🧩 Найденные патчи: {'5_14_0-503_19_1', '5_14_0-503_23_2', '5_14_0-570_12_1'}
✅ Установка разрешена
Выполнение транзакции
Подготовка : 1/1
Установка : kpatch-dnf-0.9.7_0.5-3.el9_6.noarch 1/5
Запуск скриптлета: kpatch-dnf-0.9.7_0.5-3.el9_6.noarch 1/5
To enable automatic kpatch-patch subscription, run:
$ dnf kpatch auto
Установка : kpatch-0.9.7-3.el9_6.noarch 2/5
Установка : hosting-kpatch-patch-5_14_0-503_19_1-1-20251013.el9.x86_64 3/5
Запуск скриптлета: hosting-kpatch-patch-5_14_0-503_19_1-1-20251013.el9.x86_64 3/5
installing /usr/lib/kpatch/5.14.0-503.19.1.el9_5.x86_64/kpatch-5_14_0-503_19_1-1-20251013.ko (5.14.0-503.19.1.el9_5.x86_64)
Created symlink /etc/systemd/system/multi-user.target.wants/kpatch.service → /usr/lib/systemd/system/kpatch.service.
...
Проверка : hosting-kpatch-patch-5_14_0-503_19_1-1-20251013.el9.x86_64 1/5
Проверка : hosting-kpatch-patch-5_14_0-503_23_2-1-20251013.el9.x86_64 2/5
Проверка : hosting-kpatch-patch-5_14_0-570_12_1-1-20251013.el9.x86_64 3/5
Проверка : kpatch-0.9.7-3.el9_6.noarch 4/5
Проверка : kpatch-dnf-0.9.7_0.5-3.el9_6.noarch 5/5
Установлен:
hosting-kpatch-patch-5_14_0-503_19_1-1-20251013.el9.x86_64 hosting-kpatch-patch-5_14_0-503_23_2-1-20251013.el9.x86_64
hosting-kpatch-patch-5_14_0-570_12_1-1-20251013.el9.x86_64 kpatch-0.9.7-3.el9_6.noarch
kpatch-dnf-0.9.7_0.5-3.el9_6.noarch
Для того, чтобы посмотреть установленные патчи и текущий применённый патч, выполните команду sudo kpatch list:
$ sudo kpatch list
Loaded patch modules:
kpatch_5_14_0_570_12_1_1_20251013 [enabled]
Installed patch modules:
kpatch_5_14_0_503_19_1_1_20251013 (5.14.0-503.19.1.el9_5.x86_64)
kpatch_5_14_0_503_23_2_1_20251013 (5.14.0-503.23.2.el9_5.x86_64)
kpatch_5_14_0_570_12_1_1_20251013 (5.14.0-570.12.1.el9_6.x86_64)
Установка kpatch на новых системах
На новых системах kpatch с необходимыми патчами для ядра устанавливается автоматически при конвертации ОС МСВСфера 9 в ОС МСВСфера 9 Хостинговая редакция.
Факторы, влияющие на работу
На данный момент ситуаций, требующих особого внимания, с динамическим исправлением (Live Patching) обнаружено не было,
но в случае сомнений можно выполнить команду sudo kpatch unload, которая позволяет отключить или удалить ранее установленный патч из работающего ядра:
$ sudo kpatch unload kpatch_5_14_0_570_12_1_1_20251013