Kernelcare: патчим ядро «на лету»

Сервер, на котором установлена и надлежащим образом настроена Linux-система, можно не выключать и не перезагружать месяцами. Однако рано или поздно это делать все равно приходится: например, для установки обновлений ядра. Эта процедура зачастую представляет собой отдельную головную боль для системного администратора. Для перезагрузки нужно выбрать время, когда пользовательская активность минимальна. Всем пользователям нужно предварительно разослать письма-предупреждения. Кроме того, всегда есть риск возникновения внештатной ситуации, из-за которой даунтайм серверов может затянуться.

Существуют специальные программные решения, с помощью которых можно устанавливать патчи и обновления ядра без перезагрузок. В качестве примера нужно в первую очередь привести Ksplice — продукт компании Oracle, распространяемый под лицензией GPL v.2. Он поддерживает следующие дистрибутивы Linux: Oracle, Linux, RHEL, Ubuntu (только десктопные версии) и Fedora. В целом Ksplice вполне справляется с возлагаемыми на него задачами, но у него есть один минус: он может работать далеко не со всеми существующими патчами безопасности.

В начале 2014 года разработчики RedHat Enterpise Linux предложили свое решение — Kpatch. Продукт распространяется под лицензией GPL2; его исходный ход размещен на GitHub. К сожалению, на сегодняшний день он находится в крайне «сыром» состоянии и не может быть рекомендован к использованию. То же самое пока что можно сказать и о kGraft — решении, разрабатываемом создателями SUSE.

Совсем недавно наши партнеры из компании CloudLinux (об их главной разработке — одноименной операционной системе — мы уже писали) предложили свой инструмент, с помощью которого можно устанавливать в ядро патчи безопасности и обновления, связанные с критическими ошибками, «на лету», не перезагружая сервер. Он называется KernelCare.

Разработчики CloudLinux внимательно отслеживают все информацию об уязвимостях ядра. Как только обнаруживаются «слабые места» в любом из поддерживаемых ядер, они готовят патч, с помощью которого их можно устранить. Патчи (каждый из них специально «заточен» под ядро конкретного дистрибутива) размещаются на серверах распространения. Агент KernelCare, установленный на клиентском сервере, периодически связывается с серверами распространения, загружает и устанавливает все новые патчи. Все это происходит в фоновом режиме; сервер перезагружать не нужно.
Первые статьи-анонсы о KernelCare появились в Интернете в начале 2014 года. Начиная с текущего месяца продукт распростраеняется только по платной подписке, но любой желающий может бесплатно установить тестовую версию. Срок действия тестовой лицензии составляет 15 дней.

В настоящее время поддерживаются следующие дистрибутивы Linux (KernelCare работает только с 64-битными ОС):

  • RedHat 6.x;
  • CentOS 6.x;
  • CloudLinux 6.x.

С апреля этого года поддерживаются и ядра OpenVZ. К июлю запланировано реализовать поддержку Debian и Ubuntu.

Тестируем KernelCare

/Тестирование было проведено на ОС CentOS 6/

Установим тестовую версию kernelcare при помощи следующей команды:

# rpm -i http://patches.kernelcare.com/kernelcare-latest.el6.x86_64.rpm

Сразу же после установки KernelCare автоматически загружает и применяет необходимые обновления. После этого на консоль выводится сообщение вида:

Downloading updates
Patch Level 9 applied
Kernel is safe

Просмотреть список примененных патчей можно при помощи команды:

# /usr/bin/kcarectl --info

kpatch-state: patch is applied
kpatch-for: Linux version 2.6.32-358.23.2.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Wed Oct 16 18:37:12 UTC 2013
kpatch-build-time: Mon May 12 23:50:58 2014
kpatch-description: 9

С подробной информацией обо всем, что делает KernelCare, можно также с помощью команды dmesg:

# dmesg|grep 'kcare'

kcare: registered device with node 10:57
kcare: allocated 278112 bytes for patch at ffffc900005c4000
kcare: verifying patch...
kcare: verified successfully
kcare: allocating memory in module space...
kcare: allocated 278112 bytes at ffffffffa0207000
kcare: 865 relocations to fixup...
kcare: fixed 865 relocations
kcare: jumping to ffffffffa020d9a0
kcare: registered device with node 10:57
kcare: allocated 278112 bytes for patch at ffffc900005c4000
kcare: verifying patch...
kcare: verified successfully
kcare: allocating memory in module space...
kcare: allocated 278112 bytes at ffffffffa0207000
kcare: 865 relocations to fixup...
kcare: fixed 865 relocations

KernelCare проводит проверку на наличие новых патчей каждые 4 часа. Все патчи загружаются и применяются автоматически. Автоматическое обновление можно отключить. Для этого нужно открыть конфигурационный файл /etc/sysconfig/kcare. Файл содержит один-единственный параметр — AUTO_UPDATE. Его значение следует изменить с True на False:

AUTO_UPDATE = False

Когда автоматическое обновление отключено, загрузить и применить новый патч можно при помощи команды:

/usr/bin/kcarectl --update

Updates already downloaded
Patch Level 9 applied
Kernel is safe

Все примененные изменения можно откатить назад с помощью команды:

kcaretl --unload

Updates already downloaded
KernelCare protection disabled, kernel might not be safe

Заключение

KernelCare представляет собой действительно удобный и полезный инструмент. К числу его несомненных достоинств следует отнести:

  • простоту установки и настройки;
  • быстроту загрузки и применения патчей;
  • отсутствие какого-либо влияния на производительность системы;
  • возможность отката внесенных изменений назад.

Разработчики CloudLinux улучшают и совершенствуют продукт, и есть все основания надеяться, что в ближайшее время он получит более широкое распространение и обретет вполне заслуженную популярность среди системных администраторов.

Что еще почитать по теме

T-Rex 30 марта 2021

Что такое SMTP-протокол и как он устроен?

SMTP (Simple Mail Transfer Protocol) — протокол передачи почты. Он был представлен еще в 1982 году, но не теряет актуальности до сих пор. В статье разбираемся, какие задачи решает протокол и как он ра…
T-Rex 30 марта 2021
Владимир Туров 1 сентября 2020

Дело совершенно секретного iPod

Это был обычный серый день в конце 2005 года. Я сидел на рабочем месте и писал код для следующей версии iPod. Вдруг без стука ворвался директор ПО для iPod, начальник моего начальника, и закрыл дверь.
Владимир Туров 1 сентября 2020
T-Rex 21 августа 2020

TrendForce: цены на SSD упадут

Эксперты DRAMeXchange предсказывают значительное падение цен на оперативную память и твердотельные накопители в ближайшее время. Причина — сокращение спроса на чипы для NAND и DRAM.
T-Rex 21 августа 2020

Новое в блоге

Сравнение способов организации мультиклауд-решений

Рассказываем о типах мультиклауд-решений и схемах подключения к зарубежным облакам

Сетевые протоколы: базовые понятия и описание самых востребованных правил

В мире существует более 7 000 протоколов, и их число продолжает расти. Рассказываем о самых часто используемых правилах взаимодействия устройств в сети.

Готовые кластеры Kubernetes: легкий старт, автоматизация и другие преимущества перед self-hosted

Рассказываем, чем отличается Managed Kubernetes от самостоятельного развертывания инфраструктуры. Объясняем, кому подойдет решение.
T-Rex 18 мая 2022

Что такое терминальный сервер и зачем он нужен

Разбираемся, что такое терминальный сервер, чем он похож на VDI и как подобрать сервер под роль терминала.
T-Rex 18 мая 2022