Обновление nginx 1.10.3 в Debian 9 (растяжка), чтобы избежать уязвимости CVE-2017-7529
На данный момент Debian 9 (stretch) устанавливает версию 1.10.3 nginx, которая уязвима для CVE-2017-7529:
Версии Nginx начиная с версии 0.5.6 до 1.13.2 включительно уязвимы для уязвимости целочисленного переполнения в модуле фильтра диапазона nginx, приводящей к утечке потенциально конфиденциальной информации, вызванной специально созданным запросом.
Я беспокоюсь о безопасности данных моих пользователей, поэтому я бы хотел обновить их до последней версии, которая больше не затрагивается этой проблемой.
1 ответ
Есть несколько способов получить nginx 1.13.3 и выше. Вы можете скомпилировать его самостоятельно, использовать репозиторий stretch-backports или добавить собственный репозиторий nginx. В этом ответе я проведу вас через последний, поскольку это, вероятно, самый простой из всех трех.
На веб-сайте nginx есть отдельная страница о том, как настроить свой репозиторий, но это еще не все, особенно если вы хотите избежать этой конкретной уязвимости прямо сейчас. stable
В ветви будет установлена 1.12.0, которая все еще уязвима (она была исправлена в 1.12.1+ и 1.13.3+), поэтому вам нужно будет использовать mainline
, который установит 1.13.5.
В лучшем случае переключение версии nginx должно быть таким же простым, как выполнение нескольких команд, и вы будете сделаны через 2-3 минуты с минимальным временем простоя. Чтобы иметь возможность вернуться к работе как можно скорее, начнем с подготовки к установке. Во-первых, вам нужно добавить репозиторий в вашу конфигурацию apt, добавить ключ подписи и обновить список пакетов:
$ sudo echo "deb http://nginx.org/packages/mainline/debian/ stretch nginx
deb-src http://nginx.org/packages/mainline/debian/ stretch nginx" > /etc/apt/sources.list.d/nginx.list
$ wget -qO - https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
$ sudo apt update
Далее выполните следующую команду:
$ sudo apt remove nginx-common
Это эффективно удалит nginx из системы, но сохранит ваши файлы конфигурации, за исключением файла службы systemd, который легко восстановить.
Далее установите nginx из нового репозитория:
$ sudo apt install nginx
Имейте в виду, что вам будет предложено заменить определенные файлы конфигурации, например так:
Configuration file '/etc/nginx/nginx.conf'
==> Modified (by you or by a script) since installation.
==> Package distributor has shipped an updated version.
What would you like to do about it ? Your options are:
Y or I : install the package maintainer's version
N or O : keep your currently-installed version
D : show the differences between the versions
Z : start a shell to examine the situation
The default action is to keep your current version.
*** nginx.conf (Y/I/N/O/D/Z) [default=N] ?
Убедитесь, что вы не входите Y
, просто нажмите Enter или введите N
каждый раз, когда вам предлагается избежать потери текущей конфигурации.
Если вы случайно перезаписали свой nginx.conf
вам нужно - как минимум - изменить последнюю строку в файле с include /etc/nginx/conf.d/*.conf;
в include /etc/nginx/sites-enabled/*;
восстановить предыдущее поведение включения.
Вы можете проверить недавно установленную версию:
$ nginx -v
nginx version: nginx/1.13.5
Наконец, вы заметите, что пытаясь запустить service nginx start
Теперь происходит сбой со следующим сообщением:
Failed to start nginx.service: Unit nginx.service is masked.
Это потому что удаление nginx-common
также вытерли /lib/systemd/system/nginx.service
который ранее использовался systemd для управления nginx. Чтобы восстановить этот файл, просто создайте его, используя команду ниже:
$ echo "[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
" > /lib/systemd/system/nginx.service
Наконец, беги systemctl unmask nginx
с последующим systemctl enable nginx
и теперь вы сможете управлять сервисом, как и раньше, со всеми вашими прежними настройками без изменений.
$ service nginx start