科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航



ZDNet>网络频道>ZD评测>Linux网络自动补丁机

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

对于Linux这样的开放式系统,和其他私有操作系统(Windows/Solais)相比, 发行商的短期支持策略使得网管经常需要上相应的网站看是否有补丁是否有了bug 修复,是否需要升级。

来源: 2007年10月18日

关键字:RPM Linux redhat 补丁 自动 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套件

  # wegt http://ftp.freshrpms.net/pub/freshrpms/redhat/9/apt/apt-0.5.5cnc6-fr1.i386.rpm

  # wegt http://ftp.freshrpms.net/pub/freshrpms/redhat/9/apt/apt-devel-0.5.5cnc6-fr1.i386.rpm

  #rpm -ivh apt-0.5.5cnc6-fr1.i386.rpm

  #rpm -ivh apt-devel-0.5.5cnc6-fr1.i386.rpm

  接着需要加入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。

  命令

  描述

  apt-get update

  更新本地apt-get的本地数据库,使其与服务器的pkglist文件同步。在升级以前一般都要执行本命令实现与服务器的一致。

  apt-get check

  验证本地系统的完整性。

  apt-get dist-upgrade

  安装所有的基础软件包,并升级一切软件包,并在需要时安装新软件包。

  apt-get remove package_name

  删除该软件包,同时会删除依赖于它的软件包。

  apt-get install package_name

  安装某个软件包及其相关软件包。

  apt-get source package_name

  下载软件包的source rpm。

  apt-get clean

  删除保存在缓存目录下(/var/cache/apt/archives)的被下载的软件包。

  apt-get upgrade package_name

  升级指定的软件包,并升级其依赖的软件包。

  apt-cdrom add

  自动mount安装光盘并建立列表。

  apt-cache depends package_name

  显示软件包的依赖性关系。

  apt-cache package_name

  在网络上搜索指定的软件包

  apt-config dump

  显示目前的配置信息。

  6.建立放置相关source 的目录:

  #mkdir -p /var/ftp/pub/redhat/Linux/9/en/os/i386

  #mkdir -p /var/ftp/pub/redhat/Linux/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/redhat/Linux/9/en/os/i386

  umount /mnt/cdrom

  依照上面方法,复制第二片、第三片CD-ROM片内的 rpm文件。

  8.mirror Red Hat Linux 9 updates

  cd /var/ftp/pub/redhat/Linux/updates/9/en/os

  wget -r -nH --cut-dirs=6 ftp://ftp.redhat.com/pub/redhat/Linux/updates/9/en/os/i386/

  9. 建立 apt 的目录和相关链接

  mkdir -p /var/ftp/pub/redhat/apt/9/i386

  ln -s /var/ftp/pub/redhat/Linux/9/en/os/i386/RedHat/RPMS /var/ftp/pub/redhat/apt/9/i386/RPMS.os

  ln -s /var/ftp/pub/redhat/Linux/9/en/os/i386/SRPMS /var/ftp/pub/redhat/apt/9/i386/SRPMS.os

  ln-s /var/ftp/pub/redhat/Linux/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/redhat/Linux/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/redhat/Linux/updates/9/en/os/ ftp://ftp.redhat.com/pub/redhat/Linux/updates/9/en/os/i386/

  vi /etc/cron.daily/mirrorupdates

  #! /bin/sh

  mirrordir ftp://ftp.redhat.com/pub/redhat/Linux/updates/9/en/os/i386/

  /var/ftp/pub/redhat/Linux/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/redhat/Linux/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

  启动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软件包管理工具,它可以对Red Hat的RPM格式进行管理。运行一个apt软件库(http://apt-rpm.tuxfamily.org/)并不是一件非常困难的事情,它可以为持续的安全升级提供一个非常好的机制。可以定时更新系统软件,弥补网络和系统的安全漏洞。Linux服务器运行的软件主要包括:Samba,Ftp,Telnet,Ssh,Mysql,Php,Apache,Mozilla等,这些软件,大都是开源软件,而且都在不停升级,稳定版和测试版交替出现。在www.samba.org和 www.apache.org 上,最新的ChangeLog中都写着:bug fix(漏洞修正), security bug fix(安全漏洞修正)的字样。所以Linux网管员要经常的关注相关网站的bug fix和升级,及时升级或添加补丁。

推广二维码
邮件订阅

如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

重磅专题