文章目录

  • 一、校验介绍
  • 二、参考示例
    • (一)校验某个已安装的软件包的所有文件
    • (一)校验系统中所有已安装的软件包
    • (二)校验含有指定文件的软件包
    • (三)校验指定类别的软件包
    • (四)校验指定包裹文件
    • (五)不执行校验脚本程序
    • (六)不检查依赖
    • (七)忽略丢失文件的错误
    • (八)忽略MD5检查和的错误

一、校验介绍

使用命令 rpm 的选项 -V 可以校验软件包,此校验功能可以用来确认文件是否被修改或覆盖,其实就是检查文件属性是否有改动,命令格式如下:

rpm -V [校验选项1 校验选项2...] [软件包标识或包裹文件...]

文件属性包括属主、属组、权限、MD5 签名、大小、主设备号、从设备号、符号连接及最后修改时间 9 项内容,其中每一项改变 RPM 都会发现。这 9 项属性 RPM 并非都校验,因为文件类型不同,其中某些属性会没有意义,RPM 因而也不会去检查。

校验时若发现文件丢失,RPM 将输出"missing 文件名"。若有属性方面错误,RPM 将输出如此格式的信息:SM5DLUGT c 文件名。

各个字母的含义如下:

英文字符 含义
S 表示文件大小改变
M 表示权限改变
5 表示 MD5 签名改变,也就是内容改变了
D 表示主从设备号改变
L 表示符号连接改变
U 表示属主改变
G 表示属组改变
T 表示最后修改时间改变
c 表示文件属于配置文件

如果文件某属性正常,则对应的位置会显示字符 .,否则的话将显示对应的字母,如下所示:

[root@htlwk0001host ~]# rpm -V bash
S.5....T /etc/bashrc

本例校验 bash 包,只有校验失败的文件才被列出,结果发现 /etc/bashrc 文件有问题,输出的属性中出现符号 S ,这表明文件大小被改变了,出现符号 S 表明文件内容被改变了,出现符号 T 表明文件的最后修改时间改变了。通过这些属性字符,我们可以清楚地知道文件哪些属性改变了。

格式中的 c 字符仅当校验文件为配置文件时才输出。如 lze 包中有 /etc/inputme.def 配置文件,如果我们人为改变其最后修改时间,RPM 会发现什么呢?我们看下:

[root@htlwk0001host ~]# touch /etc/inputme.def
[root@htlwk0001host ~]# rpm -V lze
.......T c /etc/inputme.def
[root@htlwk0001host ~]#

说明:本例中用 touch 命令改变包 lze 的配置文件 inputme.def 的最后修改时间,然后校验包,结 RPM 发现了这个情况(以 T 表示出来),我们还看到了 c 字符,说明 /etc/inputme.def 是个配置文件。

二、参考示例

(一)校验某个已安装的软件包的所有文件

比如系统上运行了 sendmail,检查所有相关文件的完整性:

[root@fubar/root]# rpm -V sendmail
S.5....T c /etc/aliases
missing /etc/mail/ip_allow
S.5....T c /etc/mail/relay_allow
S.5....T c /etc/sendmail.cf
S.5....T c /etc/sendmail.cw
S.5....T /usr/sbin/sendmail
S.5....T /var/log/sendmail.st
[root@fubar/root]#

从上面的输出可见,文件 aliases,relay_allow,sendmail.cf 和 sendmail.cw 的大小、MD5签名、最后修改时间发生了改变。由于它们是配置文件,应该没什么关系。但是 /usr/sbin/sendmail 的改变就要引起注意了,它是一个监听在 25 端口的可执行文件,用来接受信件。除非你升级了 sendmail,否则它不应该校验失败,很明显有人修改或者覆盖了原来的 sendmail 文件,可能带有木马或者后门。

输出还显示 ip_allow 文件被删除或者被改名。这是用来检查和控制 SPAM 的一个文件,它的丢失某种程度上表明相关的二进制文件可能被修改。

在查看校验输出结果时,要特别留意 MD5 是否变化,入侵者经常修改或覆盖某些文件来隐藏他们的踪迹。

(一)校验系统中所有已安装的软件包

配合选项 -a,指示 RPM 校验系统中所有已安装的软件包,示例如下:

[root@htlwk0001host ~]# rpm -V -a
S.5....T c /etc/profile
.M....G. /usr/man/man1
missing/etc/rc.d/rc3.d/S85httpd
[root@htlwk0001host ~]#

本例校验后,RPM 发现:

  1. 文件 /etc/profile 的大小(S),内容(5)及最后修改时间(T)已改变,而且明示这是个配置文件(c);
  2. 目录 /usr/man/man1 的权限(M),属组(G)已改变;
  3. 文件 /etc/rc.d/rc3.d/S85httpd 丢失了(missing)。

使用选项 & 让命令在后台运行,示例如下所示:

rpm -Va > /root/rpm_chk.txt &

注:上述命令让 RPM 检查服务器上已安装的所有 RPM 包,将结果输出到 rpm_chk.txt 文件,最后的可选项 “&” 表示命令在后台运行,给出shell 提示符可以作其他事情。

(二)校验含有指定文件的软件包

使用选项 -f 或者 --file 校验含有指定文件的软件包。如果用户仅知道某个文件,但忘了它所在的软件包,又想校验这个包时,可用此选项。示例如下:

# rpm -V -f /bin/cp /bin/bash
SM5....T /bin/ls
S.5....T /etc/bashrc
#

说明:本例校验含 /bin/cp 和 /bin/bash 文件的软件包,发现有两个文件(/bin/ls 与 /etc/bashrc)改变了。

(三)校验指定类别的软件包

选项 -g--group 用于校验已安装的指定类别的软件包。关于软件的类别,请参见<<精通 RPM 之查询篇>>。

例如,校验 Applications/Editors 与 Applications/Text 类别的软件包:

# rpm -V -g Applications/Editors Applications/Text
.......T c /etc/inputme.def
#

(四)校验指定包裹文件

如果用户想校验某个 RPM 软件包所含文件在系统中的属性是否正常,则可用选项 -p 指定该包裹文件进行校验,如下例:


# rpm -V -p fileutils-4.0-3.i386.rpm
SM5....T /bin/ls
#

说明:本例中 RPM 发现 fileutils 包裹中的 /bin/ls 文件与当前系统中的 /bin/ls 文件有所不同(S大小改变了、M权限改变了、5内容改变了、T修改时间改变了)。

(五)不执行校验脚本程序

有些 RPM 软件包中内置有校验脚本程序(verifyscript),它执行一些特殊的检查。当用户不想执行这类脚本程序时,需用选项 --noscripts。参考示例如下所示:

# rpm -V -v XFree86-libs
Looking for /usr/X11R6/lib in /etc/ld.so.conf... found
# rpm -V -v --noscripts XFree86-libs
#

说明:本例中第一个校验命令所输出的内容为 XFree86-libs 包内的校验脚本程序的输出;第二个命令中用了选项 --noscripts,这使得校验脚本程序没有执行,因而也没有什么输出了。

(六)不检查依赖

RPM 校验软件包时,默认情况是检查依赖,因为依赖是否正常关系到一个软件能否可靠运行。校验时选用 --nodeps 选项用于指示 RPM 不检查依赖。注意:本选项主要针对软件包制作者,除非必要,不要使用此选项。

我们可以通过校验时用 -vv 选项输出调试信息,从而可以看到是否检查依赖的区别:

# rpm -V -vv lze-6.02-1
D: opening database mode 0x0 in //var/lib/rpm/
D: record number 7253720
D:requires: /bin/sh satisfied by db file lists.
D:requires: ld-linux.so.2 satisfied by db provides.
D:requires: libc.so.6 satisfied by db provides. # libc.so.6 依赖于 db provides
D:requires: libc.so.6(GLIBC_2.0) satisfied by db provides.
D:requires: libc.so.6(GLIBC_2.1) satisfied by db provides.
.......T c /etc/inputme.def
# rpm -V -vv --nodeps lze-6.02-1
D: opening database mode 0x0 in //var/lib/rpm/
D: record number 7253720
.......T c /etc/inputme.def
#

注:有 requires 的行(háng)为检查依赖,以 D: 开头的行(háng)为调试输出信息。

(七)忽略丢失文件的错误

默认情况下,RPM 在校验时若发现文件丢失,会报出"missing 文件名"的错误。如果用户想忽略这方面的错误,请用 --nofiles 选项。请看下面的示例:

# rpm -V file
missing /usr/man/man1/file.1
# rpm -V ——nofiles file
#

注:使用此选项后RPM没有再报出文件丢失的错误。

(八)忽略MD5检查和的错误

选项 --nomd5 用于指示 RPM 忽略文件内容的改变,即忽略MD5检查和错误。此选项常用于校验日志类型的文件(此类文件内容并不重要,且经常变化)。

请看下面的例子:

# rpm -V bash
S.5....T /etc/bashrc
# rpm -V ——nomd5 bash
S......T /etc/bashrc
#

说明:例子中校验 bash 包,不用 --nomd5 选项时,输出有5(MD5检查和),表示 /etc/bashrc 内容变化了,而采用 --nomd5 选项时,相应位置输出点(.),表示文件内容正常了。

精通 RPM 之校验篇_检验篇_检测篇相关推荐

  1. 精通RPM之--制作篇(上)

    制作篇(上) 要想制作一个RPM格式的软件包,需要编写软件包描述文件.其标准命名格式为:软件名-版本号-释出号.spec,这个文件,详细描述了有关该软件包的诸多信息,如软件名,版本,类别,说明摘要,创 ...

  2. 精通RPM之--制作篇(上) 原作:雨亦奇 赵建利

    要想制作一个RPM格式的软件包,需要编写软件包描述文件.其标准命名格式为:软件名-版本号-释出号.spec,这个文件,详细描述了有关该软件包的诸 多信息,如软件名,版本,类别,说明摘要,创建时要执行什 ...

  3. 精通RPM之--制作篇(rpmbuild)

    精通RPM之--制作篇 http://www.lupaworld.com/home-space-uid-26620-do-blog-id-14766.html centos6.2安装rpmbuild ...

  4. Pixhawk(PX4)之驱动详解篇(0)_前期准备(招贤令)

    Pixhawk(PX4)之驱动详解篇(0)_前期准备(招贤令) 原创 2017年03月01日 22:58:39 标签: 开发人员 / UAV / 软件 / 硬件 一.开篇 开源精神常在!!! 谁说软件 ...

  5. opengl计算帧率_或许是迄今为止第一篇讲解 fps 计算原理的文章吧

    前言 fps,是 frames per second 的简称,也就是我们常说的"帧率".在游戏领域中,fps 作为衡量游戏性能的基础指标,对于游戏开发和手机 vendor 厂商都是 ...

  6. matlab毕业设计工作日志通用,毕业论文日志100篇通用_毕业论文日志100篇_万能工作日志100篇...

    要写硕士毕业论文,至少读了100篇以上的文章,还是摸不着? 光看文章不行,有实验数据,有理论计算. 天下文章大写,自己思想的3%是创造性的. 1 .首先整理实验数据,分类,然后寻找各种相关关系. 2. ...

  7. 【web++_第四阶段_精美网页设计专题篇_1】

    [web++_第四阶段_精美网页设计专题篇_1] http://www.cnblogs.com/lhb25/archive/2013/02/01/2886505.html     <前沿视点&g ...

  8. Pixhawk之姿态解算篇(4)_补充篇

    一.开篇 大家期待已久的第四篇来了,但是本篇可能比较水啊~~~见谅~~~ 首先,上一周没有什么收获,虽然看了不少的论文,但是却没有什么质的飞越~~~~ 看的论文都是关于姿态解算的,用的算法大部分也都是 ...

  9. pve安装黑群晖直通硬盘_蜗牛星际装机教程篇三:手把手教你安装黑群晖NAS

    原文作者:范俩仟 蜗牛星际装机教程篇三:手把手教你安装黑群晖NAS 有很多评论说软路由没必要,我想说我就是把这东西当个玩意儿来消遣的,您喜欢看电影,我就喜欢玩电子产品.还有就是我没钱,所以想花最少的钱 ...

最新文章

  1. python中的decode(编码)和encode(解码)
  2. 新闻系统粗略说明文档
  3. Eclipse中debug时String太长怎样查看全部
  4. Nexus-vPC与FHRP
  5. java10支持mybatis_写了10年的代码,我最怕写Mybatis这些配置,现在有详解了
  6. python打开一个软件并进行操作_在Python中运行程序(R)以执行操作(执行脚本)的问题...
  7. 冰汽朋克侦查机器人_冰汽时代生病机制是什么 寒霜朋克所有机制漏洞一览
  8. 在28岁这一年,我也成为了一名创业狗
  9. 【知识笔记】WebForm
  10. CTFShow“萌心区“WP题解
  11. html制作答题卡表格,Excel怎么制作试卷答题卡,单选框和复选框制作就这么简单-excel操作练习题...
  12. echarts官网在线编辑的图表如何导出svg
  13. 【IT项目管理】第3章 整合项目的资源
  14. 关于找不到nsWindows.nsh的问题
  15. 让鼠标漫天飞舞:在内核中实现鼠标的中断处理
  16. unity NullReferenceException: Object reference UnityEditor.Graphs.Edge.WakeUp () (at D:/unity/
  17. web前端需要学习什么?需要掌握什么技术
  18. linux系统运行flash3d,在Linux上运行STM32,快来试试!
  19. 【超详细】全国大学生软件测试大赛:移动应用测试参赛指南
  20. python网络爬虫从入门到实践第2版pdf-Python网络爬虫从入门到实践 第2版

热门文章

  1. oracle jdk_两个Oracle JDK的故事
  2. 模拟模型学习 几何布朗运动_Java的几何布朗运动
  3. spring一站式开发_Spring开发人员知道的一件事
  4. java8默认垃圾收集器_Java 8中最快的垃圾收集器是什么?
  5. pl/postgresql_将PostgreSQL PL / Java安装为PostgreSQL扩展
  6. javaone_为JavaOne 2014做好准备!
  7. ejb的maven_针对新手的Java EE7和Maven项目-第3部分-定义ejb服务和jpa实体模块
  8. Java 12常规可用性
  9. 状态模式 设计模式_设计模式:状态
  10. AppD方法:Java 9支持