覆盖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】救援模式恢复

覆盖libc.so.6的惨痛教训相关推荐

  1. 总结:被MySQL UTF8编码坑的惨痛教训...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 最近遇到几个项目被MySQL的utf8编码坑,想起之前编码问题被坑 ...

  2. directx修复工具win7_win10下安装win7双系统的惨痛教训!

    今天 给大家介绍做双系统,win10下安装win7,双系统下的惨痛教训! 开始: 寻找win7要安装的盘符,发现没有空闲的磁盘,重启进U盘PE,切割磁盘,预留一块80G空闲分区. 将准备好的Ghost ...

  3. 人工智能70年,研究者们最不愿意面对的惨痛教训是……

    本文转载自公众号"读芯术"(ID:AI_Discovery) 自1956年达特茅斯学院那场著名会议以来,人工智能研究走过了这么多年的旅途,经历许多高峰也走过很多低谷.前事不忘后事之 ...

  4. (九)2005年我的第一次软件行业创业,烧掉30万、2年时间打水漂的惨痛教训

    为什么80%的码农都做不了架构师?>>>    本想写到第9篇就结束了,我想这么写,还是有些自私,没有把一些心得体会都写出来,或者可以说是有些保留,我想正好写10篇吧,最后一遍为互动 ...

  5. label自定义的惨痛教训

    修改label文字: source.DefaultLabelProperties.Style.Font.Size=9; 修改文字的位置: source.DefaultLabelProperties.L ...

  6. java.lang.reflect.InvocationTargetException 的惨痛教训

    记录发布webservice漏发内部类文件导致异常java.lang.reflect.InvocationTargetException 的惨痛教训 我的一个实现类中调用了一个内部类,在本地测试正常, ...

  7. (三)2005年我的第一次软件行业创业,烧掉30万、2年时间打水漂的惨痛教训

    刚开始创业时想,自己将控制系统的底层,例如数据库访问层,权限管理等核心部分掌握在自己手里,这样也不担心别人偷走辛苦的劳动成果,现在想想也很幼稚,成熟的反编译器满天飞,若真想破解,可能花费不了1天,应该 ...

  8. (四)2005年我的第一次软件行业创业,烧掉30万、2年时间打水漂的惨痛教训

    我的合伙人加入后,我们两个开始阶段经常交流,怕沟通不畅,就干脆住一起了,住一个房间了,还签订了一些协议,创业不能轻易放弃,若谁放弃净身出户等,若有债务还需要承担,他也从家里拿了1万元入股,我们按30% ...

  9. (八)2005年我的第一次软件行业创业,烧掉30万、2年时间打水漂的惨痛教训

    我当时真想来把火,把能烧的都烧了,但是想想,这些都是我辛苦赚来的钱,或者是我家人慢慢省下来的钱买来的,这些东西买来时都很值钱,要处理了只能是废铜烂铁了. 我父母当时也在宁波,我平时不太喜欢跟他们交流, ...

最新文章

  1. api.php t.cn,PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
  2. VMware安装MikroTik RouterOS chr
  3. 深信服C/C++技术一面二面20180924
  4. Pixysoft.Framework.MemoryCache 开发实录
  5. jquery城市选择案例
  6. 近年来,学习图像去雾不得不看的论文和源代码
  7. 公司内网环境下部署流量监控服务器的初步方案
  8. Android逆向实战篇(Luac文件解密)
  9. 使用 Beyond Compare 和版本控制系统
  10. redis过期策略有哪些?内存淘汰机制有哪些?
  11. 用logisim实现串行的全加器
  12. 戴尔服务器物理关机,戴尔服务器的远程开机和关机
  13. Linux 系统 网卡RTL8723BE 信号差不稳定的解决办法
  14. python程序的循环结构_四、python程序结构之循环结构
  15. 小米WIFI恢复出厂设置方法
  16. 思科、IBM、甲骨文、Uber相继裁员,寒冬将至 ?
  17. BMI(体重指数)计算C语言
  18. Linux 应用领域
  19. 【Python 实战】---- 批量将图片转base64导出到excel中
  20. p2psearcher无法连接到KAD网络或ed2k服务器的解决办法

热门文章

  1. WorldClim 数据下载
  2. 参考基因组下载和建立索引
  3. 计算机中用户的分类有哪些,用户分类浅谈交互设计 -电脑资料
  4. ZYNQ学习之路13.创建PetaLinux工程
  5. Educational Codeforces Round 110 (Rated for Div. 2) D. Playoff Tournament
  6. 基于支持虚拟安全架构策略的SDN / NFV的5G接入网络
  7. mfc不可识别的数据库格式mdb,怎么解决
  8. OpenCV图像处理——GUI功能(三)
  9. 【Nodejs】Node-js笔记
  10. Sql Server实用操作小技巧集合(转)