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

Ubuntu Livepatch Featured

Если вы администрируете свои собственные серверы, рано или поздно вы сталкиваетесь с этой проблемой: вам нужно перезагрузить операционную систему, но машина предоставляет важную услугу, которую вы не можете прервать.

Но зачем вообще перезагружать? Кажется, что все работает нормально после команды apt-get upgrade. Однако не всегда все так, как кажется. Хотя система с радостью продолжает работать после каждого обновления, не заставляя перезагружаться, как это делает Windows, ей все равно может понадобиться перезагрузка.

Например, когда уязвимость в ядре системы (kernel) обнаруживается, она исправляется и отправляется на ваш сервер в виде нового пакета. После установки исправленного ядра некоторые файлы записываются на диск, но все еще работает старое ядро, так как именно оно загружено в память (RAM).

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

Также читайте: Как добавить пользователей в Ubuntu Server

Ubuntu Livepatch решает эту проблему, позволяя закрывать уязвимости ядра безопасности без перезагрузки. Таким образом, вы можете избежать или отложить перезагрузки на недели или месяцы, не ставя под угрозу безопасность.

Основная идея живого патча проста: когда функция уязвима, перепишите ее, устраните недостаток и загрузите новую функцию куда-то в память. Когда функция вызывается, вместо выполнения кода в ядре, перенаправьте вызов на использование переписанного кода.

Ubuntu Livepatch Code Text

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

Как настроить Livepatch на Ubuntu

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

sudo snap install canonical-livepatch

Подождите несколько секунд, пока пакет snap полностью установится. Когда это будет сделано, вы получите результат, похожий на то, что вы можете увидеть на следующем изображении.

Ubuntu Livepatch Install 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

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

Ubuntu Livepatch Service Restart

Обычно это аккуратные перезагрузки, что означает, что они не нарушают никакие услуги в процессе. Например, в этом случае демон SSH был перезапущен без прерывания активной SSH-сессии.

В других ситуациях вы можете самостоятельно перезапустить службы, чтобы убедиться, что новый, исправленный код загружен и исправления безопасности применены. Например, если вы заметили, что пакет nginx был обновлен, вы можете выполнить

systemctl restart nginx.service

чтобы перезагрузить демон nginx в память. В противном случае, даже если пакет обновлен, он может по-прежнему работать со старым, уязвимым кодом, подвергая ваш сервер риску известных атак. Некоторые обновления пакетов делают это за вас, но другие нет. Вот почему полезно обращать внимание на то, что делает “apt upgrade”, и перезапускать некоторые службы, если это необходимо. Вы также можете просмотреть журналы, чтобы увидеть, было ли это сделано автоматически.

Заключение

Как вы можете видеть, Canonical сделала это довольно простым для реализации на сервере. Что касается ядра, то никаких работ по обслуживанию с вашей стороны не требуется. Единственное, что вы можете сделать, это время от времени выполнять

canonical-livepatch status

чтобы проверить состояние.