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腳本信息對於瞭解系統軟件的安裝、卸載時所做的操作,對出現問題時的解決,將會有更清晰的思路。

發佈了25 篇原創文章 · 獲贊 10 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章