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/redhathttp://Linux.chinaitlab.com/updates/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文件。
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/ f tp://ftp.redhat.com/pub/redhathttp://Linux.chinaitlab.com/updates/9/en/os/i386/
vi /etc/cron.daily/mirrorupdates
#! /bin/sh
mirrordir ftp://ftp.redhat.com/pub/redhathttp://Linux.chinaitlab.com/updates/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和升级,及时升级或添加补丁。