当前位置: 首页 > 编程日记 > 正文

【救援过程】升级openssl导致libcrypto.so.1.1动态库不可用

目录

一、故障重现

二、救援过程


一、故障重现

近日为了解决CVE-2021-3449: 拒绝服务漏洞、CVE-2021-3450: 证书校验漏洞,自己编译了openssl-1.1.1k。
亲测发现:
只升级openssl的版本,动态库版本没有升级,系统可用。
升级openssl版本,同时升级libcrypto.so.1.1动态库版本,导致严重的故障,系统不可用。

原因是详细描述在这https://github.com/openssl/openssl/issues/11471,因此不建议自行编译升级openssl。

如果贸然升级,替换了libcrypto.so.1.1动态库,将导致严重的故障:
ssh无法远程登录服务器
root等账户无法本地登录,登录时输入root账户直接报错Login Error
passwd命令遇到authentication token manipulation error报错。
yum、rpm等命令都依赖libcrypto.so.1.1,救援模式下也无法卸载高版本的openssl。

二、救援过程

先找一台linux服务器,挂磁盘,创建分区(本例/dev/sdc1),格式化,并挂在到/mnt

[root@toy ~]# mount /dev/sdc1 /mnt/
[root@toy ~]# cd /mnt

下载原来openssl-1.1.1g版本相关的rpm包,用rpm2cpio和cpio命令从rpm包提取归档文件,也就是原来可用的openssl、libcrypto.so、libssl.so等文件,这些文件提取出来后放在usr/bin和usr/lib64目录下。

[root@toy mnt]# rpm2cpio openssl-1.1.1g-12.el8_3.x86_64.rpm | cpio -dium
[root@toy mnt]# rpm2cpio openssl-devel-1.1.1g-12.el8_3.x86_64.rpm | cpio -dium
[root@toy mnt]# rpm2cpio openssl-libs-1.1.1g-12.el8_3.x86_64.rpm | cpio -dium
[root@toy mnt]# rpm2cpio openssl-perl-1.1.1g-12.el8_3.x86_64.rpm | cpio -dium
[root@toy mnt]# rpm2cpio openssl-pkcs11-0.4.10-2.el8.x86_64.rpm | cpio -dium[root@toy mnt]# tree -L 2 usr/
usr/
├── bin
│   ├── CA.pl
│   ├── c_rehash
│   ├── make-dummy-cert
│   ├── openssl
│   ├── renew-dummy-cert
│   ├── tsget -> tsget.pl
│   └── tsget.pl
├── include
│   └── openssl
├── lib
├── lib64
│   ├── engines-1.1
│   ├── libcrypto.so -> libcrypto.so.1.1.1g
│   ├── libcrypto.so.1.1 -> libcrypto.so.1.1.1g
│   ├── libcrypto.so.1.1.1g
│   ├── libp11.so.3 -> libp11.so.3.4.2
│   ├── libp11.so.3.4.2
│   ├── libssl.so -> libssl.so.1.1.1g
│   ├── libssl.so.1.1 -> libssl.so.1.1.1g
│   ├── libssl.so.1.1.1g
│   └── pkgconfig
└── share├── doc├── licenses└── man

关闭这台服务器后,把这个磁盘挂在到故障服务器,启动后进入救援模式。

把这个分区(在这里就是/dev/sdb1)挂载到/sysroot/mnt目录。将提取的1.1.1g版本的归档文件,覆盖到相应的/bin、/lib64等目录,同时删除1.1.1k版本的库文件,ldconfig一下。再重启就可以正常登录服务器了。

switch_root:/# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdb1
switch_root:/# mount -o rw,remount /sysroot
switch_root:/# mount /dev/sdb1 /sysroot/mnt/
switch_root:/# chroot /sysroot/sh-4.4# cd /mnt
sh-4.4# cp -r ./usr/bin/*   /usr/bin
sh-4.4# cp -r ./usr/lib64/* /usr/lib64
sh-4.4# rm /usr/lib64/libcrypto.so.1.1.1k
sh-4.4# rm /usr/lib64/libssl.so.1.1.1k
sh-4.4# ldconfigsh-4.4# cd
sh-4.4# touch .autorelabelsh-4.4# exit
switch_root:/# exit

进入服务器后用yum downgrade命令,降级重新安装openssl-1.1.1g。

yum downgrade openssl openssl-devel openssl-libs openssl-perl openssl-static --allowerasing

经验教训,升级务必使用测试机充分测试,虚拟化环境能做快照就做快照。

相关文章:

C++类class

一、定义 构造函数:在定义一个类对象时会自动调用,可用于实现一些功能,比如new一个内存。 构造函数,没有返回值也不写void函数名称与类名相同构造函数可以有参数,因此可以发生重载程序在调用对象时候会自动调用构造&…

pandas学习之Series结构

#!/usr/bin/env python # -*- coding:utf-8 -*- """ 系列(值的集合) DataFrame数据包(系列对象的集合) panel(数据文件对象的集合) 一个系列对象可以保存许多数据类型,包括 浮点数表示浮点数…

Java中的Map集合遍历总结(详尽版)

因为Map集合中的键值对排列无序,所以不能用传统的for循环来遍历,只能使用加强循环(for-each)和迭代器进行遍历。 让我们通过例子来了解Map集合的遍历: package gather; import java.util.HashMap; import java.util.Iterator; import java.…

Ansible01-Ansible基础和部署

目录 一、Ansible简介 二、安装部署Ansible 2.1、在控制节点安装ansible 2.2、对Linux和Unix受管节点要求 2.3、基于 Microsoft Windows 的受管主机 2.4、受管网络设备 三、Ansible配置文件 3.1、ansible.cfg配置文件推荐做法 3.2、ansible.cfg配置文件内容 四、Ansi…

C++/C文件读取

1、C文件操作 ofstream:写操作ifstream: 读操作fstream : 读写操作 打开方式解释ios::in为读文件而打开文件ios::out为写文件而打开文件ios::ate初始位置:文件尾ios::app追加方式写文件ios::trunc如果文件存在先删除&#xff0c…

HashSet中的add()方法( 二 )(详尽版)

本篇接着上一篇:(详尽版)HashSet中的add()方法( 一 )(详尽版) 有些东西上一篇说过了,这里就不再赘述了,具体说一下再次添加与第一次添加的区别: import java.util.HashSet;public …

20155321 实验四 Android程序设计

20155321 实验四 Android程序设计 安装Android studio成功 任务一:Android Stuidio的安装测试: 参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十四章: 安装 Android Stuidio完成Hello World, 要求修改res目录…

Ansible02-实施playbook

一、编写和运行playbook 1.1、编写playbook play 是针对清单中选定的主机运行的一组有序任务。playbook 是一个文本文件,其中包含由一个或多个按特定顺序运行的 play 组成的列表。 playbook 是以 YAML 格式编写的文本文件,通常使用扩展名 .yml 保存。…

linux下解压缩文件中文乱码问题的解决

在windows上压缩的文件,是以系统默认编码中文来压缩文件。由于zip文件中没有声明其编码,所以linux上的unzip一般以默认编码解压,中文文件名会出现乱码。 虽然2005年就有人把这报告为bug, 但是info-zip的官方网站没有把自动识别编码列入计划&a…

ROS知识点总结

1、ROS功能包的目录下不能有中文 2、 WorkSpace --- 自定义的工作空间|--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。|--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库…

Effective Java:对于全部对象都通用的方法

前言: 读这本书第1条规则的时候就感觉到这是一本非常好的书。可以把我们的Java功底提升一个档次,我还是比較推荐的。这里我主要就关于覆盖equals、hashCode和toString方法来做一个笔记总结。希望可以与君共勉。 概述: 这一章主要是说明一些对…

HashSet中的add()方法( 一 )(详尽版)

让我们用例子来理解add()方法的底层代码吧&#xff0c;Let’s go&#xff1a; import java.util.HashSet;public class Test {public static void main(String[] args) {HashSet<String> names new HashSet<String>();names.add("Jim");//向HashMap集合…

Ansible03-管理变量、加密、事实

目录 一、管理变量 1.1、变量的基本用法 1.2、使用已注册变量捕获命令输出 二、管理加密 2.1、ansible-vault常用场景 三、管理事实 3.1、事实基本用法 3.2、创建自定义事实 3.3、魔法变量hostvars、group_names、groups、inventory_hostname 一、管理变量 1.1、变量…

HashSet中的add()方法( 零 )(详尽版)

我们知道在使用HashSet集合时&#xff0c;也就是在用HashMap集合&#xff0c;这是因为HashSet的底层是HashMap&#xff0c; public HashSet() {map new HashMap<>(); }在详述HashSet中的add()方法之前&#xff0c;我们要知道HashMap中的hash&#xff0c;因为在add()的底…

layui上传图片接口

mvc中 前台调用接口 url&#xff1a;"../upload/uploadfiles/" 然后开始接口 代码&#xff1a; string a ""; try { HttpFileCollection file context.Request.Files;//获取选中的文件 for (int i 0; i < file.Count; i) { string cFileName Path.G…

shell与 .sh文件与 .bash文件

一、shell和bash shell是LInux系统下的解释器&#xff0c;类似于windows下的cmd。shell对用户输入到窗口中的命令行进行解释&#xff0c;输入到内核。 bash同样是Linux系统下的解释器&#xff0c;是bash的改进版。 二、.sh文件与.bash文件 .sh文件和.bash文件都是脚本文件&a…

php session存入redis

一、 安装phpredis扩展php连接redis需要安装phpredis扩展。下载地址&#xff1a;https://github.com/phpredis/phpredis/releases&#xff0c;选用相应版本。笔者用的是php5.6.29&#xff0c;下载了phpredis-3.0.0安装出了问题&#xff0c;于是换成phpredis-2.2.8&#xff0c;正…

Ansible04-任务控制

目录 一、循环 二、条件 三、handlers 四、失败的处理 一、循环 使用 loop 关键字对一组项目迭代任务&#xff0c;循环变量 item 保存每个迭代过程中使用的值。 [studentworkstation ansible]$ vim loop.yml --- - name: Test loophosts: devgather_facts: novars:num:- …

HashSet中的add()方法( 三 )(详尽版)

上接HashSet中的add()方法( 二 )&#xff08;详尽版&#xff09; &#xff0c;前两篇说的是泛型为String类的add()方法的具体执行过程&#xff0c;此后三篇说说泛型为自定义类的add()方法的具体执行过程&#xff1a; 首先让我们来自定义一个学生类&#xff1a; public class …

mono修改配置

当前mono安装目录为:/home/mono&#xff0c;安装成功后修改配置需进入这个路径&#xff1a; cd /home/mono 1.修改TcpBinaryFrameManager.cs文件 cd /home/mono/mono-2.10.8 vim mcs/class/System.ServiceModel/System.ServiceModel.Channels.NetTcp/TcpBinaryFrameManager.cs …

[Java in NetBeans] Lesson 01. Java Programming Basics

这个课程的参考视频在youtube。 主要学到的知识点有&#xff1a; Create new project, choose Java Application.one .jar file/ package(.jar name with the same as package), one package can contains mutiple .java files.Comment mutiple lines by using "/* */&quo…

ubuntu中常用指令

常用指令 清空命令行 CtrlL Conda 创建虚拟环境 conda create -n 虚拟环境名称 python3.7.10 查看虚拟环境列表 conda info --envs 激活虚拟环境 conda activate 虚拟环境名 退出虚拟环境 conda deactivate 虚拟环境名称 安装功能包 conda install 功能包名称 卸载功能包 con…

Ansible05-部署文件

目录 一、部署文件的常用模块 二、使用jinja2文件部署自定义文件 一、部署文件的常用模块 部署文件常用模块有 file 创建、删除文件或目录&#xff0c;修改selinux上下文。copy 复制文件到受控节点上&#xff0c;也可以直接在受控结点上创建文件。fetch 从受控结点获取文件…

HashSet中的add()方法( 四 )(详尽版)

上接 HashSet中的add()方法( 三 )&#xff08;详尽版&#xff09; &#xff0c;我们重写一下Student类中的hashCode()方法来看看是否还能不能添加重复的学号了&#xff0c; 在学生类中重写hashCode()方法&#xff1a; public class Student {private String id;public Studen…

Laravel框架中的event事件操作

有时候当我们单纯的看 Laravel 手册的时候会有一些疑惑&#xff0c;比如说系统服务下的授权和事件&#xff0c;这些功能服务的应用场景是什么&#xff0c;其实如果没有经历过一定的开发经验有这些疑惑是很正常的事情&#xff0c;但是当我们在工作中多加思考会发现有时候这些服务…

yolact_ros出坑记录

教程&#xff1a;https://github.com/Eruvae/yolact_ros 下载通信中的话题msg 创建虚拟环境 conda create -n yolact python3.7.10 conda activate yolact 配置yolact环境 https://github.com/dbolya/yolact 运行效果如下所示&#xff1a; 在虚拟环境中安装需要的包 conda …

堡垒机高危命令正则表达式

堡垒机可以设置高危命令阻断&#xff0c;防止操作人员误操作造成删库跑路。但是什么是高危命令&#xff0c;需要管理员通过配置正则表达式&#xff0c;进行命令匹配。 今天2021年8月6日先匹配最常见的删库跑路命令 rm -rf / &#xff0c;以下几种表达式联合起来就可以阻断这类…

实验吧 速度爆破

题目链接&#xff1a;http://ctf5.shiyanbar.com/ppc/sd.php 这道题很简单呀&#xff0c;一点斜的歪的都没有&#xff0c;只是我一个小菜鸟在完成时会遇到一些小麻烦&#xff0c;几度想去看wp&#xff0c;最后还是忍住了。。。 思路很简单 1、 先抓取页面里生成的hash值 2、 循…

返回一个二维整数数组中的最大的子数组和

一。题目&#xff1a; 1、输入一个二维整形数组&#xff0c;数组里有正数有负数。 2、二维数组中连续的一个子矩阵组成一个子数组。 3、求所有子数组的和的最大值。 二.设计思想&#xff1a; .定义一个二维数组&#xff0c;使用二重循环对其进行赋值&#xff0c;对其进行遍历&a…

HashSet中的add()方法( 五 )(详尽版)

上接 HashSet中的add()方法( 四 )&#xff08;详尽版&#xff09; &#xff0c;我们再重写一下equals()方法来看看是否可以不能存入相同的id&#xff1a; 在学生类中再重写equals()方法&#xff1a; public class Student {private String id;public Student(String id) {thi…