Pertanyaan Apakah `sudo pip install` masih merupakan praktik yang rusak?


Saya baru di Ubuntu, jadi tolong bantu saya. Saya sudah menginstal pip menggunakan perintah ini: sudo apt-get -y install python-pip. Kemudian saya menginstal NLTK menggunakan perintah di situs web mereka, yaitu: sudo pip install -U nltk. Tapi kemudian saya tersandung pertanyaan ini yang mengatakan bahwa semua yang saya lakukan adalah "praktek yang rusak". Garis yang paling mengejutkan saya adalah penggunaannya sudo pip secara inheren salah dan memberi itu pip terlalu banyak kekuatan dapat merusak file sistem operasi. Adakah yang bisa memvalidasi klaim ini?

Catatan - Saya hanya menggunakan sudo karena ketika saya mencoba perintah apt-get -y install python-pip itu memberi saya 2 kesalahan:

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?

22
2017-07-25 02:26


asal


Instruksi memberitahu sudo pip install secara inheren salah. - dari stackoverflow.com/a/33004920/95735 - Piotr Dobrogost
"... secara inheren ...." pshaw - michael


Jawaban:


Kedua sudo pip install dan varian umum lainnya sudo -H pip install harus tidak dianjurkan karena itu adalah risiko keamanan untuk menggunakan hak akses root untuk digunakan pip menginstal paket Python dari PyPI (Python Package Index).

Dari https://stackoverflow.com/a/21056000/486919 (penekanan saya):

Saat Anda berlari pip dengan sudo, kamu lari setup.py dengan sudo. Di   kata lain, Anda menjalankan kode Python sewenang-wenang dari Internet sebagai root.    Jika seseorang memasang proyek berbahaya di PyPI dan Anda menginstalnya, Anda memberikan akses root penyerang ke komputer Anda. Sebelum beberapa baru-baru ini   perbaikan ke pip dan PyPI, penyerang juga bisa menjalankan seorang pria di   serangan tengah untuk menyuntikkan kode mereka ketika Anda mengunduh yang dapat dipercaya   proyek.

Seperti yang disebutkan di https://security.stackexchange.com/a/79327/8761, penting untuk dicatat itu siapa saja dapat mengunggah paket Python, termasuk yang jahat, ke PyPI.

Singkatnya, sesuai dengan prinsip paling tidak istimewa, jangan gunakan sudo dengan pip untuk menginstal paket Python dari PyPI kecuali Anda benar-benar perlu. Sebagai gantinya, pertimbangkan untuk menggunakan pip install --user (catat itu pip install dengan tidak sudo atau default bendera / opsi tambahan untuk pip install --user di Ubuntu saat ini) atau lingkungan virtual (seperti virtualenv). Jika Anda melihat orang merekomendasikan sudo pip atau sudo -H pip, tolong beri tahu mereka untuk tidak.


26
2017-07-25 06:49



Jika saya pernah menggunakannya di masa lalu, bagaimana cara membersihkannya? - endolith
Jadi instruksi ini salah? tensorflow.org/install/install_linux - endolith
@ endolith Anda dapat sudo pip uninstall untuk membatalkan. Juga, meskipun, jika paket tersebut berasal dari pengelola tepercaya, seperti tensorflow, numpy, dll, "aye! Security!" Argumen tidak masuk akal. (Juga jika Anda menginstal paket berbahaya apa saja, bahkan sebagai "--user", pada dasarnya Anda juga mengacau. Aturan sebenarnya harus: Jangan menginstal kode dari orang yang tidak dikenal / tidak dipercaya ... kecuali dalam sebuah wadah - tetapi itupun tidak direkomendasikan.) - michael


Anda harus menggunakannya sudo untuk memasang pip dengan apt (sudo apt install python-pip), tetapi sebagaimana dinyatakan dalam jawaban edwinksl Anda seharusnya tidak menggunakan sudo untuk menginstal paket dengan pip, kamu harus menggunakan pip install --user <package> untuk menginstal hanya untuk pengguna Anda, atau gunakan a virtualenv untuk lebih membatasi ruang lingkup paket.

Apt menginstal paket dari repositori Ubuntu, sedangkan pip menginstal paket yang diupload pengguna dari PyPi yang bisa berbahaya.


13
2018-01-14 06:37





Dan untuk balasan yang lebih marah:

  1. Anda memang harus selalu melakukannya sudo apt-get install ..., itulah bagaimana alat itu dirancang untuk bekerja.
  2. Menggunakan sudo [-H] dengan pip install keduanya dimungkinkan & opsional, tergantung pada apa sebenarnya yang ingin Anda lakukan (dan karenanya, "kontroversi").

Satu dari Motto Python aku s "Harus ada satu-- dan sebaiknya hanya satu - cara yang jelas untuk melakukannya." Dan seperti kebanyakan motto, hal itu dipatahkan dengan kegirangan sinis di setiap kesempatan yang memungkinkan. (Itu sebabnya motto ada, saya kira.) Sayangnya, menurut pendapat saya yang paling sederhana, ekosistem Python terdiri dari banyak bertentangan "keras & cepat" aturan, tidak pernah rusak ... kecuali ketika "yada yada yada" (setan, detail, dll). Dalam hampir semua kasus, ini disebabkan evolusi historis bahasa & alat (dan yang ingin / membutuhkan pelajaran sejarah ketika mereka hanya ingin melanjutkan pekerjaan mereka) - tetapi juga dapat disebabkan oleh perbedaan pada Mac / Win / * Platform Nix (misalnya, Unix / Linux memiliki mentalitas yang mirip, tetapi memiliki keuntungan lebih dari beberapa dekade kedewasaan.) Jadi silahkan ambil semua ini "praktek rusak" & "salah secara inheren" pengumpul muatan dengan sedikit garam. Beberapa sebenarnya berarti baik. (Lainnya hanya, baik, maksud.)

Pertama-tama, daripada "per-user installs" dasar, Anda hampir selalu lebih menyukai virtualenv, karena sebenarnya, mungkin itulah yang akan Anda butuhkan. Jadi Anda sebaiknya mulai sekarang juga. Bagaimana ini dilakukan, tepatnya, "tergantung" (lihat Moto Python, di atas). Jika Anda menggunakan Conda (sebagian besar untuk Mac & Windows), itu akan diatur menggunakan Conda. Jika menggunakan "murni" Python [sic], itu tergantung pada versi & apa python utils yang kamu punya, tapi virtualenvwrapper sangat berguna.

Kedua, hanya sebagai contoh kontra terhadap aturan "tidak pernah sudo", Anda mungkin lebih suka sudo -H pip install -U numpy, yang sangat baik, bahkan menguntungkan, karena dapat memungkinkan seseorang untuk menghindari mengunduh / menginstal ulang / memelihara pustaka besar, di mana Anda hanya ingin / memerlukan satu versi, ke setiap virtualenv secara terpisah. Kerangka kerja yang besar dan populer seperti scikit-learn, NumPy, matplotlib, SciPy, panda, dll., Dapat dipasang sekali & selesai dan digunakan kembali di seluruh lingkungan. Selanjutnya, admin sys-admin lokal Anda mungkin bisa menginstalnya setiap pengguna pada sistem - dan jelas mereka akan melakukan ini melalui sudo, juga, misalnya, untuk instalasi yang lebih rumit, seperti TensorFlow.

Dan, terakhir, jika Anda menginstal beberapa pustaka pihak ke-3 acak yang melakukan seperti ini dan itu (API Twitter, teks munging, pemformatan kode, dll), maka saya setuju sepenuhnya - jangan menginstalnya sebagai root via sudo. Tentu, instal sebagai pengguna Anda saat ini. Tetapi ingat saja, anda pengguna akun memiliki semua hal yang sangat penting.


3
2017-09-18 01:41



Di mana "tempered" = "perundungan kontraproduktif meremas-remas mengundang kebingungan demi mencoba untuk tidak menyakiti perasaan siapa pun". Bersikaplah jelas dan eksplisit untuk menghindari kebingungan: tidak pernah ada kebutuhan untuk melakukan ini sebagai baseline, termasuk contoh Anda. Unix memang "menggulung konfigurasi dan risiko Anda sendiri", itu benar-benar pola pikir C, tetapi seperti di sana, jangan gunakan malloc dimana kamu tidak perlu. Itu --user flag melakukan apa yang diminta oleh OP dan tidak memerlukan izin khusus. Anda merusak poin baik Anda virtualenv dalam prosesnya ... tidak ada apa pun yang "kargo-kultus" tentang semua ini. - Benjamin R
Saya sudah memasukkan perspektif ini dalam survei saya tentang tanggapan & pendapat umum (jika ada yang membaca dengan seksama). - michael


Untuk menambah jawaban ini: Saya tidak tahu tentang Ubuntu, tetapi di Fedora saya bisa menggunakannya sudo dnf install python3-numpy format untuk menginstal BANYAK paket berguna untuk saya. Ini tidak memiliki kerugian karena tidak aman (distro repo maintainer telah memvalidasi paket), tetapi juga memungkinkan Anda untuk menginstal sistem-lebar. Hanya kekurangannya adalah versi distro repo mungkin sedikit tertinggal dari paket di PyPI.


0
2017-07-28 10:29





Tidak, ini benar. Saya tidak dapat memvalidasi klaim ini. Saya selalu menggunakan sudo -H dengan pip. pip hanya dapat merusak file sistem operasi sebanyak apt. Hanya tidak digunakan sudo dengan pip ketika Anda ingin menginstal hanya untuk pengguna itu.


-1
2017-07-25 02:34



Di komputer pribadi Anda, kapan Anda perlu menginstal pip seluruh sistem? Jika Anda seorang sysadmin, mungkin itu cerita yang berbeda. - Benjamin R