Критический баг в 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К показов



