Как избежать перезагрузки сервера с помощью Ubuntu Livepatch

Если вы администрируете свои собственные серверы, рано или поздно вы сталкиваетесь с этой проблемой: вам нужно перезагрузить операционную систему, но машина предоставляет важную услугу, которую вы не можете прервать.
Но зачем вообще перезагружать? Кажется, что все работает нормально после команды apt-get upgrade. Однако не всегда все так, как кажется. Хотя система с радостью продолжает работать после каждого обновления, не заставляя перезагружаться, как это делает Windows, ей все равно может понадобиться перезагрузка.
Например, когда уязвимость в ядре системы (kernel) обнаруживается, она исправляется и отправляется на ваш сервер в виде нового пакета. После установки исправленного ядра некоторые файлы записываются на диск, но все еще работает старое ядро, так как именно оно загружено в память (RAM).
Это означает, что ваш сервер все еще уязвим к ранее обнаруженным уязвимостям. Другие процессы, демоны и службы могут быть перезагружены без перезагрузки операционной системы. Однако ядро находится в сердце системы и может быть перезагружено только при следующей загрузке.
Также читайте: Как добавить пользователей в Ubuntu Server
Ubuntu Livepatch решает эту проблему, позволяя закрывать уязвимости ядра безопасности без перезагрузки. Таким образом, вы можете избежать или отложить перезагрузки на недели или месяцы, не ставя под угрозу безопасность.
Основная идея живого патча проста: когда функция уязвима, перепишите ее, устраните недостаток и загрузите новую функцию куда-то в память. Когда функция вызывается, вместо выполнения кода в ядре, перенаправьте вызов на использование переписанного кода.

Но, как и с большинством вещей, которые кажутся простыми, реализация и технические детали не так просты.
Как настроить Livepatch на Ubuntu
Перейдите на эту страницу и создайте свою учетную запись Ubuntu One. (Или просто войдите, если у вас уже есть.) Проверьте свою электронную почту и затем нажмите на ссылку для подтверждения учетной записи. Далее посетите страницу службы Canonical Livepatch. Выберите, что вы “пользователь Ubuntu”, и нажмите кнопку для генерации вашего токена. На следующей странице будут показаны точные команды, которые вам нужно ввести на вашем сервере. После первой команды введите
sudo snap install canonical-livepatchПодождите несколько секунд, пока пакет snap полностью установится. Когда это будет сделано, вы получите результат, похожий на то, что вы можете увидеть на следующем изображении.

Наконец, с последней командой со страницы Canonical,
sudo canonical-livepatch enable#PASTE_YOUR_TOKEN_HEREсервис становится активным и будет автоматически применять патчи безопасности к вашему ядру, когда это необходимо, без вашего участия.
Установите демон Snap, если необходимо
В некоторых редких случаях первая команда в предыдущем разделе может завершиться неудачей с сообщением об ошибке: -bash: /usr/bin/snap: Нет такого файла или каталога. В этом случае это означает, что ваш провайдер серверов имеет образ операционной системы Ubuntu, который по умолчанию не включает службу демона snap. Установите его с помощью:
sudo apt update &&sudo apt install snapdТеперь снова выполните две команды из предыдущего раздела.
Также читайте: 5 полезных патчей для улучшения вашего опыта с dwm
Поддержка вашего сервера в актуальном состоянии
Livepatch будет применять все необходимые обновления безопасности к вашему ядру. Однако вы все равно должны регулярно обновлять остальную часть вашей системы с помощью команды:
sudo apt update &&sudo apt upgradeВы должны делать это еженедельно или даже чаще, если можете. Важные системные пакеты могут сообщить вам, что им необходимо перезагрузиться, чтобы применить последние исправления безопасности.

Обычно это аккуратные перезагрузки, что означает, что они не нарушают никакие услуги в процессе. Например, в этом случае демон SSH был перезапущен без прерывания активной SSH-сессии.
В других ситуациях вы можете самостоятельно перезапустить службы, чтобы убедиться, что новый, исправленный код загружен и исправления безопасности применены. Например, если вы заметили, что пакет nginx был обновлен, вы можете выполнить
systemctl restart nginx.serviceчтобы перезагрузить демон nginx в память. В противном случае, даже если пакет обновлен, он может по-прежнему работать со старым, уязвимым кодом, подвергая ваш сервер риску известных атак. Некоторые обновления пакетов делают это за вас, но другие нет. Вот почему полезно обращать внимание на то, что делает “apt upgrade”, и перезапускать некоторые службы, если это необходимо. Вы также можете просмотреть журналы, чтобы увидеть, было ли это сделано автоматически.
Заключение
Как вы можете видеть, Canonical сделала это довольно простым для реализации на сервере. Что касается ядра, то никаких работ по обслуживанию с вашей стороны не требуется. Единственное, что вы можете сделать, это время от времени выполнять
canonical-livepatch statusчтобы проверить состояние.