【zlib】CentOS7.x 上编译升级zlib

一、实验背景

zlib是一个通用的,无专利的,可供许多不同的程序使用的无损数据压缩库。

# yum info zlib

【zlib】CentOS7.x 上编译升级zlib

zlib1.2.8版本中的crc32.c文件的‘crc32_big’函数存在安全漏洞,攻击者可利用该漏洞造成拒绝服务(应用程序崩溃)。

 

【zlib】CentOS7.x 上编译升级zlib

zlib 安全漏洞

https://www.anquanke.com/vul/id/1143541

http://www.cnnvd.org.cn/web/xxk/ldxqById.tag?CNNVD=CNNVD-201612-754

yum仓里中,zlib的rpm包版本较低,需要从官网下载最新的源码包,编译安装升级。

 

二、实验环境

操作系统:CnetOS7.5 

开发机: 192.168.1.101 (联网)

实验机: 192.168.1.102 (不联网)

 

三、实验预期

在开发机器上,用最新的zlib源码包,编译制作离线升级安装包,然后拉到实验机上升级zlib。

 

四、在开发机上安装编译工具

 

#  yum  -y install make gcc  

 

三、在开发机上下载zlib源码包编译安装

查看原zlib版本

【zlib】CentOS7.x 上编译升级zlib

 

# wget   https://www.zlib.net/zlib-1.2.11.tar.gz

# tar -zxvf zlib-1.2.11.tar.gz 

# cd zlib-1.2.11

#  ./configure --help

 

【zlib】CentOS7.x 上编译升级zlib

# ./configure     --libdir=/lib64/

 

【zlib】CentOS7.x 上编译升级zlib

注意:这里我们没有加  --prefix=/usr/local/zlib 预安装目录,只加了 库文件的生成路径  --libdir=/lib64/

 

Linux默认的一些关于目录的软连接

【zlib】CentOS7.x 上编译升级zlib

# make 

【zlib】CentOS7.x 上编译升级zlib

#  make install  

 

【zlib】CentOS7.x 上编译升级zlib

注意:从输出可以看出,make install 这一步实际上是对编译生成zlib相关文件的一个分发,也就是将编译生成文件拷贝到相关路径,我们在做离线升级安装包的时候,直接拷贝这些命令加到脚本就可以了!

 

卸载原zlib包,这样就完成zlib的升级

# rpm -qa | grep zlib | xargs  rpm -e --nodeps

# rm -f /lib64/libz.so.1.2.7

注:卸载zlib,顺序很重要,如果卸早,上一步make就会失败,提示:zlib的库文件,libz.so*没有,无法完成编译!

zlib这个基础库相当重要,一旦玩崩了,会导致跟多基本命令无法使用,服务器重启起不来!

 

刷新系统库文件

# ldconfig

 

 # ll /lib64/libz.*

 

【zlib】CentOS7.x 上编译升级zlib

从上可以看出,编译时带  --libdir=/lib64/ 新的库文件 直接就放置到了 /lib64/ 目录下了!

 

四、在开发机上制作离线升级安装包

在编译安装的 zlib-1.2.11目录新建 zlibUpgrade.sh 脚本

#  vim zlib-1.2.11/zlibUpgrade.sh

##################################################

#!/bin/bash

parent_path=$( cd "$(dirname "${BASH_SOURCE}")" ; pwd -P )

cd "$parent_path"

rm -f /lib64//libz.a

cp libz.a /lib64/

chmod 644 /lib64//libz.a

cp libz.so.1.2.11 /lib64/

chmod 755 /lib64//libz.so.1.2.11

rm -f /usr/local/share/man/man3/zlib.3

cp zlib.3 /usr/local/share/man/man3

chmod 644 /usr/local/share/man/man3/zlib.3

rm -f /lib64//pkgconfig/zlib.pc

cp zlib.pc /lib64//pkgconfig

chmod 644 /lib64//pkgconfig/zlib.pc

rm -f /usr/local/include/zlib.h /usr/local/include/zconf.h

cp zlib.h zconf.h /usr/local/include

chmod 644 /usr/local/include/zlib.h /usr/local/include/zconf.h

rpm -qa | grep zlib | xargs  rpm -e --nodeps

rm -rf /lib64/libz.so.1.2.7

ldconfig

ls -l  /lib64/libz*

######################################################

 

【zlib】CentOS7.x 上编译升级zlib

# chmod +x zlib-1.2.11/zlibUpgrade.sh

# tar -zcf  zlib-1.2.11Upgrade.tar.gz   zlib-1.2.11

 

【zlib】CentOS7.x 上编译升级zlib

如果需要批量升级其他机器,没有必要在每台机器上都编译安装一遍,将zlib-1.2.11Upgrade.tar.gz拷贝过去,解压执行脚本即可完成升级。

你也可以将其做成ansible playbook,用ansible完成批量升级安装。

 

五、升级测试机的zlib

#  tar -zxf  zlib-1.2.11Upgrade.tar.gz

# cd zlib-1.2.11

# sh -x zlibUpgrade.sh

 

# ll /lib64/libz.*

【zlib】CentOS7.x 上编译升级zlib

 

 

六、参考

 

zlib home site 

https://www.zlib.net/

 

处理绿盟科技安全评估的系统漏洞

https://www.cnblogs.com/xiaolinstudy/p/10069015.html

 

Linux系统删除zlib导致系统不能正常开机解决办法

https://blog.csdn.net/waitinghxl/article/details/50233437?utm_source=blogxgwz4

上一篇:Linux下Python的环境变量的设置


下一篇:CentOS7 卸载Firefox