Live patching ядра
Live patching ядра это применение исправлений безопасности к работающему ядру Linux без перезагрузки сервера, полезное, когда плановый простой сложно организовать.
Почему это важно для серверов, чувствительных к простою
Эту функцию также называют livepatch, так её именует документация ядра Linux. См. livepatch.
Исправление безопасности ядра традиционно требует полной перезагрузки для вступления в силу, а значит окно простоя, каким бы коротким оно ни было, на каждом сервере, которому это нужно. Live patching применяет исправление к работающему ядру в памяти, полностью избегая этого окна для поддерживаемых обновлений.
Его ограничения
Не каждое исправление ядра можно применить "живьём"; некоторые структурные изменения всё равно требуют традиционной перезагрузки. Live patching обычно используют, чтобы выиграть время до запланированного окна обслуживания, а не как постоянную замену итоговой перезагрузки на полностью обновлённое ядро.
Live patching ядра вместе с обычными перезагрузками разобран здесь: руководство по управлению патчами сервера.
Сначала проверьте, доступен ли он на вашем VPS
Live patching меняет ядро, на котором работает сервер, поэтому имеет смысл только если вы управляете этим ядром. Документация systemd описывает контейнерную виртуализацию (OpenVZ, LXC, Docker и подобные) как виртуализацию с общим ядром: VPS на контейнере работает на ядре хоста, и обновить его может только провайдер. У полноценной виртуальной машины, например KVM, собственное ядро, которым управляете вы. Начните с команд:
systemd-detect-virt
uname -r
# Ubuntu
sudo pro status
sudo canonical-livepatch status
# RHEL family
sudo kpatch list
Согласно инструкции Canonical по Livepatch, sudo pro enable livepatch включает службу, но патчи привязаны к версии ядра: на неподдерживаемом ядре службу можно включить и ничего не получать, а pro status выведет предупреждение. Команда kpatch list из проекта kpatch показывает установленные модули патчей в системах, где используется kpatch. На странице Livepatch Canonical описывает бесплатный тариф как рассчитанный на 5 машин для личного использования или ознакомления, поэтому до использования на бизнес-сервере проверьте условия.
Чего live-патч не делает
Документация ядра по livepatch объясняет механизм: исправленная функция подменяется через ftrace, поэтому патчить можно только функции, поддающиеся трассировке. Переключение выполняется для каждой задачи отдельно, когда это безопасно, обычно за секунды, но патч может оставаться в состоянии перехода неограниченно долго, если какая-то задача так и не достигает безопасной точки. Это состояние показывает файл /sys/kernel/livepatch/<patch>/transition.
Ограничивают охват и вендоры. Та же страница Canonical сообщает, что Livepatch нацелен на уязвимости ядра с высокой или критической оценкой, которые практично безопасно исправить в памяти, и прямо говорит, что служба не заменяет перезагрузку. Исправления меньшей серьёзности ждут обычного обновления ядра. Регулярно проверяйте, совпадает ли работающее ядро с установленным:
sudo needrestart -k
Ключ -k у needrestart проверяет, не устарело ли ядро. Запланируйте перезагрузку в окне обновлений, а о том, как live patching сочетается с ней, читайте в руководстве по управлению патчами.
Связанные термины: Управление обновлениями, unattended-upgrades, Zero-day эксплойт, Livepatch (живое обновление ядра).
Часто задаваемые вопросы
Заменяет ли live patching необходимость когда-либо перезагружаться?
Нет. Он отодвигает необходимость немедленной перезагрузки для поддерживаемых исправлений, но периодическая запланированная перезагрузка всё равно обычно рекомендуется, чтобы работающее ядро совпадало с тем, что реально установлено на диске.
Доступен ли live patching ядра на каждом дистрибутиве Linux?
Зависит от дистрибутива и часто требует конкретной подписки или пакета, например Canonical Livepatch на Ubuntu или kpatch на системах на базе RHEL.
Рискованнее ли live patching, чем обычная перезагрузка?
У него свой, как правило небольшой, профиль риска, так как он изменяет работающее ядро в памяти, но для поддерживаемых патчей вендоры, предлагающие его, считают его безопасным для продакшн.
Как понять, доступен ли live patching на моём VPS?
Выполните systemd-detect-virt. Если команда показывает тип контейнера, например lxc или openvz, сервер использует ядро хоста, и обновить его может только провайдер. Если показана полноценная виртуальная машина, например kvm, вы управляете собственным ядром, и live patching может быть доступен.
Закрывает ли live patching все уязвимости ядра?
Нет. Canonical сообщает, что Livepatch нацелен на уязвимости ядра с высокой и критической оценкой, которые практично безопасно исправить в памяти. Остальные исправления приходят в обычном пакете ядра и вступают в силу после перезагрузки.
Хотите увидеть, в каком состоянии ваш сервер?
Запустите бесплатную read-only проверку сервера или откройте Security Lab и посмотрите цикл обнаружение, сдерживание, восстановление, проверка в действии.
Получить бесплатную проверку сервераОткрыть Security Lab