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

article/2025/10/31 2:44:30

覆盖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://chatgpt.dhexx.cn/article/JScjAEXH.shtml

相关文章

【Linux】自动生成makefile(ubuntu)

文章目录 前言一、Automake工具二、具体步骤1.下载Automake2.autoscan3.重命名configure.scan为configure.ac4.修改重命名后的configure.ac5.执行aclocal命令6.autoheader7.autoconf8.创建Makefile.am9.automake10.执行configure11.执行make12.执行Makefile编译完生成的可执行文…

【Linux】基础IO —— 下(实现动静态库)

🎇Linux:基础IO 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看…

【Linux】第九章 动态库和静态库(生成原理+生成和使用+动态链接)

🏆个人主页:企鹅不叫的博客 ​ 🌈专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接:代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

Linux——自动化编译(make的使用)、库文件(静态库和共享库的使用)

一、make的使用(自动化编译) make是Linux上的工程管理工具,可以实现自动化编译;make可以提高我们的编译效率。 1.安装make 命令:sudo apt install make 2.make的用法 (1)创建makefile文件&am…

rpc系列-ZooKeeper

一.简介 Zookeeper是一个分布式协调服务,就是为用户的分布式应用程序提供协调服务。 Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)。 Zookeeper所提供的服务涵盖:主从协调、服务器节点…

HBase 一文读懂

本文基于《尚硅谷大数据技术之HBase》编写。 HBase 简介 HBase定义 HBase是一种分布式、可扩展、支持海量数据存储的NoSQL数据库。 HBase数据模型 HBase的数据模型同关系型数据库(RDMS)很类似,数据存储在一张表中,有行有列。但从H…

Zookeeper学习

文章目录 今日目标apache zookeeperzookeeper的概念分布式和集群的理解zookeeper的集群架构和角色zookeeper的5大特性部署zookeeper集群环境计算机集群的安装部署三台节点(克隆两台)配置节点内存和CPUzookeeper安装 zookeeper的数据模型zookeeper的节点类…

Redission和Zookeeper分别实现分布式锁

Redission和Zookeeper分别实现分布式锁(windows) 1、Redission实现分布式事务 1.1 前提准备 下载好nginx(windows版本)下载好Jmeter(模仿高并发)下载好redis(windows版) 1.2 代码…

Zookeeper 客户端之基本操作指令

ZooKeeper命令行工具类似于Linux的shell环境,不过功能肯定不及shell啦,但是使用它我们可以简单的对ZooKeeper进行访问,数据创建,数据修改等操作. 命令行工具的一些简单操作如下: zkCli.sh客户端连接命令 ls 与 ls2 命…

kafka内置zookeeper启动失败报错INFO ZooKeeper audit is disabled. (org.apache.zookeeper.audit.ZKAuditProvider)

kafka内置zookeeper启动失败报错INFO ZooKeeper audit is disabled.(org.apache.zookeeper.audit.ZKAuditProvider)2022年新版win10安装kafka 安装配置kafka,在启动zookeeper时报错ZooKeeper audit is disabled 原因分析: 寻找资料发现是zookeeper设置参…

zookeeper日志及快照清理操作

事务日志可视化转换 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/bin/sh # scriptname: zkLog2txt.sh # zookeeper事务日志为二进制格式,使用LogFormatter方法转换为可阅读的日志 if [ -z "$1" -o "$1" "-h&quo…

【RPC】注册中心实现方案之ZooKeeper

文章目录 ZooKeeper一致性协议:ZAB ZooKeeper ZooKeeper是一个开源的分布式协调服务,它可以用来协调和同步多服务器之间的状态。 ZooKeeper 可以作为微服务架构中注册中心的选型,它最需要被关心的也是数据模型和一致性协议。数据模型关乎服…

Linux 搭建zookpeer集群和配置

zookpeer和JDK1.8下载地址 下载地址:zookpeer和jdk1.8 提取码:w189 解压以及配置zookpeer tar -zxvf zookeeper-3.4.6.tar.gz tar -zxvf jdk-8u144-linux-x64.tar.gz 基本参数配置 参数描述clientPort主要定义客户端连接zookeeper server的端口&…

hadoop-zookeeper的详细介绍以及安装配置步骤

一、zookeeper的介绍 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、…

k8s-7: kafka+zookeeper的单节点与集群的持久化

之前在k8s环境中有这个需求&#xff0c;看了好多的文档&#xff0c;都有坑&#xff0c;踩了一边总结一下&#xff0c;需要的朋友可自取 一、单节点部署 建议开发环境使用&#xff0c;且此处采用动态挂载的&#xff0c;生产不建议 1、安装zk cat > zk.yaml <<EOF a…

Docker 安装Zookeeper

第一步&#xff1a;查看本地镜像和检索拉取Zookeeper 镜像 # 查看本地镜像 docker images # 检索ZooKeeper 镜像 docker search zookeeper # 拉取ZooKeeper镜像最新版本 docker pull zookeeper:latest [rootlocalhost ~]# docker images REPOSITORY TAG …

mac pro m1:搭建zookeeper集群并设置开机自启

0. 引言 之前我们讲解过搭建zookeeper单节点&#xff0c;但在实际生产中&#xff0c;为了保证服务高可用&#xff0c;通常我们是采用集群模式。所以本次我们来实操集群模式的搭建 1. zk集群模式 zk可以作为注册中心和配置中心&#xff0c;常用在微服务各类组件的多节点服务治…

一款实用的数据恢复软件—zook data recovery wizard

zook data recovery wizard是RecoveryTools下的一款子品牌&#xff0c;同时也是一款功能实用的数据恢复软件&#xff0c;该软件可以从Windows中恢复已删除&#xff0c;损坏&#xff0c;格式化和丢失的数据&#xff0c;能够支持从驱动器&#xff0c;SD卡&#xff0c;硬盘&#x…

zook 报错 Unable to read additional data from server sessionid 0x0

zook报错启动报错&#xff1a; 2017-09-25 18:33:46,913 - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread1183] - Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting r…

hadoop大数据集群搭设(hadoop+zook+HBase+hive)百分百成功

hadoop大数据集群搭设 前言所需软件虚拟机准备工作一、Jdk安装二、安装zookeeper三、HBase安装四、mysql安装配置五、安装hive 前言 经过长时间的测试总结出在目前集群搭建最稳定的步骤是&#xff1a; 至少我按这个过程基本0失误&#xff0c;且初始化次数最少。当然也可以尝试…