'sudo установка зернышка' все еще поврежденная практика?

Я плохо знаком с Ubuntu, поэтому терпите меня. Я установил pip использование этой команды: sudo apt-get -y install python-pip. Затем я установил NLTK использование команды на их веб-сайте, который был: sudo pip install -U nltk. Но затем я наткнулся на этот вопрос, который говорит, что все, что я сделал, было "поврежденной практикой". Строка, которая ударила меня большинство, была тем использованием sudo pip является по сути неправильным и то предоставление pip слишком много силы могло повредить файлы операционной системы. Кто-либо может проверить это требование?

Отметьте - я только использовал sudo потому что, когда я попробовал команду apt-get -y install python-pip это дало мне 2 ошибки:

E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
52
задан 23 May 2017 в 05:39

6 ответов

Как sudo pip install , так и другой его общий вариант sudo -H pip install не следует поощрять, потому что это риск безопасности при использовании привилегий root для использования pip для установки пакетов Python из PyPI (индекс пакетов Python).

Из https://stackoverflow.com/a/21056000/486919 (курсив мой):

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

Как упоминалось на https://security.stackexchange.com/a/79327/8761 , важно отметить, что любой может загружать пакеты Python, включая вредоносные один в PyPI.

Короче говоря, в соответствии с принципом наименьших прав , не используйте sudo с pip для установки пакетов Python из PyPI, если в этом нет крайней необходимости. Вместо этого рассмотрите возможность использования pip install --user (обратите внимание, что pip install без sudo , ни дополнительных флагов / параметров по умолчанию pip install --user в настоящее время в Ubuntu) или виртуальных средах (например, virtualenv ). Если вы видите людей, рекомендующих sudo pip или sudo -H pip , скажите им не делать этого.

71
ответ дан 23 November 2019 в 00:13

Вы должны использовать sudo для установки pip с помощью apt ( sudo apt install python-pip ), но, как указано в ответе edwinksl вам не следует использовать sudo для установки пакетов с помощью pip , вы должны использовать pip install --user для установки только для вашего пользователя или используйте a virtualenv , чтобы еще больше ограничить объем пакета.

Apt устанавливает пакеты из репозиториев Ubuntu, тогда как pip устанавливает загруженные пользователем пакеты из PyPi, которые могут быть вредоносными.

23
ответ дан 23 November 2019 в 00:13

Нет, это правильно. Я не могу подтвердить это утверждение. Я всегда использую sudo -H с pip . pip может повредить файлы операционной системы только на столько, сколько apt . Не используйте sudo с pip , только если вы хотите установить только для этого пользователя.

-2
ответ дан 23 November 2019 в 00:13

Использование команды «sudo pip install» может и перезапишет содержимое Python, предоставленное поставщиком вашей ОС. В этом случае любые пакеты поставщика, затронутые этим, не будут проходить проверку «rpm --verify», и ваши пакеты будут выглядеть поврежденными.

Хотите ли вы использовать инструменты системного администрирования, протестированные вашим поставщиком ОС , или можно ли использовать непроверенные компоненты, загруженные из Интернета?

Когда, а не если, вредоносный пакет будет загружен в PyPI ... люди, которые используют команду sudo pip install, в конечном итоге запустят этот вредоносный полезная нагрузка с полными системными привилегиями. Вы хотите, чтобы? (#principleofleastprivilege)

Если это просто ваш ноутбук, и вы рискуете лишь несколькими изображениями кошек, тогда риск, вероятно, невелик ... но если это многопользовательская система, то теперь риск умножается на N . Если у вас есть данные о системе, которые имеют ценность, или доступность или надежность системы имеют ценность, тогда риски также возрастают.

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

3
ответ дан 23 November 2019 в 00:13

И для более сдержанного ответа:

  1. Вы действительно всегда должны sudo apt-get install ... , именно так этот инструмент был разработан для работы .
  2. Использование sudo [-H] с pip install возможно и необязательно, в зависимости от того, что именно вы хотите сделать (и, следовательно, «разногласия»).

Один из девизов Python : «Должен быть один - и желательно только один - очевидный способ сделать это». И, как и большинство девизов, он, казалось бы, нарушен сардоническим ликованием на все возможные возможности. (Думаю, именно поэтому существуют девизы.) К сожалению, по моему самому скромному мнению, экосистема Python состоит из множества конфликтующих «жестких и быстрых» правил, которые никогда нельзя нарушать ... кроме тех случаев, когда «yada» йада йада »(черт, подробности и т. д.). Почти во всех случаях это связано с исторической эволюцией языка и инструментов (и тем, кто хочет / нуждается в уроке истории, когда они просто хотят продолжить свою работу), но также может быть из-за различий в Mac / Win / * Платформы Nix (например, Unix / Linux имеет схожий менталитет, но имеет преимущество в виде большей зрелости на десятилетия). Так что , пожалуйста, примите все эти «сломанные практики» & «по своей сути неправильные» карго-культисты с большой долей скепсиса. Некоторые действительно имеют в виду хорошо. (Другие просто, ну, подлые.)

Прежде всего, вместо базовых «установок для каждого пользователя» вы почти всегда предпочтете virtualenv, потому что на самом деле, вероятно, это то, что вам в конечном итоге понадобится. Так что вы можете начать с этого сейчас. Как это делается,точно, «зависит» (см. девиз Python выше). Если вы используете Conda (в основном для Mac и Windows), он будет настроен с помощью Conda . Если вы используете «чистый» Python [sic] , это зависит от того, какая версия и какие у вас есть утилиты python, но virtualenvwrapper очень удобен.

Во-вторых, в качестве контрпримера к правилу «никогда не sudo» вы можете предпочесть sudo -H pip install -U numpy , что совершенно нормально, даже выгодно, поскольку оно может позволяет избежать загрузки / переустановки / обслуживания больших библиотек, где вам нужна только одна версия, в каждый виртуальный сервер отдельно. Большие популярные фреймворки, такие как scikit-learn, NumPy, matplotlib, SciPy, pandas и т. Д., Можно установить один раз и все готово и повторно использовать в различных средах . Кроме того, ваш локальный дружелюбный системный администратор может установить их для каждого пользователя в системе - и, очевидно, они будут делать это также через sudo , например, , для более сложных установок, таких как TensorFlow.

И, наконец, если вы устанавливаете какую-то случайную стороннюю библиотеку, которая выполняет то-то и то-то (Twitter API, изменение текста, форматирование кода и т. д.), то я полностью согласен - не устанавливайте его как root через sudo. Конечно, установите его как текущий пользователь. Но помните, в вашей учетной записи пользователя есть все ваши действительно важные вещи .

7
ответ дан 23 November 2019 в 00:13

Чтобы добавить к этим ответам: I не знаю об Ubuntu, но в Fedora я могу использовать формат sudo dnf install python3-numpy для установки МНОГИХ пакетов, полезных для меня. Это не имеет недостатка в том, что это небезопасно (разработчик репозитория дистрибутива имеет проверенные пакеты), но также позволяет устанавливать общесистемные. Единственным недостатком является то, что версии репозитория дистрибутива могут немного отставать от пакетов в PyPI.

0
ответ дан 23 November 2019 в 00:13

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

Похожие вопросы: