文章目录
- 一、校验介绍
- 二、参考示例
- (一)校验某个已安装的软件包的所有文件
- (一)校验系统中所有已安装的软件包
- (二)校验含有指定文件的软件包
- (三)校验指定类别的软件包
- (四)校验指定包裹文件
- (五)不执行校验脚本程序
- (六)不检查依赖
- (七)忽略丢失文件的错误
- (八)忽略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 发现:
- 文件 /etc/profile 的大小(S),内容(5)及最后修改时间(T)已改变,而且明示这是个配置文件(c);
- 目录 /usr/man/man1 的权限(M),属组(G)已改变;
- 文件 /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
选项时,相应位置输出点(.),表示文件内容正常了。