Linux中误删除libselinux恢复方法

操作环境:CentOS7.5

背景:安装openssl-devel时报错:

Error: Protected multilib versions: libselinux-2.5-12.1.el7.x86_64 != libselinux-2.5-14.1.el7.x86_64卸载了libselinux-2.5-14.1.el7.x86_64导致服务器故障。 rpm -e --nodeps libselinux-2.5-14.1.el7.x86_64

执行命令报:

ls: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory

修复方法:需要拷贝一个libselinux.so.1文件到/lib64/目录下

一、不关机修复

前提条件:需要服务器安装了rsync同时防火墙需要关掉或者放通了873端口。

1、在故障服务器启动一个rsync

# 故障服务器配置cat > /etc/rsyncd.conf < /etc/rsyncd.passchmod 600 /etc/rsyncd.pass # 启动服务rsync --daemon --config=/etc/rsyncd.conf# 查看服务是否启动cat /var/run/rsyncd.pid# 停止服务cat /var/run/rsyncd.pid | xargs kill -9 && rm -rf /var/run/rsyncd.pid

2、在另一台CentOS7.5服务器启动一个客户端。

echo "passwd" > /etc/rsyncd.passchmod 600 /etc/rsyncd.passrsync -aPv --port 873 /lib64/libselinux.so.1 ServerIP::tmp

3、在故障服务器把客户端拷贝过来的文件在拷贝到/lib64/

rsync -aPv /tmp/libselinux.so.1 /lib64

二、关机修复

说明:服务器没有安装rsync,需要挂在系统版本镜像,重启服务器进入救援模式。

1、进入救援模式的方法,如图选择Troubleshooting,在选择rescue a CentOS system,输入1获得一个有读写权限的shell。

image

image

image

![image](https://upload-images.jianshu.io/upload_images/23591373-4d1a580339bc99b1?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

2、重新挂载下系统为读写权限

mount -o remount rw /;mount -o remount rw /mnt/sysimage

3、输入ls /lib64/libc.so.6命令查看是否有该文件(因为是光盘自带的系统,并没有挂载在根目录下,所以该文件没有被删除)

image

4、找到了所需要的文件,只需要把该文件复制到丢失文件的系统里就可以(系统被挂载到了/mnt/sysimage目录中)

cp /lib64/libc.so.6 /mnt/sysimage/lib64(把文件复制到丢失的文件系统里)

image

5、重启服务器恢复正常。

6、进入救援模式遇到报错情况处理:

进入以下界面时报:

the rescue environment will now attempt to find your linux installation and mount it under the directory : /mnt/sysimage. you can then make any changes you can choose to mount your file systems read-only instead of read-write by choosing 2 if for some reason this process does not work chroot 2

时不能选择1以读写的权限进入系统,只能选择2以只读的模式进入到系统。

image

重新挂载一个除了系统版本外的ISO镜像,在进入到救援模式后,选择1以读写的方式进入系统,拷贝libselinux.so.1文件到lib64目录下,在重新挂载系统本身版本ISO后就可以选择1以读写的模式进入系统重新拷贝libselinux.so.1文件。

7、重启进入系统时报:

image

解决方法:

1、系统启动的时候,按下‘e’键进入grub编辑界面,编辑grub菜单,选择“kernel /vmlinuz-XXXXro root=/dev/vogroup00/logvol00 rhgb quiet” 一栏,按‘e’键进入编辑,在末尾增加enforcing=0,即:

kernel /vmlinuz-XXXXro root=/dev/vogroup00/logvol00 rhgb quiet enforcing=0(其中enforcing=0是需要加上去的,其他不动)

按‘b’键继续引导,正常进入系统。

2、如果系统启动按e不能进入到grub界面,那就是libselinux.so.1文件不兼容导致服务器不能启动上来,需要重新进入救援模式把/mnt/sysimage/lib64/libselinux.so.1删除后重新拷贝一个文件进入重启服务器,正常进入系统。