Баг в Bash-скрипте Steam может привести к удалению всех пользовательских файлов из Linux-системы
4Иллюстрация с сайта Visualogs.Com
В коде Bash-скрипта Linux-клиента Steam обнаружили досадную ошибку, которая может привести к полному удалению из операционной системы всех файлов, для которых у текущего пользователя есть права на запись.
Ошибка в скрипте от Valve напоминает легендарный баг в коде install.sh проекта Bumblebee для драйверов NVIDIA (см. GitHub), который удалял всё содержимое файловой системы, за что снискал широкую огласку в Open Source-сообществе. Посудите сами — вот фрагмент исходного кода из Bash-скрипта от Steam, что может спровоцировать выполнение команды rm -rf /*:
# figure out the absolute path to the script being run a bit # non-obvious, the ${0%/*} pulls the path out of $0, cd's into the # specified directory, then uses $PWD to figure out where that # directory lives - and all this in a subshell, so we don't affect # $PWD STEAMROOT="$(cd "${0%/*}" && echo $PWD)" [...] # Scary! rm -rf "$STEAMROOT/"*
Баг в Linux-версии Steam не просто является «потенциальным»: в тикетах GitHub проекта уже появилась запись от первого(?) пользователя, непосредственно пострадавшего ввиду неожиданной работы скрипта.
Сообщество уже предлагает свои варианты исправления этой ошибки, так что новый релиз Linux-версии Steam должен быть не за горами.
Постоянная ссылка к новости: http://www.nixp.ru/news/13100.html. Дмитрий Шурупов по материалам TechRepublic.
Прощание с LiMux: Полный возврат Мюнхена с Linux на Windows обойдётся почти в 50 миллионов евро 3 19
Статистика от Steam: Доля Linux-геймеров резко сократилась, составив всего 0,35 % 2
В OpenBSD предложили патч для совместимости с проблемой systemd в обработке имён юзеров
Стратегию в реальном времени Cossacks 3 (Казаки 3) портировали на GNU/Linux 2
Steam для Linux стал доступен в формате Flatpak 1
МВД Испании назвало антитеррористическую операцию… Linux 7 12
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
«Гыыы, сына, лол». Такие вот баги могут оказаться хуже критичных уязвимостей в вопросе популяризации опенсорса…
А зачем там «rm -rf „$STEAMROOT/“*», почему не сделать «rm -rf «$STEAMROOT»»?
Класс! Я только собрался на новой машине Steam установить, и тут такое :)
На самом деле баг гораздо глубже. Это вендовый баг в головах разработчиков. Пытаться угадать куда установлен бинарь и на основании этого делать какие-то выводы — это вендовое мышление. На венде — это встречается везде и всюду, там это нормально. В *nix это дебилизм. Единственный способ, который выглядит работоспособным — это написать что-то в стиле STEAMROOT="`which «$0»`». Да и то, я бы не стал полагаться на результат. В качестве грязного хака для одной системы может и покатит. Но в качестве хака, который будет применятся на широком спектре систем — не стоит. Во-всяком случае, навскидку, я не могу отмести возможность существования такого способа запуска программы, чтобы её $0 был бы создан в расчёте на одно содержимое $PATH, а программа бы получила другое содержимое. Даже более того, чем дольше я об этом думаю, тем больше у меня подозрений, что это вполне возможно.
Правильным подходом была бы default директория установки, и «ничего не работает», если эта директория была изменена. Плюс какой-нибудь способ поставить в другую директорию путём правки конфигов/скриптов, пересборки с другими опциями configure и тому подобными способами. Хомячкам, которые не могут исправить скрипты лучше терпеть установку по-умолчанию. Остальные, в случае чего — ССЗБ.
не which «$0»
а как-то так: cd $(dirname $(readlink -f «$0»))
Но да, это просто жуть.
Насчёт dirname и readlink принято, но which всё равно нужен.