Каковы риски запуска "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, вы случайно только что лишили пользователей возможности входа в систему в масштабе всей системы, введя регрессию системных зависимостей.

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


Почему вы хотите бегать с ?

Я не видел, чтобы кто-нибудь ответил на последний вопрос в вашем посте, поэтому я отвечу на него здесь. Есть несколько причин, по которым кто-то хотел бы работать с , но они гораздо реже.

Первая причина, по которой люди хотели бы сделать это таким образом, заключается в том, что они ленивы, и это быстрый способ заставить систему установить нужный пакет. Скажите, что кому-то нужно установить coloredlogspackage, потому что им абсолютно необходимо, чтобы их журналы были окрашены прямо сейчас, и они ничего не знают о безопасной системе. Часто неопытным пользователям гораздо проще добавить sudoк началу всего, когда это не работает, потому что «это просто работает», вместо того, чтобы узнать, почему это не сработало в первый раз.

Вторая причина, и единственная законная причина, о которой я могу думать, заключается в том, что администратору нужно исправить что-то в масштабе всей системы. Скажите, что уязвимость появилась в версии 20.0.0 и есть исправление, устраняющее проблему в версии 20.0.1. Системный администратор, вероятно, не хочет ждать, пока дистрибутив исправит это за него, и вместо этого хочет исправить это прямо сейчас, чтобы смягчить проблему. В этом сценарии я думаю, что системному администратору будет безопасно использовать python3 -m pip install --upgrade pipобновить свою версию pip, но они должны быть осторожны, чтобы избежать непредвиденных последствий.

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

Другие вопросы по тегам