Каковы риски запуска "sudo pip"?

Иногда я сталкиваюсь с комментариями или ответами, которые заявляют, что запуск pip под sudo является "неправильным" или "плохим", но есть случаи ( включая способ, которым у меня есть набор инструментов), где он либо намного проще, либо даже необходимо запустить его таким образом.

Каковы риски, связанные с запуском pip под sudo?


Обратите внимание, что это не тот вопрос, что этот, который, несмотря на заголовок, не предоставляет никакой информации о рисках. Это также не вопрос о том, как избежать использования sudo, а конкретно о том, почему нужно хотеть.

Ответ 1

Когда вы запустите pip с помощью sudo, вы запустите setup.py с помощью sudo. Другими словами, вы запускаете произвольный код Python из Интернета с правами root. Если кто-то запускает вредоносный проект в PyPI, и вы его устанавливаете, вы предоставляете root-хакеру доступ к вашему компьютеру. До недавних исправлений для pip и PyPI злоумышленник также мог запустить человека в средней атаке, чтобы внедрить свой код при загрузке надежного проекта.

Ответ 2

Помимо очевидных угроз безопасности (которые, по моему мнению, на самом деле низки, когда вы устанавливаете программное обеспечение, которое вы знаете) принесли другие ответы, есть еще одна причина. Python, входящий в систему, является частью этой системы, и когда вы хотите управлять системой, вы используете инструменты, предназначенные для системного обслуживания, такие как менеджер пакетов в случае установки/обновления/удаления программного обеспечения. Когда вы начинаете изменять системное программное обеспечение с помощью сторонних инструментов (pip в этом случае), тогда у вас нет гарантии состояния вашей системы. Еще одна причина заключается в том, что sudo может принести вам проблемы, у вас не будет шанса или у вас будет очень мало шансов иметь в противном случае. См. Например Несоответствие между sys.executable и sys.version в Python

Distros знают об этой проблеме и пытаются ее смягчить. Например, Fedora - Создание безопасного sudo pip и Debian - dist-packages вместо сайтов-пакетов.

Ответ 3

Использование pip таким образом означает, что вы доверяете ему до уровня, позволяющего ему что-либо сделать в вашей системе. Не только пип, но и любой код, который он будет загружать и выполнять из источников, которым вы не доверяете, и которые могут быть вредоносными.

И пипсу не нужны все эти привилегии, только доступ на запись к определенным файлам и каталогам. Если вы не можете использовать диспетчер системных пакетов и не хотите идти виртуальной средой, вы можете создать конкретного пользователя, который имеет права на запись в каталог установки python и использовать его для pip. Таким образом, вы лучше контролируете то, что может делать, и не делать. И вы можете использовать sudo -u для этого!

Ответ 4

Единственное, что "неправильно" с sudo заключается в том, что он, ну, как суперпользователь, так что вы можете потенциально уничтожить установку с помощью неправильной команды. Поскольку PIP - это обслуживание пакета для конкретной программы, вам нужен такой доступ, чтобы внести изменения...