用RPM校验文件

有些事情对我们系统管理员来说至少发生过一次,就是你感觉到你的系统好像不对劲
,开始怀疑有人已经突破了你的防御 。确定此事是否发生的途径之一就是检查系统文
件有没有变化,你需要安装TripWire或者其他审计工具来帮忙 。

幸运的是,Red;Hat的程序员们开发了一个工具,叫作Red;Hat;Package;Manager,简
称为RPM 。在Red;Hat的Linux系统中是默认存在的 。

RPM能为我做些什么?
RPM是一个强大的工具,用来安装、升级和校验Red;Hat系统上的软件包 。它的校验功能可以用来确认文件是否被修改或覆盖,这正是本文所要讨论的 。除了文件的大小和时间戳,RPM还能检查文件的信息文摘或MD5签名 。

在RFC;1321中有MD5的详细描述 。简单的说,MD5根据文件的内容用算法产生一个唯一的128位签名,用任何方法改变文件都会导致签名改变 。尽管人们一直在讨论修改文件后能保持签名不变的理论可能性,但截止到目前还没有人能够做到 。所以在文件使用前后各作一次MD5检查,能够99.9999%的保证文件没有改变 。

如何使用RPM来检查文件?
有一些RPM的参数你需要注意 。第一个是“-V”,它检查与某一RPM包相关所有文件的
完整性 。语法为:

rpm;-V;package_name_to_verify

比如系统上运行了sendmail,通过以下命令检查所有相关文件的完整性:

rpm;-V;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]#;

只有校验失败的文件才被列出,没有列出的文件应该是完好无损的 。左边给出了为什
么校验失败的原因,具体解释如下:

S;=;大小改变
M;=;权限改变
5;=;MD5改变;
L;=;连接改变
D;=;设备改变
U;=;用户改变
G;=;组改变
T;=;日期和时间改变
missing;=;文件丢失

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

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

当观察RPM输出的时候,在检查日期时间和文件大小的同时,要特别注意MD5是否变化,入侵者经常修改或覆盖某些文件来隐藏他们的踪迹 。

挨个检查软件包很费时间,用“-a”选项可以一次性检查所有RPM包:

rpm;-Va;>;/root/rpm_chk.txt;&

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

最后一个技巧,当你想要检查某个文件而不知道它属于哪个RPM包,可以用“-qf”选
项查看哪个软件包安装了此文件:

[root@fubar;/root]#;rpm;-qf;/usr/sbin/sendmail;
sendmail-8.8.7-20;
[root@fubar;/root]#;

这表明此sendmail文件是sendmail-8.8.7-20;RPM包的一部分 。如果一个文件没有关联
的RPM包,输出大概是这样的:

[root@fubar;/root]#;rpm;-qf;/sbin/.vile_stuff;
file;/sbin/.vile_stuff;is;not;owned;by;any;package;
[root@fubar;/root]#;

小心你系统上运行的不能被校验的程序!

推荐阅读