我的生产环境中的 bash shell 容易受到“bashbug”漏洞的影响。https://securityblog.redhat.com/2014/09/24/bash-specially-crafted-environment-variables-code-injection-attack/
安装的版本是
`$ bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)`
我无法使用YUM
安装最新的软件包,因为我们的服务器没有连接到互联网,所以我尝试bash
使用源代码安装。我bash 4.3
从源代码下载并安装了它。由于该版本仍然容易受到 bash bug 的影响,因此我需要为此版本应用最新补丁。
为此,我bash
从以下站点下载了最新的补丁。
http://ftp.gnu.org/gnu/bash/bash-4.3-patches/
我正在bash43-030
从上面的链接应用补丁。
http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-030
我面临的问题是应用补丁失败并出现以下错误
[bash-4.3]$ patch -p0 < bash-patch patching file builtins/evalstring.c Hunk #1 FAILED at 309. Hunk #2 FAILED at 379. 2 out of 2 hunks FAILED -- saving rejects to file builtins/evalstring.c.rej patching file parse.y Hunk #1 succeeded at 2574 (offset 35 lines). Hunk #2 FAILED at 4038. 1 out of 2 hunks FAILED -- saving rejects to file parse.y.rej patching file shell.h Hunk #1 succeeded at 181 with fuzz 2. patching file y.tab.c Hunk #1 FAILED at 169. Hunk #2 FAILED at 498. Hunk #3 FAILED at 2099. Hunk #4 FAILED at 2113. ... ... Hunk #98 FAILED at 6350. 97 out of 98 hunks FAILED -- saving rejects to file y.tab.c.rej patching file patchlevel.h Hunk #1 FAILED at 26. 1 out of 1 hunk FAILED -- saving rejects to file patchlevel.h.rej
请建议如何解决该问题。可能是应用补丁的方法是错误的。
答案1
Bash 补丁是累计,4.3 的源代码实际上是 4.3.0,补丁是单独的,所有补丁都应该按顺序应用,每个补丁都会提升一个补丁级别。官方网站很少提供完整的源代码版本,最后一个版本是 3.2.48。
您所观察到的是,所需的补丁(“-030”后缀表示 .30 补丁级别)需要较早的补丁。 (这总是会被 bash 补丁检测到,因为每个补丁的patchlevel.h
任何遗漏都会导致补丁错误)。您可以在这里找到我从源代码构建的说明:https://unix.stackexchange.com/a/157714/31352
从源代码构建很简单,但不能轻易进行。一旦你给 bash 打了补丁,你就得靠自己来获得供应商支持,并且可能会使进一步的管理任务(例如补丁和升级)变得复杂。
你可能过得更好下载 Red Hat RPM,将其传输到服务器(或者如果您确实想从源代码构建它,则改为 SRPM)。 bash 具有最小的依赖性(特别是 termcap),假设它们都没有被修改,您应该只需要一个包。
无论如何,您可能应该坚持使用 bash-4.1,有许多更改可能会影响脚本,请参阅COMPAT
有关详细信息,请参阅源发行版中的文件。从 2.05b 到 4.3 的所有发布版本都有针对“shellshock”(CVE-2014-6271) 和相关问题的补丁。