Как обновить bash
Перейти к содержимому

Как обновить bash

  • автор:

Как обновить bash ?

Тут какая-то проблема возникла неразрешимая
Не могу обновить файл /bin/bash
Для того , чтобы это сделать , нужно выполнить команду cp
Но команда cp каждый раз ругается на то , что файл /bin/bash уже занят
Т.е. получается , что терминал-то я уже открыл .

anonymous
28.08.05 10:10:29 MSD

Re: Как обновить bash ?

arax ★★
( 28.08.05 10:21:05 MSD )

Ответ на: Re: Как обновить bash ? от arax 28.08.05 10:21:05 MSD

Re: Как обновить bash ?

anonymous
( 28.08.05 10:36:44 MSD )

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.

Похожие темы

  • Форум Терминал: как исправить bash-completion (2018)
  • Форум выполинть содержимое переменной. (2004)
  • Форум как выполнить ‘cd’ в новой сессии bash? (2014)
  • Форум bash $? ssh (2008)
  • Форум chroot не видит /bin/bash (2005)
  • Форум bash setuid (2010)
  • Форум bash (2012)
  • Форум lighttpd & /bin/bash (2013)
  • Форум Qt + bash (2020)
  • Форум chroot (2009)

Как обновить Bash на macOS?

Одна вещь, о которой не знают многие пользователи macOS, заключается в том, что они используют полностью устаревшую версию оболочки Bash. Однако настоятельно рекомендуется использовать более новую версию Bash в macOS, поскольку она позволяет использовать новые полезные функции. В этой статье объясняется, как это сделать.

Какая версия Bash по умолчанию в macOS?

Чтобы узнать, насколько устарела версия Bash, включенная в macOS, выполните выполните следующую команду:

bash --version

У меня стоит старенькая macOS Mojave, но версия GNU Bash гораздо старее — это 3.2, которая датируется 2007 годом! Прикол в том, что она включена во все версии macOS, даже в самые новые.

Причина, по которой Apple включает такую старую версию Bash в свою операционную систему, связана с лицензированием. Начиная с версии 4.0 (преемник 3.2), Bash использует лицензию GNUv3 (GPLv3), которую Apple не поддерживает (не хочет). Версия 3.2 GNU Bash — последняя версия с GPLv2, которую Apple принимает, и поэтому придерживается ее.

Это означает, что весь мир (например, Linux) продолжает использовать новые версии Bash, тогда как пользователи macOS застряли со старой версией десятилетней давности. На момент написания этой статьи самой новой версией GNU Bash была 5.0, выпущенная в январе 2019 года.

Инструкция по обновлению оболочки вашей системы по умолчанию до новейшей версии Bash

Вам нужно сделать три вещи:

  1. Собственно, установить последнюю версию Bash.
  2. Внести новую оболочку в список доверенных.
  3. Установить новый Bash в качестве оболочки по умолчанию.

Как вы уже поняли, просто обновить существующую системную оболочку не получиться (как в Linux).

Установка

Проще всего это сделать с помощью Homebrew. Сам менеджер пакетов ставиться одной командой с сайта, хотя скорее всего он у вас уже установлен.

brew install bash

Чтобы проверить установку, вы можете убедиться, что теперь у вас есть две версии Bash в вашей системе:

which -a bash

Первая — это новая версия, а вторая — старая версия:

/usr/local/bin/bash --version
/bin/bash --version

Поскольку каталог новой версии (/usr/local/bin) по умолчанию стоит перед каталогом старой версии (/bin) в переменной PATH, версия, используемая при простом вводе Bash, является новой. Но это еще не все.

Список доверенных

В системах UNIX есть функцию безопасности, которая ограничивает оболочки, которые можно использовать после входа в систему. Эти доверенные оболочки перечислены в файле /etc/shells. Отредактируем его из под суперпользователя (вы можете использовать любой другой редактор):

sudo nano /etc/shells

И добавим к его содержимому оболочку /usr/local/bin/bash, чтобы файл выглядел примерно так:

/etc/shells

Оболочка по умолчанию

Необходимо выполнить команду:

chsh -s /usr/local/bin/bash

Вот и все! Оболочка по умолчанию для вашего текущего пользователя теперь настроена на новую версию Bash. К этой команде можно добавить sudo и сделать тоже самое для суперпользователя.

Некоторые особенности работы с Bash-скриптами

Теперь в вашей системе существуют две версии Bash, но почти все сценарии начинаются со строки #!/bin/bash. Это означает, что если вы запустите такой скрипт, он будет интерпретирован старой версией Bash.

#!/bin/bash

В большинстве случаев это не проблема. Если вы хотите, чтобы ваш скрипт явно интерпретировался новой версией Bash, вы можете изменить начальную строку на #!/usr/local/bin/bash.

Но это решение не является переносимым, оно, скорее всего, не будет работать на других системах. Это связано с тем, что другие «нормальные» системы не имеют оболочки, расположенной в /usr/local/bin/bash (тогда как /bin/bash является почти стандартом).

Поэтому для скриптов лучше всегда использовать строку #!/usr/bin/env bash. При такой записи сценарий проверяет переменную PATH и использует первый обнаруженный исполняемый файл Bash в качестве интерпретатора. Если каталог новой версии расположен перед каталогом старой версии в PATH (что по умолчанию), то будет использоваться новая версия, и вывод скрипта будет примерно таким:

#!/usr/bin/env bash

Рекомендуемые настройки после обновления вообще всей операционной системы macOS

sudo mdutil -a -i off sudo pmset -a hibernatemode 0 xcode-select --install
  • Об авторе
  • Недавние публикации

Как обновить bash

Сложно переоценить масштабы распространения уязвимости Bash Shellshock, ведь она присутствует во всех версиях Bash, начиная с версии 1.14, выпущенной в 1994 году. На фоне масштабов распространения Shellshock, недавно обнаруженная уязвимость OpenSSL Heartbleed просто меркнет, ведь она затрагивала версии openssl, выпущенные только за последние два года.

Казалось бы, чтобы получить доступ к bash, нужно иметь shell на соответствующем сервере, поэтому какая разница уязвим ваш сервер или нет, ведь shell от него есть только у вас? Увы, все гораздо хуже. Если у вас на сервере запускаются CGI/FastCGI скрипты, а это может быть и даже php, ведь он запускается в режиме FastCGI с помощью скрипта-wrapper’а, написанного на … bash. Поэтому если на вашем сервере установлен bash с уязвимостью Shellshock, злоумышленник может выполнять произвольные команды на вашем сервере просто указывая их в полях http-заголовков, например в поле User-Agent .

Если мы уже в достаточной степени убедили вас проверить вашу систему и обновить ее по необходимости, давайте приступим к активным действиям.

1. Проверим наличие уязвимости

Для проверки вашего bash на предмет уязвимости достаточно зайти в консоль сервера и выполнить вот такую команду:

env X="() < :;>; echo vulnerable" bash -c "echo stuff"

Если в результате выполнения этой команды вы увидите две строки и одна из них будет со словом ‘vulnerable’, ваш bash уязвим.

2. Выясняем версию debian

Чтобы выяснить, какая версия debian установлена на вашем сервере, нужно выполнить команду

cat /etc/debian_version

Если в результате вы видите цифру, начинающуюся с 7 или со слова wheezy, вам повезло и debian у вас самый свежий, поэтому обновить его весьма просто (см.следующий раздел). Если же debian у вас версии 6 или 5, отчаиваться все равно не стоит и мы чуть ниже покажем что вы можете сделать в вашем случае.

3. Обновляем Debian версии 7 (Wheezy)

Все просто. Выполняем в консоли от имени пользователя root команды:

apt-get update apt-cache policy bash

В выводе последней команды нас интересуют строки Installed: и Candidate: (“Установлен” и “Кандидат” в случае русской локали в консоли). Скорее всего вы увидите что-то вроде:

Installed: 4.2+dfsg-0.1 Candidate: 4.2+dfsg-0.1+deb7u3

Если вдруг версия Candidate тоже равна 4.2+dfsg-0.1 , значит вам необходимо в файл /etc/apt/sources.list добавить строку:

deb http://security.debian.org/ wheezy/updates main contrib non-free

И снова выполнить apt-get update

Наконец, обновляем bash:

apt-get install bash

После этого необходимо открыть новую консоль, либо выйти из текущей консоли и зайти в нее снова, и снова повторить тест из первого раздела этой статьи.

4. Обновляем более старые версии Debian (Lenny, Squeeze)

Мы предлагаем весьма простой вариант обновления bash для вашего случая: установить пакет bash-static из Debian Wheezy. На многих сайтах вы прочитаете советы по сборке bash из исходных текстов, либо установки обновления bash из squeeze-lts, но нам кажется, что наш вариант наиболее простой.

Для начала необходимо выяснить установлена у вас 32х битная система или 64х битная. Это можно сделать, выполнив команду:

file /bin/ls

Если в результате ее выполнения вы увидите строку “ /bin/ls: ELF 32-bit . ”, значит система 32 битная. Если строка будет “ /bin/ls: ELF 64-bit . ”, соответственно, система у вас 64 битная.

Теперь скачаем требуемый пакет. Для 32 битной версии debian выполним:

wget -c http://security.debian.org/debian-security/pool/updates/main/b/bash/bash-static_4.2+dfsg-0.1+deb7u3_i386.deb dpkg -i bash-static_4.2+dfsg-0.1+deb7u3_i386.deb

Для 64 битной версии выполним:

wget -c http://security.debian.org/debian-security/pool/updates/main/b/bash/bash-static_4.2+dfsg-0.1+deb7u3_amd64.deb dpkg -i bash-static_4.2+dfsg-0.1+deb7u3_amd64.deb

Далее, независимо от версии debian:

dpkg-divert --divert /bin/bash.old-diverted --rename /bin/bash ln -s /bin/bash-static /bin/bash ln -sf /bin/bash /bin/sh

Готово, bash обновлен. После этого необходимо открыть новую консоль, либо выйти из текущей консоли и зайти в нее снова, и снова повторить тест из первого раздела этой статьи.

Обновить bash на Windows 10

Если, запуская подсистему Linux мы получаем сообщение о необходимости обновить пакеты, то можно решить проблему удалив подсистему и поставив заново. Но тогда удалятся и данные, а можно данные сохранить, проведя процедуру upgrade подсистемы linux.

PS C:\WINDOWS\system32> bash Могут быть обновлены 108 пакетов. 67 обновлений касаются безопасности системы. username@hostname:/mnt/c/Windows/System32$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 Codename: trusty

Чтобы обновить достаточно выполнить стандартную процедуру обновления Ubuntu

sudo apt-get update sudo apt-get upgrade sudo do-release-upgrade . 

Собственно говоря и всё. Проверяем

lsb_release -a username@hostname:/mnt/c/Users/Александр$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.2 LTS Release: 16.04 Codename: xenial
  • Microsoft Release Notes
  • Windows 10 Creators Update: What’s new in Bash/WSL & Windows Console

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *