На данный момент Debian 9 (stretch) устанавливает nginx версии 1.10.3, которая уязвима для CVE-2017-7529:
Версии Nginx с 0.5.6 до 1.13.2 включительно уязвимы для целочисленного переполнения в модуле фильтра диапазона nginx, что приводит к утечке потенциально конфиденциальной информации, вызванной специально созданным запросом.
Я беспокоюсь о безопасности данных моих пользователей, поэтому я хотел бы обновить до последней версии, на которую эта проблема больше не влияет.
Есть несколько способов получить nginx 1.13.3 и выше. Вы можете скомпилировать его самостоятельно, используя стрейч-спинки репозиторий, или вы можете добавить собственный репозиторий 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
просто нажмите Войти или введите 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