如何将 Apache 从 2.2.3 升级到 2.2.21

如何将 Apache 从 2.2.3 升级到 2.2.21

我使用 YUM 安装了 apache。安装的 apache 版本是 2.2.3

我们的安全人员希望我们使用 2.2.21 apache

当我尝试 yum update 'httpd' 时,什么也没发生 - 没有标记为更新的软件包

我查看了 Apache 主页(http://www.apache.org/dist/httpd/patches/) 关于补丁。根据他们的书面说明,我尝试安装 2.2.4 补丁 (http://www.apache.org/dist/httpd/patches/apply_to_2.2.4/

patch -s < /usr/local/src/hack-msvc8-httpd-2.2.4.patch

我收到了这样的消息:

The text leading up to this was:

|###
|### A trivial hack to copy the .manifest files along with the binaries
|### when building from the command line on Visual Studio 2005
|###
|### Courtesy of Gustavo Lopes
|### Posted to [email protected],
|### Message-ID: <006901c731ae$97bec180$0201a8c0@cataphract>
|###
|--- Makefile.win.orig 2006-12-07 11:09:37.000000000 -0600
|+++ Makefile.win 2007-01-08 23:55:56.000000000 -0600
File to patch:

我做错了什么?为什么我无法将 Apache 更新到 2.2.21 版本?

答案1

为了运行 2.2.x,您要么需要获取另一个 RPM - 要么从源代码构建它。

但是,由于您运行的是 2.2.3,我怀疑您运行的是 RedHat Enterprise Linux 5 或其衍生产品之一(CentOS 5 等)。您会发现,相当多的渗透测试公司或安全官员没有考虑到,虽然您运行的是 2.2.3,但实际上您已经从 Apache 的更高版本中获得了安全修复。

这被称为“反向移植”。RedHat 有一个好的描述在这里。我建议向安全人员索取他们感兴趣的特定 CVE,确保这些 CVE 得到修补,然后使用redhat 工具来识别这些问题是否已在您正在运行的 apache 版本中得到修复。您可以通过执行来获取版本号rpm -qa httpd

答案2

我假设您有 RHEL5 (或同等版本)。

您可以告诉安全人员,Red Hat 将 2.2.21 的相关安全更新应用于其 2.2.3 软件包,但不会更改基本版本号。它(如果您仅按软件包版本号来看)看起来就像您正在运行较旧的 Apache,但实际上您的安全性与 2.2.21 一样。这就是长期企业发行版的意义所在:您既能获得一致性,又能获得修复。

您可以通过运行以下命令来验证这一点:

rpm -q --changelog httpd

例如,您会在变更日志中看到以下最新修复:

* Thu Oct 06 2011 Joe Orton <[email protected]> - 2.2.3-53.3
- add security fix for CVE-2011-3368 (#743903)
- fix regressions in byterange handling (#736593)

如果您确实需要安装 2.2.21,您可以自行编译。但这本身也会带来不良的安全隐患:如果有人在下周发现并修复了 Apache 的新问题,Red Hat 会反向移植该修复程序并通过 yum 提供,但您自己构建的 Apache 将不会包含该修复程序,您必须重新完成整个过程来构建和安装新的 Apache。

答案3

要直接从上游在 Red Hat(或 CentOS)上构建自定义 Apache,您应该执行以下操作:

  1. 安装以下工具:“yum install rpm-devel rpmdevtools rpm-build”
  2. 以普通用户身份运行 rpmdev-setuptree。它将创建一个名为“rpmbuild”的目录。
  3. cd 到 ~/rpmbuild/SOURCE 并从 httpd.apache.org 下载 Apache 源 tarball 到该目录。
  4. 从该 tarball 中提取文件“httpd.spec”并将其复制到 ~/rpmbuild/SPECS
  5. 运行“rpmbuild -bb httpd.spec”,它将开始编译和构建 rpm。如果缺少任何依赖项,它将暂停并通知您。此时,通过 yum 安装这些包并重新启动构建过程(您可以通过查看 .spec 文件中的 BuildPrereq 行来避免这种情况)。否则,假设没有进一步的问题,您将能够编译自己的 Apache 版本。*

或者省去自己的工作,让 Red Hat 处理更新。我不建议你这样做,除非对上游版本有特定需求,而供应商版本无法完全满足这一需求

*注意:在 Red Hat 6 下,distcache 不再受支持,因此您需要从 .spec 文件中删除“--enable-distcache”。

答案4

您尝试应用的补丁用于使用 Microsoft Visual Studio 进行构建。线索位于补丁的标题中:

### A trivial hack to copy the .manifest files along with the binaries
### when building from the command line on Visual Studio 2005

这实际上并没有将 Apache 源代码树修补到 2.2.4。但您实际上是否尝试将其应用于 SRPM?

作为cjc 提及Red Hat 会将安全修复程序反向移植到其发布的任何版本,但版本号不一定会增加。同样,您始终可以自行编译 Apache。

相关内容