覆盖libc.so.6的惨痛教训

news2024/11/25 2:30:01

覆盖libc.so.6的惨痛教训

    • 背景
    • 问题
    • 原因
    • 解决
      • 1、当前session未断开
      • 2、OS崩溃重启,所有ssh session断开
    • 惨痛教训
      • 1、对于上产环境的内核依赖库文件不能随意覆盖、删除。
      • 2、 scp 文件覆盖问题
    • 总结
    • 参考

背景

发生时间: 2022年11月28日08:55:20
偷了个懒,在安装tmux的时候直接从别的服务器上copy二进制文件,而且是跨OS 版本的。缺少一些lib库文件,直接从安装好的机器上copy过来。然后系统就崩了。惨痛的教训.

为了在线上安装环境依赖,给glibc库升级,由于线上环境libc.so版本低,不支持安装,所以手贱把动态库中的libc.so.6给移走了,直接导致Linux系统崩溃,系统瘫痪,所有用户均被强制退出。
意识到缺少对libc.so的认识,以为跟普通的lib包类似,直接把新版的so软连过去就可以满足安装和升级,现在哦豁… 软链不软链已经不重要了,反正腿是软趴趴的。

问题

执行tmux 命令发现缺少相关库依赖文件. 于是一波S操作。

目标机器

 ~]$tmux new -s etl01
tmux: error while loading shared libraries: libevent-2.0.so.5: cannot open shared object file: No such file or directory
 ~]$tmux new -s etl01
tmux: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by tmux)
tmux: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/lib64/libevent-2.0.so.5)
tmux: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by /usr/lib64/libevent-2.0.so.5)
tmux: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by /usr/lib64/libevent-2.0.so.5)

tmux安装成功的机器

 ⚡ root@master1  /tmp  scp -p /usr/lib64/libevent-2.0.so.5 10.50.10.43:/usr/lib64/
root@10.50.10.43's password:
libevent-2.0.so.5                                                                                                       100%  291KB 107.7MB/s   00:00
 ⚡ root@master1  /tmp 
 ⚡ root@master1  /tmp 
 ⚡ root@master1  /tmp  scp -p /lib64/libc.so.6 10.50.10.43:/lib64/
root@10.50.10.43's password:
libc.so.6                                                                                                                 0%    0     0.0KB/s   --:-- ETApacket_write_wait: Connection to 10.50.10.43 port 22: Broken pipe
lost connection
 ✘ ⚡ root@master1  /tmp  scp -p /lib64/libc.so.6 10.50.10.43:/lib64
ssh: connect to host 10.50.10.43 port 22: Connection refused
lost connection
 ✘ ⚡ root@master1  /tmp  scp -p /lib64/libc.so.6 10.50.10.43:/lib64
ssh: connect to host 10.50.10.43 port 22: Connection refused
lost connection

22端口down了,我就知道系统崩了。因为之前测试环境搞过一次,而这次是正式环境。

原因

libc.so.6 是很基础的库(glibc),是软连接到在Linux系统中基本的命令,有很多可执行文件都会依赖这个共享库。当不小心把这个库改名字或者移走了,都会导致不同程度的异常,可以借助LD_PRELOAD变量和"ldconfig"命令来恢复这个共享库。前提是终端没有断开的情况下操作。
libc.so.6是一个类似于WINDOWS下的一个快捷指向型的文件,而 linux有两种库,分别为:glibc、libc

解决

解决分为两种情况

1、当前session未断开

如果发现问题的当下没有关闭当前terminal就比较好恢复。 一旦关闭窗口将无法重新连接(可以自己新建窗口试下),重启机器后也将无法进入系统 。必须使用第二种方式修复

LD_PRELOAD允许你定义在程序运行前优先加载的动态链接库,因此在使用ln前就加载了lib库,而不是等到使用ln时加载,这样就能临时使用命令了

LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6

在这里插入图片描述

2、OS崩溃重启,所有ssh session断开

对于OS 直接崩溃的,比较难搞。我的属于这种,OS 直接重启了。而且起不来的那种。
当时登入ILO单用户模式,OS 在重启,一大堆trace,看着就好不了的那种。

主要思路
1、急救模式Rescue mode
2、rescue模式选则挂载sysinages 这个FS
3、在这个挂载点把之前的libc.so.6恢复

详细操作见参考【2】
在这里插入图片描述

惨痛教训

1、对于上产环境的内核依赖库文件不能随意覆盖、删除。

例如
① 内核级的 /lib64
② 系统级的 /usr/lib64
③ Root用户级别的/usr/local/lib64

2、 scp 文件覆盖问题

scp 命令默认会覆盖源文件,没有交互模式询问你是否覆盖。对于敏感文件scp 之前先确认目标服务器上是否存在,如果存在应先备份再进行后续操作.

总结

此次事件是因对系统层认知不足, 根本原因就是我使用了高版本 2.17 的libc.so.6,覆盖了系统的2.12版本导致的问题。
对于这个错误操作我做出深刻检讨, 对事件负全责。望今后自己和同事能引以为戒,避免再次发生此类事件.

参考

【1】修改libc.so.6导致崩溃解决
【2】救援模式恢复

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/43088.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Allegro走线自动关闭其它飞线操作指导

Allegro走线自动关闭其它飞线操作指导 Allegro在走线时候有一个自动关闭其它网络飞线的功能,具体操作如下 点击add connect命令 在option里面选择Auto-blank other rats 未勾选的状态 勾选后的状态,其它网络的飞线都被关闭了 This section is describe what the functio…

楼盘vr虚拟样板间,为售楼中心带来财气

房企也进入业绩冲刺期。为了完成销售目标,扩大市场销售面积,各大房企必将加大楼盘推出,降价冲销量已成常态。虚拟样板间采用创意化的营销策略,在激烈的竞争中脱颖而出。 所谓的VR虚拟样板间就是,利用数字化技术把建成或…

使用AWS的API Gateway实现websocket

问题 最近业务上面需要使用到WebSocket长连接来解决某些业务场景。 一图胜千言 注意:这里承担WebSocket服务器的是AWS API Gateway;后面的EC2业务服务,其实都是REST接口服务。 这里主要关注API Gateway和REST业务服务怎么实现API Gateway要…

Mysql事务机制

目录 一:定义 二:事务的特质 三:检测ACID特性 1. 准备工作. 2. 测试原子性和持久性 case1: 模拟原子性的全部失败 case2:模拟原子性的全部成功 case3:检查 持久性。 3. 测试一致性 case1&#xff…

[附源码]计算机毕业设计springboot餐馆点餐管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

马尔可夫链

目录 1.相关概念 2.马尔可夫链的状态概率分布推演及稳态分布 3.马尔可夫链的应用 4.稳态分布性质 1.相关概念 小明同学每日选择早餐的概率转化如下图所示: 并且当日的选择只受前一日的结果以及对应的转移概率影响,与之前的选择无关。———> …

Spring Cloud Alibaba 容器化部署最佳实践 | 本地部署版本 | Seata服务端组件安装

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 下载地址 https://github.com/seata/seata/releases Seata安装-修改配…

PyQt5 信号(Signal)与槽(Slot)

PyQt5 信号与槽信号与槽介绍内置信号与槽的使用自定义信号与槽的使用自定义信号和内置槽函数自定义信号和自定义槽函数自定义有参信号使用自定义信号参数装饰器信号与槽信号与槽的断开和连接多线程中信号与槽的使用信号与槽介绍 信号(Signal)与槽(Slot)是Qt中的核心机制&#…

基于Spring Boot的个人博客系统(源码+数据库)

目录 一、系统功能框架图 二、开发技术 三、开发环境 四、页面展示 1.登录页面 2.首页 3.文章详情页面 4.文章评论页面 ​5.后台页面 6.后台文件编辑页面 ​7.后台文章管理列表页面 五、文件组织结构 六、数据库设计 1. 文章详情表t_article 2.文章评论表t_comm…

Elasticsearch:构建地图以按国家或地区比较指标

标如果你不熟悉 Elastic 地图,本教程是一个不错的起点。 它会指导你完成处理位置数据的常见步骤。在完成本教程后,你将学会: 创建具有多个图层和数据源的地图使用符号、颜色和标签来设置数据值的样式在仪表板中嵌入地图在仪表板中跨仪表盘搜索 完成本教…

【Scala专栏】数据类型、变量常量、类和对象

本文内容主要分为3节,依次讲解:Scala的数据类型有哪些? 变量常量如何使用? 类和对象如何理解? 受限于博主的大脑容量,大概是无法做到事无巨细的,不过其实也没必要那么"细"&#xff0c…

Java核心技术卷Ⅰ-第三章Java的基本程序设计结构

重点 1.数据类型 2.运算符 3.字符串 4.控制流程 5.数组 1.数据类型 整型:Java程序必须保证在所有机器上都能得到相同的运行结果,所以各种数据类型的取值范围是固定的;在C/C中,int和long类型的大小与目标平台相关 类型存储需求取值…

基于粒子群算法的线性规划问题求解matlab程序

基于粒子群算法的线性规划问题求解matlab程序 1 基本粒子群算法流程 粒子群算法基于“种群”和“进化”的概念,通过个体间的协作与竞争,实现复杂空间最优解的搜索,其流程如下: (1)初始化粒子群&#xff…

Apache Maven

Apache Maven简介安装Eclipse中安装内置的Maven插件Maven官网下载,直接安装在电脑上Maven安装目录结构bin目录boot目录conf目录lib目录Maven生命周期与命令Maven生命周期clean:清理cleanup:清理所有default:默认site:站…

做数据集增强时,训练一半出现IndexError: tuple index out of range这种错误,不知道怎么改,有神仙赐教一下嘛?

在用YOLOv5做图像训练时,首先做了数据集的增强,但是增强中出现了如下的错误 首先出现这样的警告 (A:/stdy py37-g/agu_img.py:153: DeprecationWarning: An exception was ignored while fetching the attribute __array_interface__ from an object of …

maven部署方案之分离业务包

一、思想: 通过将业务包和公共包分离,集中管理所有包,打包时只构建业务包减少项目包的大小和传输时间。 为了观测稳定性,暂通过环境区分,较为频繁的联调环境采用该方式,测试、预发、正式暂保持一体化打包…

golang实现andflow流程引擎

1、andflow引擎 andflow_js可以实现在Html端设计流程,并将设计结果保存为json模型,andflow可以用于设计业务流程、数据处理流程、工作流、控制流等一切可流程化的过程。 由于golang具备高效、跨平台、并且还能够直接编译成可执行文件,这些优…

selenium 找不到元素:Unable to find element on closed window

浏览器:IE 报错信息: Unable to find element on closed window Unable to get browser 过程:登录》跳转页面(同窗口)》点击备份按钮 已知代码没有改过,而且部署到多个机子上,很多机子没有问…

C++11(一)

🧸🧸🧸各位大佬大家好,我是猪皮兄弟🧸🧸🧸 文章目录一、列表初始化initializer_list二、声明1.auto2.decltype3.nullptr三、C11 STL中的变化1.array2.forward_list3.STL其他变化四、C关键字新功…

NOIP 装箱问题

题目:[NOIP2001]装箱问题 ,哈哈,我们今天来看一道很古老的题嘛,这是选自NOIP上的一道题,好了,我们一起来看看题意吧: 考虑到直接复制题目,或者截屏的方式不是很方便阅读&#xff0…