Как мне обновить Bash в Mac OSX Snow Leopard [и указать правильный путь]?

Я хочу обновить мои программы Bash (и Sh) в моем Mac OS X Snow Leopard (10.6.8), в свете последних ошибок в bash - Shellshock. Я специально использую 10.6.8, поэтому я не хочу обновляться до более новой версии OS X прямо сейчас.

Я прочитал этот раздел вопросов и ответов - Как мне обновить Bash в Mac OSX Mountain Lion и указать правильный путь? но это не работает для меня, потому что у меня не установлен [home?]brew (или Xcode, или какой-либо компилятор и т. д.). Я только начинаю заниматься программированием на платформе Max OS X.

Кстати, когда я набираю brew update в терминале, я получаю такой вывод:

[489]$ brew update
-bash: brew: command not found

Итак, какие шаги (с нуля) мне нужно сделать, чтобы иметь возможность установить фиксированную версию bash для OS X 10.6.8?
Это:

  1. Установите XCode 3.2.6 (сейчас я скачиваю установочный файл объемом 4,1 ГБ)
  2. Установить Homebrew (как хоть?)
  3. Выполните шаги , описанные в разделе Как обновить Bash в Mac OSX Mountain Lion и указать правильный путь??

Или, поскольку я использую OS X 10.6.8, нужно ли мне скачивать код Bash откуда-то и компилировать его с использованием XCode 3.2.6 (или 4.2, если я заплатил за него) и вручную заменить / bin / bash и / bin / ш файлы?

Как я уже сказал, я новичок во всем этом на Mac, но у меня есть [немного устаревший] опыт программирования.

Благодарю.

4 ответа

Вы также можете сделать это в терминальном стиле (данный пакет обновлений Lion):

# pkgutil --expand ~/BashUpdateLion.pkg ~/BashUpdate
# vi ~/BashUpdate/Distribution

отредактируйте функции InstallationCheck и VolumeCheck следующим образом:

function InstallationCheck(prefix) {
     return true;
}
function VolumeCheck(prefix) {
     return true;
}

и, наконец, снова распаковываем его в устанавливаемый пакет

# pkgutil --flatten ~/BashUpdate ~/Desktop/BashUpdateModified.pkg

Homebrew - это система управления пакетами для Mac. Многие люди используют его для управления MySQL, Python и (как вы могли догадаться) Bash. Homebrew просто устанавливает эти пакеты и делает их доступными для пользователя. В то время как некоторые люди используют его для bash, обновление bash с помощью Homebrew не защищает всю их систему от сотрясений (которые моя команда проверила и определила сегодня).

Я хотел бы предложить вам скачать XCode для вашей версии OS X, скачать утилиты командной строки xcode (зайдя в настройки -> загрузки -> утилиты командной строки) и затем запустить этот скрипт, который я написал. Чтобы было понятно, этот скрипт просто выполняет те же шаги, что и здесь, я просто упростил обновление для команды разработчиков.

Вы можете скопировать этот код в исполняемый скрипт bash и запустить его с помощью./bash-fixer.sh

#!/bin/bash
# In all good conscience, I can not guarantee anything in this script. 
# I've tested it to the best of my ability, but please use at your own risk

    if [ "$EUID" -eq 0 ]; then
      echo "DO NOT RUN AS SUDO! Running as sudo will break the world and will make your computer very unhappy."
      echo "There are commands later that are appropriately sudo'd."
      exit 1
    fi

    xcode-select --version

    if [[ $? != 0 ]] ; then
      echo "You need to install the xcode stuff that makes magic. Let's try that together"
      xcode-select --install || echo "Something broke. Try running \"xcode-select --install\" manually" && exit 1
    fi

    cd ~/
    test=$( env x='() { :;}; echo vulnerable' bash -c 'echo hello' | wc -l )

    if [[ ${test} -lt 2 ]]; then
      echo "Your version of bash is up to date"
    else
      mkdir -p bash-fix
      cd bash-fix
      curl https://opensource.apple.com/tarballs/bash/bash-92.tar.gz | tar zxf -
      cd bash-92/bash-3.2
      for i in $(seq -f "%03g" 52 54); do
        curl https://ftp.gnu.org/pub/gnu/bash/bash-3.2-patches/bash32-$i | patch -p0
      done
      cd ..

      xcodebuild
      sudo cp /bin/bash /bin/bash.old
      sudo cp /bin/sh /bin/sh.old

      echo
      echo
      echo "Current version of bash is $(build/Release/bash --version | head -1 | awk -F "version " '{ print $2 }')"
      echo "Current version of sh is $(build/Release/sh --version | head -1 | awk -F "version " '{ print $2 }' )"

      if [[ $(build/Release/bash --version) =~ "3.2.54(1)-release" && $(build/Release/sh --version) =~ "3.2.54(1)-release" ]]; then
        echo "So far so good. Let's do some more checks, because we like dilligence"
      else
        echo "The bash and shell versions are not showing up as being the most recent. Something is afoot!"
        exit 1
      fi

      if [[ "${test}" < 2 ]]; then
        echo "Your version of bash is up to date"
        exit 0
      else
        echo "Something went horribly wrong!"
        exit 1
      fi

      echo "Awesome. All checks have passed. Cleaning up, and removing executable privaleges from the old bash and sh, just in case"
      sudo cp build/Release/bash /bin
      sudo cp build/Release/sh /bin
      sudo chmod a-x /bin/bash.old /bin/sh.old

    fi

Дайте мне знать, как вы оформляете, и удачи!

Обратите внимание, что Apple выпустила набор официальных исправлений Bash 2014-09-29. Тем не менее, поддержка возвращается только к Льву, а не к Снежному Барсу. Итак, вы все еще застряли с созданием и установкой собственной исправленной версии на Snow Leopard.

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

APPLE-SA-2014-09-29-1 OS X bash Update 1.0

OS X bash Update 1.0 is now available and addresses the following:

Bash
Available for: OS X Lion v10.7.5, OS X Lion Server v10.7.5, OS X Mountain Lion v10.8.5,
OS X Mavericks v10.9.5
Impact: In certain configurations, a remote attacker may be able to execute arbitrary
shell commands
Description: An issue existed in Bash's parsing of environment variables. This issue was
addressed through improved environment variable parsing by better detecting the end of
the function statement.
This update also incorporated the suggested CVE-2014-7169 change, which resets the
parser state.
In addition, this update added a new namespace for exported functions by creating a
function decorator to prevent unintended header passthrough to Bash. The names of all
environment variables that introduce function definitions are required to have a
prefix "__BASH_FUNC<" and suffix ">()" to prevent unintended function passing via
HTTP headers.
CVE-ID
CVE-2014-6271 : Stephane Chazelas
CVE-2014-7169 : Tavis Ormandy


OS X bash Update 1.0 may be obtained from the following webpages:
http://support.apple.com/kb/DL1767 – OS X Lion
http://support.apple.com/kb/DL1768 – OS X Mountain Lion
http://support.apple.com/kb/DL1769 – OS X Mavericks

To check that bash has been updated:

* Open Terminal
* Execute this command:
bash --version
* The version after applying this update will be:
OS X Mavericks:  GNU bash, version 3.2.53(1)-release (x86_64-apple-darwin13)
OS X Mountain Lion:  GNU bash, version 3.2.53(1)-release (x86_64-apple-darwin12)
OS X Lion:  GNU bash, version 3.2.53(1)-release (x86_64-apple-darwin11)

Information will also be posted to the Apple Security Updates
web site: http://support.apple.com/kb/HT1222

This message is signed with Apple's Product Security PGP key,
and details are available at:
https://www.apple.com/support/security/pgp/

-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.22 (Darwin)

iQIcBAEBAgAGBQJUKdToAAoJEBcWfLTuOo7t4QEP/jrigiLB9GYO5JIdVHSFPUtx
MBr4hAe90LnyAIuhxny1PgAC8BZCPv4otm6DQBQSlX1PxLv8TWm8yp5IKCKJP6ZN
Smm+OqJLLWwcTOVv345bi5W9dp2nyZVLjWxx9MUfn4YLxKrBJ3fKyHWIycD0WpbD
4kfXW1G1JGTtyUX6Ge2lnhbOiYBPxJN2TSX4qEmix3KLmEwCwsZVgbjzW2ijNO0O
3AaUkFIICAECMCE+VZj/fGFQaEmYaPzpt3Tjy+X2NdXL8E0hnui4ymfU0DyR39Oz
8DQpP499hISeXucdAEH6b2mMO2pOmuDs6FWTSS6talT8ftLUpTmWqv2Rghto5ZXN
b8RZpOp9RUwurZPMq66BjbHfidEaLjMPCVcfAnjO6HwBaKGQ5kM5+ThPA5/DLSL6
gGPa4t3qM/JdQAzm8da9m62vjWZ1BXzIlLSmxpIq/5bDMpBNiA783f+uuDUjpQ/N
3SkKNn2U47VsCLYaoSSmL6FUBLsInnNvwkVyNsnMiEjMVn/BtV5ogAYAc8SSvGM7
Mlx9OBKYork0bNuViPK09j/8te74tt6t38B+0lb4mG5m1r2CyI96f2uVBpKkqDlj
K6INwsDZKqtg1Y+6xtnJb9F3ZNZarzSxZa2C8qKaVCH11vLaXVPJJCrYspWnV8yI
DrlKtF9VhcfUGTKJiRNX
=ZVVk
-----END PGP SIGNATURE——

http://hacksagogo.wordpress.com/2014/10/02/shell-shock-os-x-bash-update-installer-for-snow-leopard/

Вот для сумасшедших, неудачников, смутьянов, круглых колышков в квадратных отверстиях. Те, кто видит вещи по-другому... и до сих пор управляют Снежным Барсом.

1.- Откройте bashUpdateLion.pkg в PackageMaker

2.- Перейдите в режим редактирования проекта /raw и измените функции "InstallationCheck" и "VolumeCheck" в файле "Distribution", чтобы они выглядели так:

function InstallationCheck(prefix) {
    return true; }

function VolumeCheck(prefix) {
    return true; }

3.- Нажмите "build" и выберите имя для установочного пакета.

Это все, ребята.

Другие вопросы по тегам