Kernelcare: патчим ядро «на лету»
![Тирекс](https://selectel.ru/blog/wp-content/uploads/2023/05/T-Rex_Autor-3-400x400.png)
Сервер, на котором установлена и надлежащим образом настроена Linux-система, можно не выключать и не перезагружать месяцами. Однако рано или поздно это делать все равно приходится: например, для установки обновлений ядра. Эта процедура зачастую представляет собой отдельную головную боль для системного администратора. Для перезагрузки нужно выбрать время, когда пользовательская активность минимальна. Всем пользователям нужно предварительно разослать письма-предупреждения. Кроме того, всегда есть риск возникновения внештатной ситуации, из-за которой даунтайм серверов может затянуться.
![Изображение записи](https://selectel.ru/blog/wp-content/uploads/2014/06/pr-513_preview.png)
Сервер, на котором установлена и надлежащим образом настроена 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 улучшают и совершенствуют продукт, и есть все основания надеяться, что в ближайшее время он получит более широкое распространение и обретет вполне заслуженную популярность среди системных администраторов.