Как я могу исправить уязвимость в оболочке в устаревшей системе Ubuntu, которую я не могу обновить?
У меня есть система, которую я администрирую удаленно (на расстоянии 2 часовых поясов), которая работает под управлением Ubuntu 9.04, Jaunty. По разным причинам, главным образом из-за того, что я очень неохотно пытаюсь выполнить обновление дистрибутива, я не могу обновить его до более поздней версии. Очевидно, что он больше не поддерживается, и нет никаких официальных патчей. Имеются ли инструкции о том, как я могу исправить код и перекомпилировать bash самостоятельно, чтобы устранить уязвимости в оболочке?
4 ответа
Украл это у AskUbuntu, у кого-то, кто украл его у 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=/
к команде configure, которую вы в конечном итоге /usr/local/bin/bash
это актуально и /bin/bash
все еще будет уязвимым.
Также есть решение обновить ваш sources.list до самого нового, а затем использовать apt-get для обновления только bash. Это действительно быстро, и я написал статью об этом. Вот что вы в основном делаете:
Обновите Ubuntu до "надежных" репозиториев apt-get (вам также может потребоваться изменить URL-адреса old-repositories.ubuntu.com, если вы их используете, проверьте связанную статью):
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 репозитории.
Команда должна быть
sudo apt-get update && sudo apt-get install --only-upgrade bash
Один простой вариант - просто не использовать bash. Удостовериться dash
установлен и что /bin/sh
символическая ссылка на dash
не bash
, (Это значение по умолчанию в некоторых версиях Debian, но я не уверен насчет Ubuntu.) Если у вас есть учетные записи пользователей для доступа по ssh с принудительными командами, вам также нужно изменить их оболочки входа в систему. Вам также может понадобиться проверить любые сценарии, явно использующие bash; нащупывая #!/bin/bash
должен их найти.