Những rủi ro khi chạy 'sudo pip' là gì?


97

Đôi khi tôi gặp phải những nhận xét hoặc phản hồi tuyên bố rõ ràng rằng chạy pipdưới sudolà "sai" hoặc "xấu", nhưng có những trường hợp (bao gồm cả cách tôi thiết lập một loạt công cụ) trong đó nó đơn giản hơn nhiều hoặc thậm chí cần thiết để chạy nó theo cách đó.

Những rủi ro liên quan đến chạy pipdưới là sudogì?


Lưu ý rằng câu hỏi này không giống với câu hỏi này , mặc dù có tiêu đề, không cung cấp thông tin về rủi ro. Đây cũng không phải là câu hỏi về cách tránh sử dụng sudo, mà là về lý do cụ thể tại sao người ta muốn.

Câu trả lời:


103

Khi bạn chạy pipvới sudo, bạn chạy setup.pyvới sudo. Nói cách khác, bạn chạy mã Python tùy ý từ Internet dưới dạng root. Nếu ai đó thiết lập một dự án độc hại trên PyPI và bạn cài đặt nó, bạn sẽ cấp cho kẻ tấn công quyền truy cập root vào máy của bạn. Trước một số bản sửa lỗi gần đây cho pipvà PyPI, kẻ tấn công cũng có thể điều khiển một kẻ tấn công ở giữa để đưa mã của họ xuống khi bạn tải xuống một dự án đáng tin cậy.


2
Mối đe dọa chỉ áp dụng trong piphoặc cho bất kỳ lần chạy nào sau đó của những gì nó đã cài đặt?
orome

2
Nhưng điều đó sẽ đúng cho dù tôi có sudohay không khi tôi pip, phải không? Sau khi nó được cài đặt, tất cả chúng ta đều gặp rủi ro, bất kể nó đến đó bằng cách nào?
orome

2
@raxacoricofallapatorius Điều này đang xâm nhập vào lãnh thổ Tôi không thoải mái trả lời, không phải vì tôi không có bất kỳ ý tưởng nào (tôi có linh cảm và có thể đưa ra lý do) mà vì nổi tiếng là khó dự đoán những thay đổi có vẻ nhỏ như thế này ảnh hưởng đến tổng thể như thế nào Bảo vệ. Ngoài ra, thường cực kỳ đơn giản để tránh không chỉ sudomà còn các vấn đề về quyền này bằng cách cài đặt các gói ở một nơi khác (ví dụ như trong virtualenv). Làm như vậy thậm chí có thể tốt hơn và đáng tin cậy hơn ngay cả khi bỏ qua tất cả các mối quan tâm về bảo mật.

2
@raxacoricofallapatorius Tùy thuộc vào quyền ghi chính xác và bố cục thư mục, tôi sợ rằng phần mềm độc hại phức tạp hơn sẽ ghi đè lên mã khác, đáng tin cậy hơn, chẳng hạn như mã được sử dụng bởi các tiện ích hệ thống thường chạy dưới dạng root.

2
Câu trả lời này thật kỳ lạ. Tất nhiên, khi bạn chạy một cái gì đó với sudobạn, bạn cấp cho nó đặc quyền root; đó là toàn bộ vấn đề sudo, và chắc chắn không cụ thể pip.

19

Bên cạnh những rủi ro bảo mật rõ ràng (mà tôi nghĩ thực tế là thấp khi bạn cài đặt phần mềm mà bạn biết) còn có một lý do khác. Python đi kèm với hệ thống là một phần của hệ thống này và khi bạn muốn quản lý hệ thống, bạn sử dụng các công cụ được chỉ định để bảo trì hệ thống như trình quản lý gói trong trường hợp cài đặt / nâng cấp / gỡ cài đặt phần mềm. Khi bạn bắt đầu sửa đổi phần mềm của hệ thống bằng các công cụ của bên thứ ba (ví dụ này là pip) thì bạn không có gì đảm bảo về trạng thái hệ thống của mình. Tuy nhiên, một lý do khác là sudo có thể mang lại cho bạn những vấn đề mà bạn không có cơ hội hoặc rất ít có cơ hội gặp phải. Xem ví dụ Không khớp giữa sys.executable và sys.version trong Python

Các phân phối viên nhận thức được vấn đề này và cố gắng giảm thiểu nó. Ví dụ Fedora - Làm cho pip sudo an toàn và Debian - gói phân phối thay vì gói trang web .


6

Sử dụng pip theo cách đó có nghĩa là bạn tin tưởng nó ở mức bạn cho phép nó tạo ra bất cứ điều gì cho hệ thống của bạn. Không chỉ pip, mà còn bất kỳ mã nào nó sẽ tải xuống và thực thi từ các nguồn mà bạn có thể không tin tưởng và điều đó có thể độc hại.

Và pip không cần tất cả các đặc quyền đó, chỉ có quyền ghi vào các tệp và thư mục cụ thể. Nếu bạn không thể sử dụng trình quản lý gói của hệ thống và không muốn sử dụng môi trường ảo, bạn có thể tạo một người dùng cụ thể có đặc quyền ghi vào thư mục cài đặt python và sử dụng nó cho pip. Bằng cách đó, bạn kiểm soát tốt hơn những gì pip có thể làm và không làm. Và bạn có thể sử dụng sudo -ucho điều đó!


Vì vậy, tất cả những gì tôi cần làm, ví dụ, cho phép bản thân viết quyền vào site-packages?
orome

1
@raxacoricofallapatorius không chỉ ở đó, như một số gói cũng cài đặt các kịch bản helper (như pipchính nó, IPython, django, pygments, ...), do đó bạn cũng sẽ cần truy cập vào bất cứ thư mục họ cài đặt bản thân vào.
MattDMo

Có và không. Tôi không phải là chuyên gia bảo mật, nhưng tôi nghĩ sẽ tốt hơn nếu người dùng chạy các tập lệnh không có quyền ghi. Vì vậy, tôi đề nghị một người dùng riêng biệt.
Cilyan

@MattDMo: Vâng, điều đó có lý; nhưng những trường hợp đó có thể dễ dàng được phát hiện vì mọi thứ không thành công mà không có quyền thích hợp. Mặc dù vậy, nếu được thực hiện, đó không phải là cách an toàn nhất để đi thì điều tồi tệ nhất có thể xảy ra với toàn bộ hệ thống của tôi là những gì có thể xảy ra khi tôi chạy bất cứ thứ gì, phải không? Sự khác biệt duy nhất là tôi có thể có khả năng làm hỏng cài đặt Python của mình với tư cách là tôi (thay vì phải cố gắng để làm điều đó), phải không?
orome

Làm cách nào để tạo một người dùng như vậy, với mục đích sử dụng duy nhất pip(không cần thay đổi nào khác đối với hệ thống, chẳng hạn như thư mục chính mới, v.v.)? Sau đó, tôi giả sử tôi chỉ thay đổi chủ sở hữu của site-packagesngười dùng đó, đúng không?
orome

1

Điều duy nhất "sai" sudolà nó, tốt, DOes là Super User ala root nghĩa là bạn có thể phá hủy một cài đặt với lệnh sai. Vì PIP là một gói bảo trì cho một chương trình cụ thể, nên dù sao thì bạn cũng cần quyền truy cập như vậy để thực hiện các thay đổi ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.