RPM深入-系统安全方面的应用

由于前几天帮助客户恢复被入侵的服务器用到了rpm命令来检测软件包,主要是向同事学习。事后找来rpm在系统安全检测方面相关的内容学习,记录如下。
[http://m.blog.csdn.net/blog/lcgweb/26278515][http://www.chenqing.org/2011/07/rpm-deep.html]

RPM深入-加固系统安全

RPM是Red Hat Packages Management即红帽包管理的缩写,它是一个开放的,有RedHat开发和维护的,运行在RedHat及其他linux系统上的软件包管理器,主要工具是rpm命令,实现软件包的安装、卸载、升级、更新、查询和校验的功能,更深入的功能便是安全维护的功能。
RPM将所有的软件安装信息记录到RPM数据库中,存放于/var/lib/rpm目录下,可以利用RPM数据库对系统中已安装的软件包进行查询、校验等操作。安装、卸载、更新、升级可以通过yum进行操作,简捷方便,对于校验查询提取文件等操作,使用RPM命令。

检查系统公匙

在rpm软件包安装前,rpm命令通过检查软件包签名可以保证软件包没有被篡改和破坏。yum或apt等软件库都带有gpg公有密匙(以下简称公匙)签名,他们保存在/etc/pki/rpm-gpg目录下,使用如下命令来查看系统公匙

$rpm -qa gpg-pubkey*
gpg-pubkey-fd431d51-4ae0493b
gpg-pubkey-2fa658e0-45700c69

查看详细内容:

$ rpm -qi gpg-pubkey-fd431d51-4ae0493b | less

从输出可以看出,密匙名称分为版本号和发行号两部分

导入和删除系统公匙

导入密匙

$ rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta 
##公匙名称根据系统选择

删除密匙

$ rpm -e gpg-pubkey-fd431d51-4ae0493b

检测软件包完整性

软件安装前检查签名的正确性

$ rpm --checksig openssh-server-6.6.1p1-12.el7_1.x86_64.rpm
openssh-server-6.6.1p1-12.el7_1.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#f4a80eb5) 

如果缺少密匙DSA、RSA和GPG及rpm包遭到破坏,就会以大写形式出现。可以使用rpm命令鉴别是否有人进行过修改:

$ rpm -V openssh-server
.........  c /etc/pam.d/sshd
SM5....T.  c /etc/ssh/sshd_config
..?......  c /etc/sysconfig/sshd

输出的右侧显示列出与原始状态不匹配的文件,左侧列出目前出现的不一致状态

S:文件大小改变
M:文件权限或文件属性改变
5:文件MD5值改变(内容改变)
?:由于某种原因未能计算出MD5值
D:设备编号改变
L:链接属性改变
U:文件所有者改变
G:文件所属组改变
T:文件时间戳改变

如果校验的文件改变在预料之中,那就没问题,如果不在就需要进一步确定了。
检测系统所有软件包

$ rpm -Va

我们更加关注bin和sbin目录下的内容是否改变或者缺失的文件

$ rpm -Va | grep 'bin\/'
$ rpm -Va | grep missing

系统故障排除

若Linux是某些软件运行部正常或者遭到入侵,那么就需要查看最近安装或者更新升级了哪些软件包,使用–last选项按照时间先后顺序列出软件包(从最近变化的软件包开始)

$ rpm -qa --last

恢复missing的文件

有两种方法恢复:
1)重装RPM包

rpm -ivh --replacepkgs name.rpm

2)把rpm包中对应的文件提取出来,拷贝到对应位置

$ rpm2cpio /mnt/cdrom/Fedora/RPMS/openssh-server-4.3p2-10.i386.rpm | cpio -idv ./etc/ssh/sshd _config
$ cp etc/ssh/sshd_config /etc/ssh/

通过使用rpm2cpio命令可以将RPM软件包转换成cpio格式,cpio是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件。其中选项“i”表示提取文件、“v”表示指示执行进程、“d”表示根据包中文件原来的路径建立目录,如果需要保持原文件的更新时间还可以增加选项“m”。
注意此命令执行时不能将文件直接恢复至/etc/ssh目录,只能提取到当前目录下,且恢复的文件名称所在路径要写完整的绝对路径(./etc/ssh/sshd _config)。提取文件成功后,将其复制到/etc/ssh目录下即可。

恢复RPM数据库

RPM数据库也会出现故障,这是软件的安装、卸载等操作会长时间无响应,请求无法执行,此时需要重建数据库

$ rm /var/lib/rpm/__db.00* -f
$ rpm --rebuilddb

黑客侵入系统后,有时为混淆管理员视线,避免管理员通过RPM校验功能检测出问题,会更改RPM数据库(理论上来讲,系统被入侵后,一切都将不再可信),此时我们可以按照以下步骤对文件进行检测:
1)对于要检查的文件或命令,找出它属于哪个软件包:

$ rpm -qf /etc/sysconfig/sshd
openssh-server-6.6.1p1-12.el7_1.x86_64

2)使用–dump选项查看每个文件的信息,使用grep命令提取对应文件信息:

$ rpm -ql --dump openssh-server | grep '/etc/sysconfig/sshd'
/etc/sysconfig/sshd 506 1426861233 1e3326ae54d5ed44a20637ebf32c1fc5fb7aa48916f2e9647f6f81c5f0987167 0100640 root root 1 0 0 X

3)接下来检查实际的文件,看内容是否被更改过:

$ ls -l /etc/sysconfig/sshd
# md5sum /etc/sysconfig/sshd

检查软件包的脚本

很多RPM软件包都包含脚本,包括在安装、卸载、升级软件包过程中要运行的脚本,以及安装期间满足某些条件时将触发的触发器脚本。这些脚本对于了解Linux系统管理、了解软件的应用很有帮助。
使用带“–scripts”查询选项的rpm命令来查看安装、卸载软件包前后要运行的脚本。举例如下:

# rpm -q –scripts openssh-server

查看RPM脚本信息对于了解系统软件的安装、卸载时所做的操作,对出现问题时的解决,将会有更清晰的思路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值