修复Nginx安全漏洞(CVE-2019-9516)
近日客户在进行安全扫描时检测出Nginx有安全漏洞,简单记录下这次安全漏洞的升级过程。
客户给文档如图:
先按照修补建议去获取补丁
查看官方建议,需要将nginx进行升级到1.17.3,下载地址:http://nginx.org/download/
将下载好的nginx上传到服务器上,解压
tar -zxvf nginx-1.17.3.tar.gz
因为项目正在运行,因此这次升级需要在不影响业务系统情况下进行平滑升级
因为前期部署Nginx是直接从另一台服务期上拷贝过去的,因此需要先安装nginx所需的依赖,之后才能进行nginx新版本的编译。这时遇到了一个问题,服务器不能连外网,因此需要手动下载依赖包进行安装,或者新建一个本地的YUM源,详细步骤可参考:在Linux系统中配置本地YUM仓库
准备工作完成之后开始进行升级
1.安装依赖
yum install gcc
yum install pcre-devel
yum install zlib-devel
yum install openssl
yum install openssl-devel
2.进入新版本Nginx,进行编译后替换旧版本
// 进入新版本目录
cd nginx-1.17.3
// 执行配置
./configure
// 执行编译(只编译不安装)
make
// 备份旧版本文件
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
// 复制新版本文件
cp nginx-1.17.3/objs/nginx /usr/local/nginx/sbin/
3.关闭并重启 nginx
// 查看nginx的pid
ps -ef|grep nginx
可以看到nginx的pid为3578和3580
根据上面查询的pid对nginx进行重启
//使nginx的旧版本停止接收请求,用新版本接替,且老进程处理完所有请求,关闭所有连接后,停止
kill -usr2 3578
kill -usr2 3580
//关闭旧版本进程
kill -quit 3578
kill -quit 3580
// 验证nginx是否升级成功,显示最新编译的版本信息即更新成功
nginx -V
升级过程中遇到了一个问题nginx: [emerg] the “ssl” parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:156
经排查之后发现,nginx启动了https服务,在上述第二步配置的时候需要添加一些配置,然后按照上述部署进行升级即可
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module