升级linux服务器组件(打补丁或者升级)

比如打补丁,一般会有一个补丁的地址,进去以后可以看到修复的代码修改记录,并且说明影响的版本和修复的版本。

nginx 安全漏洞(CVE-2018-16845) 中危 nginx类 nginx是由俄罗斯的程序设计师Igor Sysoev所开发的一款轻量级Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 
Nginx 1.15.5及之前的版本和1.14.1版本中的ngx_http_mp4_module组件存在内存泄露漏洞,该漏洞源于程序没有正确处理MP4文件。远程攻击者可利用该漏洞获取敏感信息或造成拒绝服务。
厂商补丁: 目前厂商已发布升级补丁以修复漏洞,补丁获取链接: http://mailman.nginx.org/pipermail/nginx-announce/2018/000221.html

具体代码修改如下:

--- src/http/modules/ngx_http_mp4_module.c
+++ src/http/modules/ngx_http_mp4_module.c
@@ -942,6 +942,13 @@ ngx_http_mp4_read_atom(ngx_http_mp4_file
                 atom_size = ngx_mp4_get_64value(atom_header + 8);
                 atom_header_size = sizeof(ngx_mp4_atom_header64_t);
 
+                if (atom_size < sizeof(ngx_mp4_atom_header64_t)) {
+                    ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
+                                  ""%s" mp4 atom is too small:%uL",
+                                  mp4->file.name.data, atom_size);
+                    return NGX_ERROR;
+                }
+
             } else {
                 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
                               ""%s" mp4 atom is too small:%uL",

这时候我们修复有2种方法:

1、到我们的安装包源码目录,根据补丁文件修改安装包的代码,然后重新编辑,替换执行文件。

2、到官网下载已修复的版本,编译,替换执行文件。

两种方法都可以,修改补丁或者下载版本后,编译替换即可

具体命令如下(nginx为例):

#查看原有编译参数
./sbin/nginx -V

#如果是PHP,执行./php-fpm -i |grep configure

#得到如下
nginx version: nginx/1.11.5 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) built with OpenSSL 1.0.1c 10 May 2012 TLS SNI support enabled configure arguments: --prefix=/app/nginx/nginx --with-pcre=/app/nginx/soft/pcre-8.35 --with-zlib=/app/nginx/soft/zlib-1.2.8 --with-openssl=/app/nginx/soft/openssl-1.0.1c --with-http_ssl_module --with-http_realip_module
#需要用到的内容为configure arguments:后的内容

去nginx源码目录编译
cd nginx-1.11.5 && ./configure --prefix=/app/nginx/nginx --with-pcre=/app/nginx/soft/pcre-8.35 --with-zlib=/app/nginx/soft/zlib-1.2.8 --with-openssl=/app/nginx/soft/openssl-1.0.1c --with-http_ssl_module --with-http_realip_module && make
#注意:不要make install,不然会覆盖现有的
#等待编译成功后会生成一个objs目录,进入目录
cd objs
#复制编译生成的可执行文件到原先的nginx的sbin目录
cp nginx /app/nginx/nginx/sbin
#注意,复制前建议先备份原有的sbin文件
./nginx -s reload #重启
暗夜之中,才见繁星;危机之下,暗藏转机;事在人为,为者常成。
原文地址:https://www.cnblogs.com/zenghansen/p/14921842.html