Windows下實現自動打補丁的方法《網管員世界》曾經在以前的雜志上詳細介紹過,得到了大家的一致好評,不過,對於Linux方面自動打補丁的方法,卻沒有涉及,本文將幫助您打造Linux網絡中的自動補丁機。
筆者是一個Red Hat Linux系統管理員,管理著網絡中幾十台Redhat Linux 9主機。對於Linux這樣的開放式系統,和其他私有操作系統(Windows/Solais)相比, 發行商的短期支持策略使得網管經常需要上相應的網站看,是否有補丁,是否有了bug 修復,是否需要升級。千萬不要報僥幸心理,否則一個Shell腳本就可能拿下您的網站。套用一句名言:您的服務器永遠可能在第二天被黑客接管。
沒有經過很好整合和測試的補丁,服務器的維護工作將是一個非常繁重的任務。這是因為系統管理員必須跟蹤系統裡安裝的每一個軟件包,有時當補丁發布時還要對子系統進行改造。如果把每個Linux主機分別連接到RadHat的升級網站更新補丁,首先會造成企業網絡出口阻塞、浪費寬帶資源,另外也不安全。這裡筆者建立一個獨立的APT服務器,管理員可以自己先下載軟件包,然後通過網絡其他用戶可以方便的進行定期升級。 APT服務器上面可以安裝多個版本Linux 發行版本的RPM 套件,並且需要提供 WWW服務,因為客戶端是通過服務器的 WWW協議進行 軟件包和內核更新。網絡拓撲機構見圖1。
APT工作原理基本介紹
Debian GNU/Linux 是APT(Advanced Package Tool)的締造者。初衷是利用工具來解決軟件安裝時候的依賴性問題。其工作原理大致為:用戶安裝APT客戶端工具,查尋APT服務器端的資料庫(repositories)上的RPM軟件包信息,並分析軟件包之間的依賴性然後下載並進行安裝。APT 除了可以讓您很方便且快速地安裝 RPM 軟件外,也可以用它來更新系統。雖然APT是基於Debian的軟件包管理工具,但是已經被一個巴西公司Conectiva移植到基於RPM的系統上。因此對於基於RPM軟件包管理的平台,如Red Hat、 TurboLinux、SuSe、Mandrake等Linux發行版本,APT是一個非常優秀的軟件管理工具。
服務器端APT安裝配置
1. 運行APT之前需要確認服務器上Apache 已經可以提供WWW服務,並且 /var 分分區至少還有 5G 的空間。
2. 下載安裝APT套件,接著需要加入freshrpms.net的公共鑰匙GPG-KEY, 然後在/etc/apt下建立一個/gpg文件夾,將GPG-KEY保存在那裡,以便日後管理。
# rpm --import http://FTP.freshrpms.net/pub/freshrpms/RPM-GPG-KEY
3、修改配置文件/etc/apt/sources.list,這是APT服務器上最重要的配置文件,記載了軟件倉庫服務器的地址等信息,這裡只需要把需要升級的版本對應的路徑信息打開,其它版本的路徑信息則可以關閉。
# Red Hat Linux 9.0 rpm http://apt.freshrpms.net redhat/9/en/i386 os updates freshrpms rpm-src http://apt.freshrpms.net redhat/9/en/i386 os updates freshrpms
4.使用APT前的准備
(1)安裝好APT軟件包以後,管理員需要做的第一個工作就是從默認服務器下載軟件包數據庫運行:
#apt-get update #apt-get upgrade
(2)驗證本地系統的完整性和一致性,判斷本地系統的軟件包依賴性是否一致運行:
# apt-get check 如果希望定期升級系統,保證系統及時升級,彌補安全漏洞,只需要apt-get update、apt-get dist-upgrade或apt-get upgrade就可以了。
(3)安裝圖形前端
freshrpms.net站點提供了一個圖形界面的apt-rpm接口Synaptic,使用圖形界面的apt更加方便,可以直接利用apt安裝Synaptic:
[root@Linux root]# apt-get install synaptic
在幾行提示之後Synaptic就安裝好了,進入Xwindow,Synaptic會出現在“系統設置”菜單裡面。界面見圖2。
5.主要命令
APT主要有apt-cache、apt-cdrom、apt-config和apt-get四個命令,用戶使用最多的就是apt-get命令。APT常用命令功能見表1。
6.建立放置相關source 的目錄:
#mkdir -p /var/ftp/pub/redhathttp://Linux.chinaitlab.com/9/en/os/i386 #mkdir -p /var/ftp/pub/redhathttp://Linux.chinaitlab.com/updates/9/en/os
7.制作mirror Red Hat Linux 9 source。
使用CD-ROM光盤復制所需的 .os 的 到RPM 文件目錄:
mount /mnt/cdrom cp -rf /mnt/cdrom/* /var/ftp/pub/redhathttp://Linux.chinaitlab.com/9/en/os/i386 umount /mnt/cdrom
依照上面方法,復制第二片、第三片CD-ROM片內的rpm文件。
8.mirror Red Hat Linux 9 updates
cd /var/ftp/pub/redhathttp://Linux.chinaitlab.com/updates/9/en/os wget -r -nH --cut-dirs=6 ftp://ftp.redhat.com/pub/redhath ... dates/9/en/os/i386/
9. 建立 apt 的目錄和相關鏈接
mkdir -p /var/ftp/pub/redhat/apt/9/i386 ln -s /var/ftp/pub/redhathttp://Linux.chinaitlab.com/9/en/os/i386 /RedHat/RPMS /var/ftp/pub/redhat/apt/9/i386/RPMS.os ln -s /var/ftp/pub/redhathttp://Linux.chinaitlab.com/9/en/os/ i386/SRPMS /var/ftp/pub/redhat/apt/9/i386/SRPMS.os ln-s /var/ftp/pub/redhathttp://Linux.chinaitlab.com /updates/9/en/os/SRPMS /var/ftp/pub/redhat/apt/9/i386/SRPMS.updates
將 Red Hat Linux 9的RPMS、SRPMS目錄和updates的SRPMS目錄建立軟鏈到/var/ftp/pub/redhat/apt目錄下,命名RPMS.os、SRPMS.os、SRPMS.updates。
10. 建立 RPMS.updates 目錄和產生 rpm相關軟鏈接
mkdir /var/ftp/pub/redhat/apt/9/i386/RPMS.updates cd /var/ftp/pub/redhat/apt/9/i386/RPMS.updates find /var/ftp/pub/redhathttp://Linux.chinaitlab.com/ updates/9/en/os/ -type f ! -name "*.src.rpm" -name "*.rpm" -exec ln -sf {} ;
有些軟件安裝的時候若用的是 i386(或i686),升級的時候也必須要用相同結構的軟件包才可以,否則會出現錯誤,而最常出現錯誤的地方就是升級glibc的時候,所以上面的script就是為了避免發生這樣的錯誤而寫,它會將不同架構的updates rpm全部連結到同一個目錄,這樣apt才有辦法取得適合計算機架構的updates rpm來升級。
11. 使用 genbasedir 指令產生 base 目錄和文件索引清單。
genbasedir --flat --bloat --bz2only /var/ftp/pub/redhat/apt/9/i386 os updates以上指令列會在 /var/ftp/pub/redhat/apt/9/i386 目錄下建立 base子目錄,然後產生相關的文件索引清單 bz2 壓縮文件和 release文件。 QQread.com 推出各大專業服務器評測 Linux服務器的安全性能 SUN服務器 HP服務器 DELL服務器 IBM服務器 聯想服務器 浪潮服務器 曙光服務器 同方服務器 華碩服務器 寶德服務器 12. 建立鏈接關系
ln -s /var/ftp/pub/redhat /var/www/Html/redhat只有將ftp和html內的文件建立軟鏈接,才可以用http的方式使用apt服務器。
13. 定期 mirror updates rpm
到此為止Apt服務器已經安裝結束。互聯網上的update套件是隨時在更新的,所以我們的APT服務器上的RPMS.updates目錄也應該要隨時更新。這個時候,我們可以利用映射 (mirror) 的方式來進行更新:
rpm -ivh http://mirrordir.sourceforge.net/mirrordir-0.10.49-1.i386.rpm mirrordir v /var/ftp/pub/redhathttp://Linux.chinaitlab.com/ updates/9/en/os/ ftp://ftp.redhat.com/pub/redhat http://Linux.chinaitlab.com/, updates/9/en/os/i386/ vi /etc/cron.daily/mirrorupdates #! /bin/sh mirrordir ftp://ftp.redhat.com/pub/redhath ... dates/9/en/os/i386/ /var/ftp/pub/redhathttp://Linux.chinaitlab.com/updates/9/en/os/ rm -rf /var/ftp/pub/redhat/apt/9/i386/RPMS.updates/* cd /var/ftp/pub/redhat/apt/9/i386/RPMS.updates find /var/ftp/pub/redhathttp://Linux.chinaitlab.com/ updates/9/en/os/ -type f ! -name "*.src.rpm" -name "*.rpm" -exec ln -sf {} ; genbasedir --flat --bloat --bz2only /var/ftp/pub /redhat/apt/9/i386 os updates
賦予權限:
#chmod 755 /etc/cron.daily/mirrorupdates
啟動crond
#chkconfig --level 345 crond on
這樣APT服務器就會每天定時去 mirror updates rpm 和產生 rpm 索引清單了。APT服務器目錄結構見圖3。
客戶端Linux計算機設定
1. 首先也要安裝APT套件。如果本地系統一致性被嚴重破壞,則可以使用apt-get-f install命令在使用APT以前手工修復被破壞的依賴性。
2. 重要的是修改 sources.list,vi /etc/apt/sources.list添加一下內容:
rpm http://server_ip/redhat/apt/9 i386 os updates rpm-src http://server_ip/redhat/apt/9 i386 os updates
說明:其中server_ip 是APT服務器的IP地址如:192.168.1.9。
os代表Red Hat Linux 9的原始 rpm.
updates代表Red Hat所出的更新(updates)rpm.
3.客戶端定時更新:
首先建立定時器設置文件,文件名稱mytype(名稱自己設定):
#crontab -e
文件內容:
15 09 * * * apt-get update;apt-get -y dist-upgrade ;apt-get clean
用vi或其他編輯器存盤退出。
(3)使用crontab命令添加到任務列表中:
#crontab -u user1 mytype
這樣Linux客戶端在每天的9點15分會自動進行升級。注意每台Linux客戶端的升級最好相隔10分鐘。避免造成阻塞網絡帶寬。
上面所使用的APT服務器,是用 HTTP的方式在服務,若想要改成FTP 的方式也是可以的,不過必須要先將匿名(anonymous)FTP架設好。使用FTP的方式,可以限制同時登入的人數,作較嚴格的控管,不過FTP方式登錄過程(即使是匿名登入),速度比HTTP方式慢。
以上介紹的APT服務器就像 Microsoft 的補丁機一樣,它可以自動對網絡中的Linux主機打補丁,無論是服務器端還是客戶機都可以自動完成操作。而且 APT 不需注冊,完全免費,更可以安裝非 RedHat 提供的軟件。所以APT能夠在發現軟件包依賴性的同時,自動下載相應的軟件包並加以安裝,使得管理員能毫無故障地執行系統軟件的升級。APT使得零停機時間升級成為現實。
使用Connectiva進行改裝後的Debian的APT軟件包管理工具,它可以對RedHat的RPM格式進行管理。運行一個APT軟件庫(http://apt-rpm.tuxfamily.org/)並不是一件非常困難的事情,它可以為持續的安全升級提供一個非常好的機制。可以定時更新系統軟件,彌補網絡和系統的安全漏洞。所以Linux網管員要經常的關注相關網站的bug fix和升級,及時升級或添加補丁。