AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 631235
Accepted
smonff
smonff
Asked: 2014-09-26 05:39:45 +0800 CST2014-09-26 05:39:45 +0800 CST 2014-09-26 05:39:45 +0800 CST

在不受支持的 Ubuntu 服务器上修补 Shellshock Bash 错误的推荐方法是什么?

  • 772

我维护了一个不受支持的 Ubuntu 12.10 (Quantal Quetzal) 服务器(请不要问我为什么),我们需要修补Shellshock Bash 安全漏洞。由于升级不再可用,推荐的修补 Bash 的方法是什么?

我找到了这个答案(它建议从 Debian 检索软件包并且不安装二进制软件包,而是从源安装软件包)。这对我来说似乎没问题,但还有什么其他建议?

ubuntu
  • 6 6 个回答
  • 12438 Views

6 个回答

  • Voted
  1. Best Answer
    lumpygator
    2014-09-27T13:25:09+08:002014-09-27T13:25:09+08:00

    这篇文章很有帮助,并且适用于我仍然需要支持的少数 Ubuntu 12.10 (Quantal) 实例。

    修复 Ubuntu 新旧版本上的 Bash 漏洞利用

    总而言之,步骤是:

    1. 获取当前版本的代号(例如 quantal)并将其存储在变量中:

      lsb_release -a
      DISTRIB_CODENAME=quantal
      
    2. 将源更改为可信赖的/etc/apt/sources.list. 例如,

      sudo sed -i "s/$DISTRIB_CODENAME/trusty/g" /etc/apt/sources.list
      
    3. 更新和升级 bash

      sudo apt-get update
      
      sudo apt-get install --only-upgrade bash
      
    4. 验证最新版本未通过以下测试(即您不应该看到“busted”)

      env X="() { :;} ; echo busted" `which bash` -c "echo completed"
      
    5. 恢复 /etc/apt/sources.list 以使用当前代号。例如,

      sudo sed -i "s/trusty/$DISTRIB_CODENAME/g" /etc/apt/sources.list
      
    • 13
  2. Craig
    2014-09-26T11:19:53+08:002014-09-26T11:19:53+08:00

    https://shellshocker.net/#fix有一些用于手动更新 bash 的好工具。

    curl https://shellshocker.net/fixbash | sh
    

    您还可以测试您的系统是否易受攻击:

    curl https://shellshocker.net/shellshock_test.sh | bash
    

    运行它需要您自担风险。如果上述链接过期或您不想信任它,这是它运行的脚本:

    cd ~/
    mkdir bash-shellshocker
    cd bash-shellshocker
    echo "Downloading Bash..."
    wget https://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
    echo "Downloading Bash patches..."
    i=0
    rtn=0
    while [ $rtn -eq 0 ]; do
      i=`expr $i + 1`
      wget https://ftp.gnu.org/gnu/bash/bash-4.3-patches/bash43-$(printf '%03g' $i)
      rtn=$?
    done
    i=`expr $i - 1`
    echo "Extracting bash from tar.gz..."
    tar zxvf bash-4.3.tar.gz 
    cd bash-4.3
    echo "Applying Patches..."
    for j in $(seq -f "%03g" 1 $i);do patch -p0 < ../bash43-$j; done
    
    echo "Ready to install. Configuring..."
    ./configure --prefix=/
    echo "Running make"
    make
    if [[ "$USER" == "root" ]]
    then
      echo "Running make install"
      make install
      cp /bin/bash /usr/local/bin/bash
    else
      echo "Running make install  (You may need to type your sudo password here)"
      sudo make install
      sudo cp /bin/bash /usr/local/bin/bash 
    fi
    

    https://github.com/wreiske/shellshocker/blob/master/fixbash是可以找到脚本的地方

    祝你好运

    • 8
  3. Pierre-Yves Gillier
    2014-09-26T06:00:54+08:002014-09-26T06:00:54+08:00

    由于您应该只从公认的提供商处安装此类安全更新,因此从源代码编译的解决方案是您唯一拥有的解决方案。

    • 5
  4. Paul Tobias
    2014-09-29T14:03:05+08:002014-09-29T14:03:05+08:00

    lumpygator 的回答帮助了我,但我认为它太复杂了。如果您只想安装较新的 ubuntu 版本中的一个包,则无需编辑sources.list,您可以直接下载该包并安装它。因此,如果遇到 bash shellshock 错误,请访问http://packages.ubuntu.com/trusty/amd64/bash/download,单击“* security.ubuntu.com/ubuntu”链接,这将下载文件bash_4.3-7ubuntu1.5_amd64.deb。或者,您可以运行以下命令:

    wget http://security.ubuntu.com/ubuntu/pool/main/b/bash/bash_4.3-7ubuntu1.5_amd64.deb
    

    获得新软件包后,您可以直接安装它:

    dpkg -i bash_4.3-7ubuntu1.5_amd64.deb
    

    这在 Saucy (13.10) 上对我有用。

    (如果您有 32 位系统,请将 amd64 替换为 i386。)

    • 3
  5. Ame Nomade
    2014-09-28T05:16:43+08:002014-09-28T05:16:43+08:00

    是的,shellshocker.net 提供的脚本正在运行。

    但至少对于 Ubuntu 11.04 (Natty Narwhal)、11.10 (Oneiric Ocelot)、12.04 LTS (Precise Pangolin)、12.10 (Quantal Quetzal)、13.04 (Raring Ringtail) 和 13.10 (Saucy Salamander),Bash 包的版本是4.2,所以脚本需要做一些改动:

    cd ~/
    mkdir bash
    cd bash
    wget https://ftp.gnu.org/gnu/bash/bash-4.2.tar.gz
    for i in $(seq -f "%03g" 0 49); do wget https://ftp.gnu.org/gnu/bash/bash-4.2-patches/bash42-$i; done
    tar zxvf bash-4.2.tar.gz 
    cd bash-4.2
    for i in $(seq -f "%03g" 0 49); do patch -p0 < ../bash42-$i; done
    ./configure && make
    sudo make install
    

    你必须安装Bison才能让“make”命令工作:

    sudo apt-get install bison
    
    • 2
  6. J G Miller
    2014-09-28T06:27:17+08:002014-09-28T06:27:17+08:00

    您可以考虑另一种方法。

    在您过时的 Quantal 服务器上,您实际上在使用 bash 吗?

    如果您不需要 bash,那么如果您还没有用 /bin/dash 的链接替换 ​​/bin/sh 链接到 /bin/bash,请安装 dash 并将其用作 Bourne shell 替换。

    这说明了为什么在 shell 脚本中不使用“bashisms”是可移植性的好主意,这样可以使用更简单、开销更少且更安全的 dash shell。

    • 0

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

  • VirtualBox 上 Ubuntu 的访客优化技巧 [关闭]

  • 外部硬盘上的 virtualbox 虚拟硬盘驱动器(Vista 主机上的 ubuntu 客户机)

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve