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

99

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

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


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

Orome
источник

Ответы:

106

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


источник
2
Применяется ли угроза только во время pipили при любом последующем запуске того, что она установила?
orome
4
Но это будет правдой, будь я sudoили нет, когда я pip, верно? После его установки мы все в опасности, независимо от того, как он туда попал?
orome
2
@raxacoricofallapatorius Это выходит на территорию, на которую мне неудобно отвечать не потому, что я понятия не имею (у меня есть догадка и я могу объяснить это), а потому, что, как известно, трудно предсказать, как такие, казалось бы, небольшие изменения, подобные этим, влияют в целом безопасность. Кроме того, обычно чрезвычайно просто избежать не только sudoэтих проблем с разрешениями, но и путем установки пакетов в другом месте (например, в virtualenv). Это может быть даже лучше и надежнее, даже если игнорировать все проблемы безопасности.
2
@raxacoricofallapatorius. Я опасаюсь, что в зависимости от конкретных разрешений на запись и структуры каталогов более сложные вредоносные программы перезапишут другой, более надежный код, например код, используемый системными утилитами, которые обычно запускаются от имени пользователя root.
2
Это странный ответ. Конечно, когда вы что-то запускаете, sudoвы даете ему привилегии root; в этом вся суть sudoи, конечно, не конкретно pip.
19

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

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

Петр Доброгост
источник
6

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

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

Cilyan
источник
Так что все, что мне нужно сделать, это, например, разрешить себе запись в site-packages?
orome
1
@raxacoricofallapatorius не только там, так как некоторые пакеты также устанавливают вспомогательные сценарии (например, он pipсам, IPython, django, pygments, ...), поэтому вам также понадобится доступ к любому каталогу, в который они устанавливаются.
MattDMo
Да и нет. Я не специалист по безопасности, но я думаю, что лучше, если у пользователя, запускающего скрипты, нет разрешения на запись. Поэтому предлагаю скорее отдельного пользователя.
Cilyan
@MattDMo: Да, в этом есть смысл; но эти случаи, вероятно, легко обнаружить, поскольку что-то не получается без соответствующих разрешений. Если все же сделать, то разве это не самый безопасный путь, тогда худшее, что может случиться с моей системой в целом, - это то, что может случиться, когда я все равно что-нибудь запускаю, верно? Единственная разница в том, что я потенциально могу испортить свою установку Python, как я (вместо того, чтобы быть su для этого), верно?
orome
Как мне создать такого пользователя для единственной цели использования pip(никаких других изменений в системе, таких как новый домашний каталог и т. Д., Не требуется)? После этого, я полагаю, я просто сменил владельца site-packagesна этого пользователя, верно?
orome
1

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

EkriirkE
источник