Критический баг в npm 5.7.0 «ломает» файловую систему Linux
Новости Отредактировано
Уязвимость в новой версии менеджера пакетов npm превращает в хаос файловые системы на Linux. Проблема решается только полной переустановкой ОС.
5К открытий5К показов
Вышедшее 22 февраля обновление менеджера пакетов npm 5.7.0 произвольно изменяет права доступа в файловой системе Linux. Разработчикам приходится исправлять последствия вручную, выставляя доступы для критически важных файлов и папок. Пользователи думают, что проблема кроется в коммите 94227e1, передающем и исполняющем chown
в некорректных директориях.
Проявления
Последствия бага можно увидеть при выполнении команд sudo npm
от имени не корневого пользователя. Например, если вызвать sudo npm --help
или sudo npm update -g
, обе команды изменяют владельца /etc
, /usr
, /boot
и других папок, необходимых для функционирования операционной системы. Им становится пользователь, запустивший npm.
Запуск npm update -g
с правами root
ничего не изменяет в системе:
А вот результат этой же команды от имени не корневого пользователя (su jared
):
Владелец директории /usr
был изменён с root:root
на jared:jared
. То же самое происходит и со случайным набором других папок.
При простом запуске npm не от имени суперпользователя менеджер пытается поменять владельца папки /boot
, а затем “ломается”:
В чём проблема?
Источником проблемы стал переход версии 5.7.0 на новую реализацию mkdir, сохраняющую исходные права доступа и владельца при запуске с правами root с использованием sudo
. Буквально через несколько часов после обнаружения критической неисправности разработчики выпустили экстренное обновление npm 5.7.1.
Массовых проблем удалось избежать благодаря тому, что в репозитории выпуски npm 5.7.x были помечены как экспериментальные и не доставлялись через каналы обновления стабильных релизов. При этом на сайте анонс был опубликован в форме, не отличающейся от объявлений стабильных релизов, что ввело в заблуждение некоторых пользователей, которые попытались перевести на NPM 5.7 свои рабочие системы. Также интересно, что сообщение об ошибке с описанием проблемы было отправлено за неделю до релиза 5.7.0, но осталось без внимания разработчиков.
Как всё исправить?
Как сообщает OpenNET, в случае отсутствия резервной копии для восстановления всех изначальных прав доступа может потребоваться переустановка системы или восстановление прав на уровне пакетного менеджера с ручной корректировкой каталогов пользователей. Например, можно выполнить:
5К открытий5К показов