我有一个远程管理的系统(相隔 2 个时区),它运行的是 Ubuntu 9.04,Jaunty。出于各种原因,主要是我对从这么远的地方尝试进行发行版升级非常谨慎,我无法将其升级到较新的版本。显然它不再受支持,并且没有任何官方补丁。有没有关于如何修补代码并自行重新编译 bash 以消除 shellshock 漏洞的说明?
答案1
偷自询问Ubuntu,来自 Hacker News 上的一个窃取者。在我两台旧服务器上都用过
mkdir src
cd src
wget http://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
#download all patches
for i in $(seq -f "%03g" 1 28); do wget http://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$i; done
tar zxvf bash-4.3.tar.gz
cd bash-4.3
#apply all patches
for i in $(seq -f "%03g" 1 28);do patch -p0 < ../bash43-$i; done
#build and install
./configure --prefix=/ && make && make install
cd ..
cd ..
rm -r src
更新:我刚刚注意到如果你不添加--prefix=/
配置命令,你最终会得到/usr/local/bin/bash
最新的并且/bin/bash
仍然容易受到攻击。
答案2
还有一个解决方案,就是将 sources.list 更新为最新版本,然后使用 apt-get 仅升级 bash。这非常快捷,而且我写了一篇文章了解它。你基本上需要做的是:
升级到最新的 Ubuntu“可信”apt-get 存储库(如果您使用 old-repositories.ubuntu.com URL,可能还需要更改它们,请查看链接文章):
sudo sed -i 's/YOUR_OS_CODENAME/trusty/g' /etc/apt/sources.list
升级 bash/应用修复:
sudo apt-get update
sudo apt-get install --only-upgrade bash
并可能改回 apt-get 存储库。
答案3
命令应该是
sudo apt-get update && sudo apt-get install --only-upgrade bash
答案4
一个简单的选择就是不使用 bash。确保dash
已安装,并且/bin/sh
是指向 的符号链接dash
,而不是bash
。(这是某些 Debian 版本的默认设置,但我不确定 Ubuntu 是否如此。)如果您有使用强制命令进行 ssh 访问的用户帐户,您也需要更改他们的登录 shell。您可能还需要使用 bash 明确检查任何脚本;grepping for#!/bin/bash
应该可以找到它们。