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 улучшают и совершенствуют продукт, и есть все основания надеяться, что в ближайшее время он получит более широкое распространение и обретет вполне заслуженную популярность среди системных администраторов.
Читателей, которые по тем или иным причинам не могут оставлять комментарии здесь, приглашаем обсудить статью в нашем блоге.