Каковы риски запуска "sudo pip"?
Иногда я сталкиваюсь с комментариями или ответами, которые решительно заявляют о pip
под sudo
является "неправильным" или "плохим", но в некоторых случаях (включая то, как у меня настроена куча инструментов), когда его намного проще или даже необходимо запустить таким способом.
Какие риски связаны с бегом pip
под sudo
?
Обратите внимание, что это не тот же вопрос, что и этот, который, несмотря на заголовок, не дает никакой информации о рисках. Это также не вопрос о том, как избежать использования sudo
, но конкретно о том, почему кто-то хотел бы.
5 ответов
Когда ты бежишь pip
с sudo
, ты бежишь setup.py
с sudo
, Другими словами, вы запускаете произвольный код Python из Интернета от имени пользователя root. Если кто-то запускает вредоносный проект в PyPI и вы устанавливаете его, вы предоставляете злоумышленнику root-доступ к своей машине. До некоторых недавних исправлений pip
и PyPI, злоумышленник также может запустить человека в середине атаки, чтобы внедрить свой код при загрузке заслуживающего доверия проекта.
Помимо очевидных угроз безопасности (которые, я думаю, на самом деле низкие при установке программного обеспечения, которые вы знаете), привнесенных в другие ответы, есть еще одна причина. Python, поставляемый с системой, является частью этой системы, и когда вы хотите управлять системой, вы используете инструменты, предназначенные для обслуживания системы, такие как менеджер пакетов в случае установки / обновления / удаления программного обеспечения. Когда вы начинаете модифицировать программное обеспечение системы сторонними инструментами (в данном случае pip), тогда у вас нет никаких гарантий относительно состояния вашей системы. Еще одна причина в том, что sudo может принести вам проблемы, у вас не будет шансов или очень мало шансов иметь иное. Смотрите, например, Несоответствие между sys.executable и sys.version в Python
Distros знают об этой проблеме и пытаются смягчить ее. Например, Fedora - Обеспечение безопасности sudo pip и Debian - dist-пакеты вместо пакетов сайта.
Использование pip таким образом означает, что вы доверяете ему до уровня, на котором вы позволяете ему делать что-либо для вашей системы. Не только pip, но и любой код, который он будет загружать и выполнять из источников, которым вы не доверяете и которые могут быть вредоносными.
И pip не нужны все эти привилегии, только доступ на запись к определенным файлам и каталогам. Если вы не можете использовать менеджер пакетов своей системы и не хотите идти по пути виртуальной среды, вы можете создать конкретного пользователя, который имеет право на запись в каталог установки python, и использовать его для pip. Таким образом, вы лучше контролируете, что может делать pip, а что нет. И вы можете использовать sudo -u
для этого!
Есть несколько причин, которые не были упомянуты другими пользователями, но все же важны.
Отсутствие проверки кода среди пакетов
Первая причина заключается в том, что пакеты PyPI (пакеты, которые вы можете установить с помощью ) не отслеживаются и не проверяются кодом, как вы, возможно, привыкли к другим менеджерам пакетов. Было много случаев, когда вредоносные пакеты PyPI публиковались, а затем загружались тысячами пользователей, прежде чем были удалены. Если вам случится загрузить один из этих вредоносных пакетов с правами root, вы, по сути, предоставите вредоносному ПО доступ ко всей вашей системе. Хотя это происходит не каждый день, это все же вектор атаки, о котором следует знать. Вы можете узнать больше об этом, прочитав о концепции наименьших привилегий.
Запуск от имени root мешает работе пакетов системного уровня
Вторая и более важная причина заключается в том, что работа с пользователем root будет мешать работе пакетов системного уровня и может нарушить функциональность вашей системы. В ответе Петра Доброгоста кратко упоминается о влиянии менеджеров пакетов на состояние вашей системы, но я думаю, что более подробное объяснение поможет людям лучше понять, почему эта практика может быть вредной.
Возьмем, к примеру, дистрибутив Linux, который поставляется с Python 3.6 и пакетом Python для выполнения криптографических операций. Для наглядности представьте, что пакет версии 1.0.0 используется системой для хеширования паролей и позволяет пользователям входить в систему. Если версия 1.0.1 того же пакета вызывает регрессию, которую система не учитывает, и вы глобальный
cryptography
пакет, запустив
sudo pip3 install -U cryptography
, вы случайно только что лишили пользователей возможности входа в систему в масштабе всей системы, введя регрессию системных зависимостей.
Это надуманный пример, и на самом деле его было бы легче отследить, чем большинство, но это, безусловно, возможный сценарий. В реальном мире вы, скорее всего, сломаете что-то менее важное, но урок тот же. В некоторых сценариях этот пример было бы легче отменить, потому что вы бы точно знали, что вы сломали, когда все мгновенно перестало работать, но вы могли бы в конечном итоге сломать что-то, что гораздо сложнее отследить, и вы могли бы узнать об этом намного позже, когда у вас есть не помнит, что ты изменил.
Почему вы хотите бегать с ?
Я не видел, чтобы кто-нибудь ответил на последний вопрос в вашем посте, поэтому я отвечу на него здесь. Есть несколько причин, по которым кто-то хотел бы работать с , но они гораздо реже.
Первая причина, по которой люди хотели бы сделать это таким образом, заключается в том, что они ленивы, и это быстрый способ заставить систему установить нужный пакет. Скажите, что кому-то нужно установить
coloredlogs
package, потому что им абсолютно необходимо, чтобы их журналы были окрашены прямо сейчас, и они ничего не знают о безопасной системе. Часто неопытным пользователям гораздо проще добавить
sudo
к началу всего, когда это не работает, потому что «это просто работает», вместо того, чтобы узнать, почему это не сработало в первый раз.
Вторая причина, и единственная законная причина, о которой я могу думать, заключается в том, что администратору нужно исправить что-то в масштабе всей системы. Скажите, что уязвимость появилась в версии 20.0.0 и есть исправление, устраняющее проблему в версии
20.0.1
. Системный администратор, вероятно, не хочет ждать, пока дистрибутив исправит это за него, и вместо этого хочет исправить это прямо сейчас, чтобы смягчить проблему. В этом сценарии я думаю, что системному администратору будет безопасно использовать
python3 -m pip install --upgrade pip
обновить свою версию
pip
, но они должны быть осторожны, чтобы избежать непредвиденных последствий.
Единственное "не так" с sudo
в том, что он, как суперпользователь, действует как root, что означает, что вы потенциально можете уничтожить установку с помощью неправильной команды. Поскольку PIP - это пакетное обслуживание для конкретной программы, вам, во всяком случае, потребуется такой доступ для внесения изменений...