7.8 Linux重建RPM数据库(修复损坏的RPM数据库)

网友投稿 901 2022-05-29

我们知道,RPM 包是很多 linux 发行版(Fefora、RedHat、SuSE 等)采用的软件包管理方式,安装到系统中的各 RPM 包,其必要信息都会保存到 RPM 数据库中,以便用户使用 rpm 命令对软件包执行查询、安装和卸载等操作。

但并非所有的用户操作都“按常理出牌”,例如 RPM 包在升级过程被强行退出、RPM 包安装意外中断等误操作,都可能使 RPM 数据库出现故障,后果是当安装、删除、査询软件包时,请求无法执行,如图 1 所示:

图 1 RPM数据库出现故障

这时就需要重建 RPM 数据库,执行如下 2 步操作:

删除当前系统中已损坏的RPM数据库,执行如下命令:

[root@localhost ~]# rm -f /var/lib/rpm/_db.*

重建 RPM 数据库,执行如下命令:

[root@localhost -]# rpm -rebuilddb

这一步需花费一定时间才能完成。

除了用户误操作导致 RPM 数据库崩溃,有些黑客入侵系统后,为避免系统管理员通过 RPM 包校验功能检测出问题,会更改 RPM 数据库。

理论上,系统一旦被黑客“光顾”,则做的任何操作都将不可信。

对于这种情况,我们可以按照以下步骤对文件进行检测:

对于要校验的文件或命令,找到它属于哪个软件包,如下命令所示:

[root@localhost ~]# rpm -qf/etc/rc.d/init.d/smb samba-3.0.23c-2

7.8 Linux重建RPM数据库(修复损坏的RPM数据库)

使用 -dump 选项查看每个文件的信息,使用 grep 命令提取对应文件信息:

[root@localhost ~]# rpm -ql -dump samba|grep /etc/rc.d/init.d/smb /etc/rc.d/init.d/smb 2087 1157165946 b1c26e5292157a83cadabe851bf9b2f9 0100755 root root 1 0 0X

此信息中,“2087”表示 smb 文件最初的字符数,“b1c26e5292157a83cadabe851bf9b2f9”表示 smb 文件的 MD5 校验值,“0755 root root”表示文件权限及所有者、所属组。

查看实际的文件,通过对比文件大小,所有人、所属组、权限、MD5 校验值等数据,判断文件是否被改动过:

[root@localhost ~]# ls -l /etc/rc.d/init.d/smb -rwxr-xr-x 1 root root 2087 Sep 2 2006/etc/rc.d/init.d/smb [root@localhost ~]# md5sum /etc/rc.d/init.d/smb b1c26e5292157a83cadabe851bf9b2f9 /etc/rc.d/init.d/smb

以上校验结果显示,系统的 /etc/rc.d/init.d/smb 文件的信息和通过 rpm-ql-dump Samba 命令获取的信息一致,因此可以断定此文件没有被入侵或更改。

注意,如果确信 RPM 数据库遭到了修改,就要基于从光盘或者其他值得信赖的来源处获得的 Samba RPM 文件进行检査。

[root@localhost~]# rpm -ql --dump -p /mnt/cdrom/Fedora/RPMS/samba-3.0.23c-2.i386.rpm | grep /etc/rc.d/init.d/smb warning: samba-3.0.23c-2.i386.rpm: Header V3 DSA signature: NOKEY, key ID 412a&62 /etc/rc.d/init.d/smb 2087 1157165946 b1c26e5292157a83cadabe851 bf9b2f9 0100755 root root 1 0 0 X

得到的结果如果和基于 RPM 数据库运行的命令结果不同,说明 RPM 数据库已被更改,就需要修正文件错误和系统漏洞,重建 RPM 数据库。

Linux 数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Qt入门系列开发教程【基础控件篇】QLabel文本标签
下一篇:【人工智能】计算机视觉之OpenCV学习详解一
相关文章