寫(xiě)在開(kāi)篇
為了在線上安裝環(huán)境依賴,給glibc庫(kù)升級(jí),由于線上環(huán)境libc.so版本低,不支持安裝,所以手賤把動(dòng)態(tài)庫(kù)中的libc.so.6給移走了,直接導(dǎo)致Linux系統(tǒng)崩潰,系統(tǒng)癱瘓,所有用戶均被強(qiáng)制退出。 意識(shí)到缺少對(duì)libc.so的認(rèn)識(shí),以為跟普通的lib包類(lèi)似,直接把新版的so軟連過(guò)去就可以滿足安裝和升級(jí),現(xiàn)在哦豁……. 軟鏈不軟鏈已經(jīng)不重要了,反正腿是軟趴趴的。
1、什么是libc.so
libc.so.6 是很基礎(chǔ)的庫(kù)(glibc),是軟連接到在Linux系統(tǒng)中基本的命令,有很多可執(zhí)行文件都會(huì)依賴這個(gè)共享庫(kù)。當(dāng)不小心把這個(gè)庫(kù)改名字或者移走了,都會(huì)導(dǎo)致不同程度的異常,可以借助LD_PRELOAD變量和”ldconfig”命令來(lái)恢復(fù)這個(gè)共享庫(kù)。前提是終端沒(méi)有斷開(kāi)的情況下操作。 libc.so.6是一個(gè)類(lèi)似于WINDOWS下的一個(gè)快捷指向型的文件,而 linux有兩種庫(kù),分別為:glibc、libc
- 說(shuō)明
2、操作流程
- 作系統(tǒng)版本是:Red Hat Enterprise Linux Server release 6.8
1、問(wèn)題出現(xiàn)
因?yàn)楣P者這里是直接在生產(chǎn)環(huán)境上操作,當(dāng)時(shí)是做軟連接沒(méi)成功,報(bào)錯(cuò):文件已存在,軟連接失敗。于是我們就想著把它給移走。還沒(méi)來(lái)得及做新軟鏈就直接導(dǎo)致報(bào)錯(cuò)。
- 基本上非系統(tǒng)命令都有這一條 libc.so.6 => /lib64/libc.so.6 ,因此libc.so.6至關(guān)重要,絕對(duì)不能刪,不能改名,不能移走,能不能覆蓋就不知道了,想作死的可以試試
[root@IDC-Redhat 6.8]# ln -s /home/david/libc-2.17.so /lib64/libc.so.6ln: creating symbolic link `/lib64/libc.so.6′: File exists[root@IDC-Redhat 6.8]# mv /lib64/libc.so.6 .who: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directoryawk: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directorydate: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory[root@IDC-Redhat 6.8]#
當(dāng)時(shí)就嚇尿了,生產(chǎn)環(huán)境被我玩壞了,怎么破。后來(lái)查原因才知道很多命令都依賴glibc,我把它的軟鏈接移走了系統(tǒng)找不到此庫(kù),那肯定玩完。
- 注意:出現(xiàn)這樣的情況只要不關(guān)機(jī)重啟,就不會(huì)影響業(yè)務(wù)運(yùn)行,不夠一定要注意磁盤(pán)的使用情況。
- 終端輸入用戶名后回車(chē)ENTER,直接提示以下報(bào)錯(cuò),無(wú)法登錄。
2、嘗試單點(diǎn)登入,會(huì)出現(xiàn)卡界面情況。如圖:
單用戶模式已經(jīng)救不回來(lái)了,本來(lái)就是一個(gè)無(wú)知的少年,現(xiàn)在更是雪上加霜。
3、解決問(wèn)題
當(dāng)時(shí)執(zhí)行命令誤操作之后,只要不斷開(kāi)遠(yuǎn)程連接還有挽回的余地。但遠(yuǎn)程異常斷開(kāi)連接之后很多人就沒(méi)有轍了。只能?chē)L試急救模式Rescue mode
[root@IDC-Redhat 6.8 ~]# mv /lib64/libc.so.6 .who: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directoryawk: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directorydate: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory[root@IDC-Redhat 6.8 ~]# LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6[root@IDC-Redhat 6.8 ~]# lltotal 120492-rw-r–r–. 1 root root 123361280 Apr 14 23:54 all.tar-rw——-. 1 root root 1098 Apr 14 23:21 anaconda-ks.cfg-rw-r–r–. 1 root root 8835 Apr 14 23:21 install.log-rw-r–r–. 1 root root 3384 Apr 14 23:21 install.log.sysloglrwxrwxrwx. 1 root root 12 Apr 14 23:20 libc.so.6 -> libc-2.12.so[root@IDC-Redhat 6.8 ~]# mvmv: missing file operandTry `mv –help’ for more information.[root@IDC-Redhat 6.8 ~]#
- 說(shuō)明:LD_PRELOAD允許你定義在程序運(yùn)行前優(yōu)先加載的動(dòng)態(tài)鏈接庫(kù),因此在使用ln前就加載了lib庫(kù),而不是等到使用ln時(shí)加載,這樣就能臨時(shí)使用命令了
2.也可以使用ldconfid命令來(lái)恢復(fù)
[root@IDC-Redhat 6.8 ~]# mv /lib64/libc.so.6 .who: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directoryawk: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directorydate: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory[root@IDC-Redhat 6.8 ~]#ldconfid[root@IDC-Redhat 6.8 ~]# lltotal 120492-rw-r–r–. 1 root root 123361280 Apr 14 23:54 all.tar-rw——-. 1 root root 1098 Apr 14 23:21 anaconda-ks.cfg-rw-r–r–. 1 root root 8835 Apr 14 23:21 install.log-rw-r–r–. 1 root root 3384 Apr 14 23:21 install.log.sysloglrwxrwxrwx. 1 root root 12 Apr 14 23:20 libc.so.6 -> libc-2.12.so
4、如果遠(yuǎn)程連接已經(jīng)退出,只能使用急救模式嘗試修復(fù)。首先準(zhǔn)備好系統(tǒng)安裝盤(pán),使用安裝盤(pán)啟動(dòng)系統(tǒng)。
1、選擇第三個(gè)選項(xiàng):Rescue installed system
2、選擇語(yǔ)言和鍵盤(pán)(默認(rèn)配置):
3、稍等一會(huì)兒會(huì)出現(xiàn)要不要設(shè)置網(wǎng)絡(luò),一般來(lái)說(shuō)網(wǎng)絡(luò)沒(méi)問(wèn)題就不用設(shè)置了,我這里選擇No:
4、rescue模式選項(xiàng):
- Continue, 救援模式程序會(huì)自動(dòng)查找系統(tǒng)中已有的文件系統(tǒng),并把他們掛載到/mnt/sysimage目錄下。
- Read-Only,則會(huì)以只讀的方式掛載已有的文件系統(tǒng)。
- Skip,則需要自己手動(dòng)掛載。
- Advanced ,高級(jí)選項(xiàng)。
5、原系統(tǒng)掛載路徑/mnt/sysimage,如果想獲得原系統(tǒng)root環(huán)境,執(zhí)行行命令:chroot /mnt/sysimage 即可。
6、直接選擇shell start shell 進(jìn)入shell 命令行
7、因?yàn)閳?zhí)行過(guò)這個(gè)命令 “mv /lib64/libc.so.6 .” ,導(dǎo)致執(zhí)行chroot /mnt/sysimge會(huì)報(bào)錯(cuò):
8、退出shell& reboot 重啟主機(jī)就OK啦
本文轉(zhuǎn)載于:業(yè)內(nèi)同行盆友來(lái)稿:對(duì)libc.so下毒手引發(fā)的慘痛血案,圍觀大型翻車(chē)現(xiàn)場(chǎng)…