web-dev-qa-db-ja.com

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

私はUbuntuが初めてなので、ご容赦ください。次のコマンドを使用してpipをインストールしました:Sudo apt-get -y install python-pip。次に、WebサイトでコマンドSudo pip install -U nltkを使用して 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?
36
whatwhatwhat

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

https://stackoverflow.com/a/21056000/486919 (エンファシス鉱山)から:

pipSudoを実行すると、Sudosetup.pyが実行されます。つまり、ルートとしてインターネットから任意のPythonコードを実行します。 誰かが悪意のあるプロジェクトをPyPIに設置してインストールした場合、あなたはあなたのマシンに攻撃者のルートアクセスを与えます。pipおよびPyPIの最近の修正の前に、攻撃者は信頼できるプロジェクトをダウンロードするときに中間攻撃で男を実行してコードを挿入することもできました。

https://security.stackexchange.com/a/79327/8761 で述べたように、anyone悪意のあるパッケージを含むPythonパッケージをPyPIにアップロードできます。

要するに、 最小特権の原則 に従って、PyPIからPythonパッケージをインストールするために、Sudopipと一緒に使用しないでください。に。代わりに、pip install --userSudoを持たないpip installも、現在のUbuntuでデフォルトの追加フラグ/オプションがpip install --userになっていることに注意してください)または仮想環境(virtualenv)。 Sudo pipまたはSudo -H pipをすすめている人がいる場合は、そうしないように伝えてください。

50
edwinksl

Sudoを使用してpipをインストールする必要がありますwith aptSudo apt install python-pip)、ただし edwinkslの答え パッケージのインストールにSudoを使用しないでくださいwith pip、使用するのはpip install --user <package>のみですユーザー、または virtualenv を使用して、パッケージのスコープをさらに制限します。

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

19
pizzapants184

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

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

Pythonのモットー の1つは、「1つ存在する必要があります-できれば1つだけ-明白な方法です。」そして、ほとんどのモットーと同様に、それはあらゆる可能性のある機会でサドニックな喜びで壊れています。 (それがモットーが存在する理由です。)残念ながら、私の最も謙虚な意見では、Pythonエコシステムは多くのconflictingで構成されていますハード&ファースト」ルール、決して破られることはありません...「やだやだやだ」(悪魔、詳細など)を除いて。ほとんどすべての場合、これは言語とツールの歴史的進化によるものです(そして、仕事に取り掛かりたいときに歴史のレッスンを望む/必要とする人)-しかし、Mac/Win/* Nixプラットフォーム(たとえば、Unix/Linuxの考え方は似ていますが、成熟度が数十年高いという利点があります。)そのため、pleaseはこれらすべて "壊れた練習" "本質的に間違っている"巨大なピンチを持つカーゴカルティスト塩の。いくつかは実際によく意味します。 (他のものはただ、まあ、平均です。)

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

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

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

6
michael

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

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

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

ラップトップだけで、猫の写真を数枚しかリスクにさらしていない場合、リスクはおそらく低いでしょう...しかし、マルチユーザーシステムの場合、リスクはN倍になります。システムに価値がある、またはシステムの可用性または信頼性に価値がある場合、リスクも上昇します。

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

1
Randy Zagar

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

0
Milind R