「sudo pip install」はまだ慣習に違反していますか?


38

私はUbuntuが初めてなので、ご容赦ください。pip次のコマンドを使用してインストールしましたsudo apt-get -y install python-pip。次に、Webサイトで次のコマンドを使用してNLTKをインストールしましたsudo pip install -U nltk。しかし、その後、私は自分がやったことはすべて「壊れた練習」だったというこの質問につまずいた。最も印象に残ったのは、使用することsudo pipは本質的に間違っており、pip力をかけすぎるとオペレーティングシステムファイルが破損する可能性があるということです。誰でもこの主張を検証できますか?

注- sudoコマンドを試行したときにapt-get -y install python-pip2つのエラーが発生したため、使用しただけです。

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?

3
指示sudo pip installは本質的に間違っています。stackoverflow.com/a/33004920/95735
Piotr Dobrogost

「...本質的に....」pshaw
マイケル

申し訳ありませんが、インストールsudo pip installと同じくらい悪いcurl "some-url" | sudo bashです。同様に、我々はいくつかの開発者が使用数回ありましたsudo pip installので、自分のワークステーション上で、いくつかの依存関係をインストールするには、その後、レポに壊れたコードで確認しrequirements.txtたりsetup.py、ファイルがそれらがインストール何でも行方不明になった、と誰もが必要とされたものの依存関係を把握するです男が休暇中に。
マイクデシモーネ

回答:


52

ルート権限を使用してPyPI(Python Package Index)からPythonパッケージをインストールすることはセキュリティ上のリスクであるためsudo pip install、両方とその他の一般的なバリアントsudo -H pip installは推奨されませんpip

https://stackoverflow.com/a/21056000/486919(強調鉱山):

で実行するpipsudo、で実行setup.pysudoます。つまり、インターネットからルートとして任意のPythonコードを実行します。 誰かがPyPIに悪意のあるプロジェクトを作成してインストールした場合 、攻撃者にマシンへのルートアクセス権を与えます。pipPyPI に対する最近のいくつかの修正の前に、攻撃者は信頼できるプロジェクトをダウンロードするときに中間者攻撃を実行してコードを注入することもできました。

https://security.stackexchange.com/a/79327/8761で述べたように、誰でも Pythonパッケージ(悪意のあるパッケージを含む)をPyPIにアップロードできることに注意することが重要です。

要するに、最小限の特権原則に従って、絶対に必要な場合を除き、PyPIからPythonパッケージをインストールするためにsudowith pipを使用しないでください。代わりに、pip install --user(現在、Ubuntuでデフォルトのフラグ/オプションが設定されpip installていsudoないことを確認してくださいpip install --user)または仮想環境(など)を使用することを検討してくださいvirtualenvsudo pipまたはを推奨している人がいる場合はsudo -H pip、そうしないように伝えてください。


2
過去に使用したことがある場合、どうすればクリーンアップできますか?
エンドリス

1
これらの指示は間違っていますか?tensorflow.org/install/install_linux
endolith

5
@endolithを使用すると、pipアンインストールを取り消して元に戻すことができます。ただし、パッケージがtensorflow、numpyなどの信頼できるメンテナーからのものである場合、「aye!security!」引数は本当に意味をなさない。(また、悪意のあるパッケージを「-ユーザー」としてインストールした場合でも、基本的にはめちゃくちゃです。本当のルールは次のとおりです。未知の/信頼できない人からのコードをインストールしないでください...それでも、推奨されません。)
マイケル

2
@endolithこれらの指示は、sudoを使用することを言っていません。たぶん彼らは慣れていて、彼らのやり方の誤りを見てきましたか?:)
デビッドガードナー

1
sudo pip install「古い」システムにインストールされたPythonパッケージをアンインストールできるため、これらのOSパッケージのアップグレードまたはアンインストールが困難になる場合があります。sudo pip uninstall新しいパッケージを削除しますが、古いパッケージからファイルを復元しないため、ここでは役に立ちません。(私の同僚R.ザガーは、別の回答でさらに詳しく説明します。)
マイクデシモーネ

19

あなたは使用する必要がありsudoピップをインストールするにはaptでsudo apt install python-pip)、しかし、で述べたようにedwinkslの答えあなたが使用してはならないsudoパッケージをインストールするには、ピップであなたが使用する必要があり、pip install --user <package>唯一のユーザーのためにインストールすること、または使用virtualenvのさらにパッケージの範囲を制限するために。

AptはUbuntuのリポジトリからパッケージをインストールしますが、pipは悪意のある可能性があるPyPiからユーザーがアップロードしたパッケージをインストールします。


7

そして、より緩和された返信のために:

  1. あなたは確かに、常にそうしなければなりませんsudo apt-get install ...、それはツールが動作するように設計された方法です。
  2. sudo [-H]withの使用pip installは、正確に何をしたいのか(したがって、「論争」)に応じて可能でもオプションでもあります。

Pythonのモットーの 1つは、 1つあるべきであり、できれば1つだけであることが望ましい」ということです。そして、ほとんどのモットーのように、それはあらゆる可能性があるように思われますが、サドニックな喜びで壊れています。(それがモットーが存在する理由です。)残念なことに、私の最も謙虚な意見では、Pythonエコシステムは、相反する「ハード&ファースト」ルールで、決して破壊されません...「ヤダヤダヤダ」(悪魔、詳細など)。ほとんどすべての場合、これは言語とツールの歴史的な進化によるものです(そして、仕事に取り掛かりたいときに歴史のレッスンを望んでいる/必要としている人)-また、Mac / Win / * Nixプラットフォーム(たとえば、Unix / Linuxの考え方は似ていますが、これらの「壊れた練習」「本質的に間違った」カーゴカルティストのすべてを大量の塩で飲んでください。いくつかは実際によく意味します。(他のものはただ、まあ、平均です。)

まず、基本的な「ユーザーごとのインストール」ではなく、ほとんどの場合、virtualenvを好むでしょう。実際、おそらくそれが必要になるからです。ですから、今から始めることもできます。これが正確にどのように行われるかは「依存」します(上記のPythonのモットーを参照)。Conda(主にMacおよびWindows用)を使用している場合、Condaを使用セットアップされます。「純粋な」Python [sic]を使用している場合は、使用しているpython utilsとそのバージョンによって異なりますが、virtualenvwrapperは非常に便利です。

第二に、「決してsudo」ルールの反例として、を好むかもしれませんsudo -H pip install -U numpy。それは、あなたが望むだけの大きなライブラリをダウンロード/再インストール/維持することを避けることができるという点で、完全に素晴らしいです。すべてのvirtualenvに個別に1つのバージョンが必要です。scikit-learn、NumPy、matplotlib、SciPy、pandasなどのような大きな人気のあるフレームワークは、一度インストールすれば、複数の環境で再利用できます。さらに、ローカルフレンドリーなシステム管理者は、システム上のすべてのユーザーにこれらをインストールできる場合がありsudoます。たとえば、TensorFlowなどのより複雑なインストールの場合も、明らかにを介してこれを実行します。

そして最後に、あなたがそのような(Twitter API、テキスト変更、コードフォーマットなど)を行うランダムなサードパーティライブラリをインストールする場合、私は完全に同意します-sudo経由でrootとしてインストールしないでください。もちろん、現在のユーザーとしてインストールしてください。ただしユーザーアカウントには本当に重要なものがすべてあることを覚えておいてください


2
ここで、「和らげられた」=「誰かの感情を傷つけないようにするために混乱を招く逆生産的な手巻きの感情」。混乱を避けるために、明確かつ明確にしてください。例を含め、これをベースラインとして行う必要はありません。Unixは確かに「独自の設定とリスクをロール」します。これは文字通りCの考え方ですが、そこのように、必要のないmalloc場所は使用しないでください。この--userフラグは、OPが要求したことを実行し、特別な権限は必要ありません。あなたはその過程でvirtualenvについてのあなたの良い点を弱体化させています...これに関する「貨物カルト」は何もありません。
ベンジャミンR

よくある回答と意見の調査にこの視点を含めました(詳しく読めば)。
マイケル

1

「sudo pip install」を使用すると、OSベンダーが提供するpythonコンテンツを上書きできます。その場合、この影響を受けるベンダーパッケージは「rpm --verify」を渡さず、パッケージは破損しているように見えます。

OSベンダーがテストしたシステム管理ツールを使用しますか、またはインターネットからダウンロードしたテストされていないコンポーネントを使用しても大丈夫ですか?

悪意のあるパッケージがPyPIにアップロードされた場合ではなく、「sudo pip install」を使用するユーザーは、完全なシステム権限で悪意のあるペイロードを実行することになります。あなたはそれが欲しいですか?(#principleofleastprivilege)

ノートパソコンだけで、猫の写真を数枚しかリスクにさらしていない場合、リスクはおそらく低いでしょう...システムに価値がある、またはシステムの可用性または信頼性に価値がある場合、リスクも上昇します。

自分の冒険を自由に選択してください。ただし、選択によって影響を受ける可能性のある他のユーザーのインフォームドコンセントを取得してください。彼らはあなたと同じレベルのリスクに満足していないかもしれません。


0

これらの回答に追加するには:Ubuntuについては知りませんが、Fedoraでは、sudo dnf install python3-numpyformatを使用して便利な多くのパッケージをインストールできます。これには、安全でないという欠点はありません(ディストリビューションリポジトリメンテナはパッケージを検証済みです)が、システム全体にインストールすることもできます。唯一の欠点は、ディストリビューションリポジトリバージョンがPyPIのパッケージよりもわずかに遅れることがあることです。


-1

いいえ、これは正しいです。私はこの主張を検証できません。私は常に使用sudo -Hpipます。pipは、オペレーティングシステムファイルと同じくらいのダメージしか与えませんapt。そのユーザーのみにインストールする場合にのみ使用sudoしないでpipください。


1
あなたのパソコンでは、いつpipシステム全体にインストールする必要がありますか?あなたがシステム管理者であれば、それは別の話かもしれません。
ベンジャミンR
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.