当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > 用RPM校验文件

Unix/Linux
查看linux 下已经安装的软件包信息
linux 系统中软件raid 配置方法
linux 下MySQL服务器的启动与停止
linux 系统下FTP服务器配置方法
Linux系统下如何挂载U盘,硬盘,光驱
linux 系统下DHCP服务器 配置方法
Linux系统下软件的安装与卸载
在Fedora 9中启用ext4文件系统的方法
linux下挂载(mount)光盘镜像文件、移动硬盘、U盘、Windows网络共享和NFS网络共享
Linux查看文件夹大小的命令
LINUX系统grub常见错误分析
llinux fdisk分区工具 使用方法
linux 系统telnet乱码
rhythmbox 乱码的解决方法
linux单网卡绑定多ip
tar.gz 和tar.bz2 详细解释
linux学习笔记
linux系统rpm安装包详解
linux 服务器常用维护命令
出现The file /boot/grub/stage1 not read cor 解决办法

Unix/Linux 中的 用RPM校验文件


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 182 ::
收藏到网摘: n/a

 
有些事情对我们系统管理员来说至少发生过一次,就是你感觉到你的系统好像不对劲
,开始怀疑有人已经突破了你的防御。确定此事是否发生的途径之一就是检查系统文
件有没有变化,你需要安装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]# 

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

如何开始?
首先,你必须有root权限来运行RPM。当以普通用户身份来运行RPM校验时,它的输出信息是不正确的,因为普通用户对某些文件可能都没有read权限。这意味着只有root才能检查整个系统文件的完整性。

RPM二进制文件在/bin目录下,它的数据库文件在/var/lib/rpm下。

最安全的方法是在服务器连到Internet之前,把这些数据文件和RPM二进制文件保存到
软盘或CD上,这能够保证你的工具自身是安全的