Apa risiko menjalankan 'sudo pip'?

97

Kadang-kadang saya menemukan komentar atau tanggapan yang menyatakan dengan tegas bahwa berjalan di pipbawah sudoadalah "salah" atau "buruk", tetapi ada beberapa kasus (termasuk cara saya menyiapkan banyak alat) yang jauh lebih sederhana, atau bahkan perlu untuk jalankan seperti itu.

Apa risiko yang terkait dengan berjalan di pipbawah sudo?


Perhatikan bahwa pertanyaan ini tidak sama dengan pertanyaan ini , yang, terlepas dari judulnya, tidak memberikan informasi tentang risiko. Ini juga bukan pertanyaan tentang bagaimana menghindari penggunaan sudo, tetapi tentang secara khusus mengapa seseorang menginginkannya.

orome
sumber

Jawaban:

103

Ketika Anda berlari pipdengan sudo, Anda berlari setup.pydengan sudo. Dengan kata lain, Anda menjalankan kode Python arbitrer dari Internet sebagai root. Jika seseorang membuat proyek berbahaya di PyPI dan Anda menginstalnya, Anda memberikan akses root kepada penyerang ke mesin Anda. Sebelum beberapa perbaikan baru-baru ini pipdan PyPI, penyerang juga dapat menjalankan man in the middle attack untuk memasukkan kode mereka saat Anda mendownload proyek yang dapat dipercaya.


sumber
2
Apakah ancaman hanya berlaku selama pipatau untuk menjalankan selanjutnya dari apa yang diinstal?
orome
2
Tapi itu akan benar apakah saya sudoatau tidak ketika saya pip, kan? Setelah dipasang, kita semua berisiko, tidak peduli bagaimana itu bisa ada di sana?
orome
2
@raxacoricofallapatorius Ini masuk ke wilayah yang saya tidak nyaman untuk menjawab, bukan karena saya tidak tahu (saya punya firasat dan dapat memberikan alasan untuk itu) tetapi karena sangat sulit untuk memprediksi bagaimana perubahan yang tampaknya kecil seperti ini mempengaruhi secara keseluruhan keamanan. Selain itu, biasanya sangat mudah untuk menghindari tidak hanya sudotetapi juga masalah izin ini dengan menginstal paket di tempat lain (misalnya di virtualenv). Melakukannya bahkan mungkin lebih baik dan lebih dapat diandalkan meskipun mengabaikan semua masalah keamanan.
2
@raxacoricofallapatorius Bergantung pada izin penulisan dan tata letak direktori yang tepat, saya khawatir malware yang lebih canggih akan menimpa kode lain yang lebih tepercaya, seperti kode yang digunakan oleh utilitas sistem yang secara rutin dijalankan sebagai root.
2
Jawaban ini aneh. Tentu saja, ketika Anda menjalankan sesuatu dengan sudoAnda berikan hak akses root; itulah inti dari sudo, dan tentu saja tidak khusus untuk pip.
19

Selain risiko keamanan yang jelas (yang menurut saya sebenarnya rendah ketika Anda menginstal perangkat lunak lho), ada jawaban lain yang ada alasan lain. Python yang disertakan dengan sistem adalah bagian dari sistem ini dan ketika Anda ingin mengelola sistem, Anda menggunakan alat yang dirancang untuk pemeliharaan sistem seperti manajer paket jika menginstal / memutakhirkan / mencopot pemasangan perangkat lunak. Ketika Anda mulai memodifikasi perangkat lunak sistem dengan alat pihak ketiga (pip dalam contoh ini) maka Anda tidak memiliki jaminan tentang status sistem Anda. Namun alasan lain adalah bahwa sudo dapat membawa masalah yang tidak akan Anda miliki atau miliki peluang yang sangat kecil. Lihat misalnya ketidakcocokan antara sys.executable dan sys.version di Python

Distro menyadari masalah ini dan mencoba menguranginya. Misalnya Fedora - Membuat sudo pip aman dan Debian - dist-packages alih-alih paket situs .

Piotr Dobrogost
sumber
6

Menggunakan pip seperti itu berarti Anda mempercayainya ke tingkat yang Anda izinkan untuk membuat apa pun ke sistem Anda. Tidak hanya pip, tetapi juga kode apa pun yang akan diunduh dan dijalankan dari sumber yang mungkin tidak Anda percayai dan itu bisa berbahaya.

Dan pip tidak membutuhkan semua hak istimewa itu, hanya akses tulis ke file dan direktori tertentu. Jika Anda tidak dapat menggunakan manajer paket sistem Anda dan tidak ingin menggunakan cara lingkungan virtual, Anda dapat membuat pengguna tertentu yang memiliki hak istimewa menulis ke direktori instalasi python dan menggunakannya untuk pip. Dengan cara itu Anda lebih mengontrol apa yang dapat dilakukan dan tidak dilakukan pip. Dan Anda bisa menggunakannya sudo -uuntuk itu!

Cilyan
sumber
Jadi yang perlu saya lakukan adalah, misalnya, mengizinkan diri saya menulis izin site-packages?
orome
1
@raxacoricofallapatorius tidak hanya di sana, karena beberapa paket juga menginstal skrip pembantu (seperti pipitu sendiri, IPython, django, pygments, ...) jadi Anda juga memerlukan akses ke direktori mana pun tempat mereka menginstal sendiri.
MattDMo
Iya dan tidak. Saya bukan ahli keamanan, tapi saya pikir lebih baik jika pengguna yang menjalankan skrip tidak memiliki izin menulis. Oleh karena itu saya menyarankan pengguna yang agak terpisah.
Cilyan
@MattDMo: Ya, itu masuk akal; tetapi kasus tersebut mungkin mudah ditemukan karena banyak hal gagal tanpa izin yang sesuai. Jika dilakukan, bukankah itu cara teraman untuk pergi maka hal terburuk yang dapat terjadi pada sistem saya secara keseluruhan adalah apa yang dapat terjadi ketika saya menjalankan apa pun, bukan? Satu-satunya perbedaan adalah bahwa saya berpotensi merusak instalasi Python saya sebagai saya (daripada harus su untuk melakukannya), bukan?
orome
Bagaimana cara membuat pengguna seperti itu, hanya untuk tujuan penggunaan pip(tidak ada perubahan lain pada sistem, seperti direktori home baru, dll. Perlu)? Setelah itu saya menganggap saya baru saja mengubah pemilik site-packagesmenjadi pengguna itu, bukan?
orome
1

Satu-satunya hal yang "salah" sudoadalah bahwa ia BERLAKU sebagai Pengguna Super ala root yang berarti Anda berpotensi merusak instalasi dengan perintah yang salah. Karena PIP adalah pemeliharaan paket untuk program tertentu, Anda akan memerlukan akses tersebut untuk membuat perubahan ...

EkriirkE
sumber