即我可以在下一个最近的发行版中找到足够接近的软件包吗?还是说比较复杂,从源码编译比较好?或者我可以从 debian 获取它吗?
(这个问题至少是关于 Ubuntu 11.10 和 12.10 的;我敢打赌其他人也会遇到这个问题,所以如果建议根据具体哪个生命周期结束的 Ubuntu 而有所不同,那么说出如何做可能会有所帮助!)
PS“升级”不会被接受为答案;-)我知道,但有时退役/升级/更换服务器需要时间,我想先修补 bash。
答案1
既然您确实想继续使用官方不支持发布后,您唯一的选择就是自己支持它。
我建议获取 Ubuntu 上特定版本的源代码(无论是 11.0、12.0 还是 13.10),然后应用与官方软件包相同的补丁;作为参考,请参阅:
- http://www.ubuntu.com/usn/usn-2362-1
- http://www.ubuntu.com/usn/usn-2363-1
- http://www.ubuntu.com/usn/usn-2363-2
请注意,虽然 Bash 漏洞是媒体报道最多的漏洞,但几乎每天都有大量其他漏洞,您至少应该认真考虑订阅ubuntu-安全公告以便您始终了解它们。这对于您的情况尤其重要,因为您使用的是不受支持的版本。
答案2
Quantal(Ubuntu 12.10)的简短回答:下载并安装bash 包来自精确的存储库。
演练
对于量子(Ubuntu 12.10),我搜索 bash 包来自附近的版本。我下载了rarring和precise的软件包。
在开始之前,我对现有的 bash 软件包进行了备份,这样如果全新安装失败,我就有希望恢复我的系统。 (需要 dpkg-repack 软件包。)
$ dpkg-repack bash
尽管我可能应该将可执行文件复制/bin/bash
到/root/bash.vulnerable
,因为这样在紧急情况下更容易恢复。
拉林
首先我尝试了来自 raring 的包裹:
$ dpkg -i bash_4.2-5ubuntu3_i386.deb
但测试结果为仍然脆弱!
精确的
然后我尝试了精准包装:
$ dpkg -i bash_4.2-2ubuntu2.6_i386.deb
测试为安全的, 使用bashcheck 脚本。
Testing /bin/bash ...
GNU bash, version 4.2.25(1)-release (i686-pc-linux-gnu)
Variable function parser pre/suffixed [%%, upstream], bugs not exploitable
Not vulnerable to CVE-2014-6271 (original shellshock)
Not vulnerable to CVE-2014-7169 (taviso bug)
Not vulnerable to CVE-2014-7186 (redir_stack bug)
Test for CVE-2014-7187 not reliable without address sanitizer
Not vulnerable to CVE-2014-6277 (lcamtuf bug #1)
Not vulnerable to CVE-2014-6278 (lcamtuf bug #2)
但我真的希望我安装了 LTS 版本。等有时间我还是打算升级一下……
答案3
从源代码构建 bash 非常简单,您需要一个可行的 C 开发环境(gcc、binutils 等)以及termcap
库和标头(默认,但您可以使用curses
它)。
你应该至少在完成此操作之前,请先备份当前的bash
二进制文件,最好是完整的备份或救援磁盘。根据您的操作系统,bash
它可能是启动脚本的关键部分!新版本有时包含不向后兼容的行为更改。
相同的步骤顺序应该适用于 bash-2.05b 到 bash-4.3 的所有版本,只需根据需要替换“4.3”,这样您就可以在需要时坚持使用相同的版本。除非您运行的是相当古老的 bash-2.05b,它很容易受到攻击,但没有可用的官方补丁,AFAICT修复程序也已向后移植到 2.05b。
您应该仔细检查官方网站当前的补丁级别,以防万一您遇到了陈旧的镜像。
mkdir -p /usr/local/src/dist && cd /usr/local/src/dist
wget http://ftpmirror.gnu.org/bash/bash-4.3.tar.gz.sig
wget http://ftpmirror.gnu.org/bash/bash-4.3.tar.gz
wget http://tiswww.case.edu/php/chet/gpgkey.asc
gpg --import gpgkey.asc
gpg --verify bash-4.3.tar.gz.sig
cd ..
tar xzvf dist/bash-4.3.tar.gz
cd bash-4.3
mkdir patches && cd patches
wget -r --no-parent --accept "bash43-*" -nH -nd \
ftp.heanet.ie/mirrors/gnu/bash/bash-4.3-patches/ # Use a local mirror
echo *sig | xargs -n 1 gpg --verify --quiet # see note 2
cd ..
echo patches/bash43-0?? | xargs -n 1 patch -p0 -i # see note 3 below
./configure --prefix=/usr --bindir=/bin \
--docdir=/usr/share/doc/bash-4.3 \
--without-bash-malloc \
--with-installed-readline
make
make test && make install # see note 6
笔记:
- 使用本地镜像来获取补丁,ftpmirror.gnu.org 返回一个重定向,但这不适用于
-r
下载整个目录的选项 - (对于锡箔帽)
gpg
没有设置有用的错误代码,并且如果验证失败也不会大声抱怨,在(丰富的)输出中查找字符串“BAD” - 目前有
252730 个针对 bash-4.3 的补丁,其中 25-30 个解决了 CVE-2014-6271 及后续相关问题。可能还会有更多补丁来解决这个问题!您可能会收到patch
诸如“忽略潜在危险文件名../bash-4.3/patchlevel.h”之类的警告,这些应该是无害的,请检查是否包含 具有预期补丁级别的patchlevel.h
行。#define PATCHLEVEL ...
- 选项
configure
更改了默认值/usr/local/
,这意味着 make install 应该覆盖您当前的bash
--without-bash-malloc
选择 libc malloc,而不是更快(稍微浪费)的内部实现。这可能如果您使用可加载的 bash 模块,它会影响您,因为它可能会导致不兼容,但没有多少人使用此功能。这个包可能叫做bash 内置函数。make test
需要一些时间。您必须是 root 才能完成make install
(通常认为以 root 身份编译软件是不好的做法)- Ubuntu 是 Debian 的衍生版本,可能使用与 Debian 相同的额外补丁,请参阅这里例如。这些补丁可能包含您使用的功能。如果将补丁应用到 bash 源代码树,请参阅该
debian/README
文件以获取更多详细信息。 - 又一个陷阱,你可能还有一个 static-bash 二进制文件,你也应该重建它。为此,请从“
./configure ...
”步骤重新启动,添加--enable-static-link
.
也可以看看,bash
Linux From Scratch 中的构建。这开放源码软件列表是查看补丁和当前状态的好地方。
答案4
$ git clone https://github.com/sillymoose/bashfix.git
$ cd bashfix
$ chmod +x bashfix.pl
$ ./bashfix.pl
Bash version 4.2.13 detected
Created working directory /tmp/PIRKRioxmM
Downloading Bash
Downloading Patches
Bash patched to level 52
Bash fully patched!
Configuring Bash ...
Building and testing Bash ...
Success. New Bash binary built!
Making backup copy of /usr/bin/bash at /usr/bin/bash.bak
Making backup copy of /bin/bash at /bin/bash.bak
Bash version 4.2.52 is now installed