在 Debian 9(stretch)上升级 nginx 1.10.3 以避免 CVE-2017-7529 漏洞

在 Debian 9(stretch)上升级 nginx 1.10.3 以避免 CVE-2017-7529 漏洞

目前,Debian 9(stretch)安装的 nginx 版本 1.10.3 存在漏洞CVE-2017-7529

Nginx 0.5.6 至 1.13.2 版本存在 nginx 范围过滤模块中的整数溢出漏洞,可导致由特制请求触发的潜在敏感信息泄露。

我担心用户数据的安全,因此我想升级到不再受此问题影响的最新版本。

答案1

有多种方式获取 nginx 1.13.3 及以上版本。你可以自行编译,使用拉伸后端口存储库,或者您可以添加 nginx 自己的 apt 存储库。在这个答案中,我将引导您完成最后一个,因为它可能是所有三个中最简单的。

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.servicesystemd 之前用于管理 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

相关内容