linux命令详解(7)检测已经安装的rpm软件包

2014-12-3 8:10:28     23 人阅读    

检验已安装软件包

有时,机器上安装的软件会表现异常。例如,系统遭入侵时,攻击者往往会将系统二进制文件如ls或ps替换成破坏过的版本,从而隐藏自己的踪迹。这时,比照RPM数据库中存储的信息,检查文件系统中的文件就能派上大用场。

注意 入侵者可能不仅替换了关键的二进制文件,还篡改了RPM数据库。因此,这项工具可以用作检查系统有效性的一种方法,但绝非唯一途径。

 rpm会对每个被检验的文件执行多次检查,并在输出行开头用一组字符显示检查结果。点号表明检查通过。字母或数字表示检查失败。表2-3给出了最有用的检查和表示检查失败的字符。

表2-3:RPM包检验失败消息

表示检查失败的字符

说明

S

文件尺寸不符

M

模式不符:包括权限和文件类型

5

MD5校验和不符

U

用户所有权不符

G

用户组所有权不符

T

mTime(上次修改的时戳)不符

 

使用下面这条命令检验所有已安装软件包,并显示路径包含bin的文件检验结果:

# rpm -Va | grep bin

S.5....T    /usr/bin/curl

上面的命令表明文件系统中curl二进制文件尺寸、MD5校验和及修改时间与curl RPM包里的信息不符。换言之,这个文件已被替换。下面再举几个使用检验选项的例子:

# rpm -Vv coreutils                    详细检查来自coreutils包的文件

# rpm -V -f /usr/bin/pr                检验包含pr的软件包

# rpm -V -g Applications/Multimedia    检验选定分组里的软件包

 

                             重建RPM数据库

如果RPM数据库已遭破坏,并且严重到不能再安装软件包的地步,可以根据已安装软件包题头信息重建数据库。首先删除原有数据库文件,然后重建新的数据库文件,如下所示:

# rm /var/lib/rpm/__db.00*

# rpm --rebuilddb

关于rpm命令用法的更多细节,可查看rpm手册页(man rpm)或显示帮助信息(rpm --help)。

                        从SPRM构建RPM

通过重建用于构建RPM包的源代码,可以修改软件包,以便更符合自己使用软件的方式。首先需要获取待修改RPM包源代码(SRPM),并安装rpm-build包(yum install rpm-build)。

例如,键入如下命令可以下载和安装rpmforge-release SRPM包:

# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-

0.3.6-1.rf.src.rpm

# mkdir -p /usr/src/redhat/SOURCES

# rpm -ivh rpmforge-release-0.3.6-1.rf.src.rpm

安装源码包(src.rpm)后,rpm会将其包含的文件存放至/usr/src/redhat目录的默认构建树中。如果系统已安装软件开发工具软件包和rpm-build包,就可以由该源码包重建二进制RPM。修改包里的spec文件或源代码,然后用如下命令重建软件包:

# rpmbuild -bb /usr/src/redhat/SPECS/rpmforge-release.spec

这条命令的执行结果是一个RPM文件,输出到计算机体系结构相关目录:/usr/src/redhat/RPMS/arch,其中arch替换成计算机体系结构的名称(如i386、i586等)。最终得到的RPM文件可以直接安装。

                        从RPM提取文件

RPM实质上是个归档文件,包含准备安装到计算机的文件和用于标识软件的题头信息(说明、校验和、构建信息等)。你可以删除RPM包里的归档,并将归档输出为cpio归档文件。

 

cpio格式与第8章介绍的tar格式类似,也能用来备份和传送文件。下面的例子使用rpm2cpio命令从RPM提取cpio归档文件:

# rpm2cpio rpmforge-release-0.3.6-1.rf.x86_64.rpm > rpmforge-release.cpio

这个示例会提取RPM包rpmforge-release里的软件归档,存为cpio归档rpmforge-release.cpio。除了将rpm2cpio命令的输出存为cpio归档文件,还可以通过管道传送给cpio -tv命令,详细列出该归档内容:

# rpm2cpio rpmforge-release-0.3.6-1.rf.x86_64.rpm | cpio -tv

用rpm命令也能产生上面这条命令的输出结果。例如,rpm -qlvp rpmforge-release-0.3.6-1.rf.x86_64.rpm生成的结果与上述rpm2cpio命令行的完全相同。

要从RPM文件提取单个文件,可以使用rpm2cpio和cpio -idv命令,并在后一个命令里指定要提取的文件。下面这条命令会提取rpmforge.yum文件,并保存至当前目录下的usr/doc/rpmforge-release-0.3.6目录。

# rpm2cpio rpmforge-release-0.3.6-1.rf.x86_64.rpm \

    | cpio -idv ./usr/doc/rpmforge-release-0.3.6/rpmforge.yum

实际运行时,获取的软件包版本号不一定相同,其中的rpmforge-release目录须以系统现有目录名为准。

 

本文是作者在读取《linux命令详解手册》之后的随手笔记,如果大家喜欢这本书,可以去购买


原文地址:http://www.itmmd.com/201412/247.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android学习笔记(6)Intent 和 IntentFilter   上一篇
下一篇  android学习笔记(5)BroadcastReceiver 和 ContentProvider功能详解

精彩回复
发表评论
姓名:       

《程序员app》专门为程序员量身定做!