Rose debug info
---------------

Как обновлять уязвимые пакеты?

Давайте на примере текущей пачки уязвимостей в Exim разберёмся что со всем этим делать.

Как проверить версию установленного пакета

Первое с чего следует начать — посмотреть что именно у нас установлено в системе. Самый простой способ — посмотреть по списку установленных пакетов в целом.

Для Ubuntu/Debian:

dpkg -l | grep exim

Для CentOS:

rpm -qa | grep exim

Но если вы хотите красиво и аккуратно выдернуть только версию, то воспользуйтесь такими командами:

Для Ubuntu/Debian:

dpkg-query --showformat='${Version}' --show exim4-base

Для CentOS:

rpm -q --queryformat "%{VERSION}" exim

Я узнал версию пакета? Можно ли только по ней понять уязвим ли пакет?

Самое главное, что нужно понять — в Linux-дистрибутивах версии продуктов выбираются по своим собственным соображениям. В подавляющем большинстве случаев они отличаются от тех версий, которые предлагают разработчики ПО.

Это происходит потому что в дистрибутивах версии ПО в определённый момент фиксируются или замораживаются, говоря иначе.

Например, в Ubuntu 18.04 используется exim версии 4.90.1. Значит ли, что все плохо, ведь разработчики exim закрыли уязвимости о которых мы говорим в более поздней версии 4.94.2?

Вовсе нет!

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

В нашем конкретном случае, в Ubuntu 18.04 exim версии 4.90.1-1ubuntu1.7 уязвим, а версии 4.90.1-1ubuntu1.8 — нет.

Как же тогда быть?

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

Пример бюллетеней для нашего кейса:

Из них следует, что исправленные версии:

  • Ubuntu 20.04: 4.93-13ubuntu1.5
  • Ubuntu 18.04: 4.90.1-1ubuntu1.8
  • Debian 9: 4.89-2+deb9u8
  • Debian 10: 4.92-8+deb10u6

А как же бюллетени для CentOS ?

Конечно, они есть в природе. Для RedHat они называются RHSA
Есть и для СentOS — они называются CESA

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

Как обновить все пакеты в системе?

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

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

Из плюсов полного обновления:

  • вы не пропускаете другие уязвимости, ведь за всем не уследишь
  • полное обновление системы как правило приводит к более консистентному результату

Для Ubuntu/Debian:

apt update && apt upgrade -y

Для CentOS:

yum update -y

Как обновлять пакеты неинтерактивно

Однако, если вы обновляете много машин, то, скорее всего вы хотите сделать это так, чтобы вам гарантированно не задавали вопросов. Ключ -y — это не спасение

В Ubuntu/Debian можно прибегнуть, например, к такому варианту:

export DEBIAN_FRONTEND=noninteractive
apt update -y \
&& apt-get -y -f install \
&& apt-get -y \
-o Dpkg::Options::="--force-confdef" \
-o Dpkg::Options::="--force-confold" \
upgrade

Как обновить только конкретный пакет(-ы)?

Если стратегия полного обновления вам не подходит, то можно воспользоваться следующими командами:

Для Ubuntu/Debian:

apt update && apt install -y --only-upgrade 'exim4-*'

Для CentOS:

yum update exim -y

Обратите внимание на то, что с помощью * можно использовать глобы, но не забывайте тогда заключать в кавычки имена пакетов.

Рестарт сервисов

И последнее по порядку, но не по важности.

Обновления пакетов через apt / yum чаще всего тригеррят рестарты соответствующих сервисов, но лучше всего полностью контроллировать ситуацию и сделать рестарт руками, например:

Для Ubuntu/Debian:

systemctl restart exim4.service

Для CentOS:

systemctl restart exim.service
Поделиться
Отправить
 70   5 мес   centos   debian   ubuntu   безопасность