2014-01-11 72 views
5

面對對惡意軟件包或安裝腳本的安全問題,我很困惑如何最好地使用pip。我沒有太大的安全專家,所以我可能只是混淆(包涵),但似乎有4個,可能重疊,方法:什麼是最安全的方式來使用`pip`來維護Python包?

(1)使用sudo pip一切

這就是我現在要做的事。我通常不需要virtualenvs,就像我的所有軟件包都適用於所有工具一樣方便。我也沒有安裝大量的實驗軟件包,它們幾乎與衆所周知和廣泛使用的軟件包(matplotlibsix等)緊密相關。

我收集這可能是一個冒險的方法,雖然因爲安裝過程有su特權和could potentially do anything;然而,它具有保護site-packages目錄免受後續惡作劇安裝後以非su身份運行的任何事件(不僅僅是包)的優勢。

這種方法也不能完全避免,因爲有些包(pip本身)需要它來引導任何Python安裝。

(2)創建pip用戶,並給它的site-packages

seem to have the advantage限制什麼pip可以做的所有權:所有可以做的就是安裝到site-packages。但是我不確定副作用,或者它甚至會起作用(例如,當pip需要將東西放在其他位置時)。一個更現實的變體是這樣設置,當它工作時使用pip作爲「pip-user」,當它不工作時使用su

(3)給自己的site-packages

我收集this is a very had idea所有權,但我不知道爲什麼相當。這意味着我運行的任何代碼都可以篡改site-packages;但這意味着惡意安裝腳本只會損壞我自己可能會損壞自己的東西。

(4)「使用的virtualenv」

這一建議自帶了很多,但我看不出它如何幫助。這對我來說似乎沒有什麼不同,因爲它創建了我自己的site-packages

哪一個,如果這些方法或方法的組合中的任何一個最適合確保pip不會導致我的系統暴露?我的關注主要集中在整個系統上,其次我的Python安裝在site-packages(如果需要,我可以隨時重建)。


我有一個問題,那就是不知道如何衡量風險。一個示例方法似乎對我的有限理解是有意義的,它只是簡單地做(1),並且對於任何我擔心的包使用virtualenv(4)可能會損壞我的site-packages。我安裝的任何東西仍然會損壞任何我可以訪問的東西,但這似乎是不可避免的,至少我無法訪問的東西是安全的(除了安裝過程本身)。但是我很難評估這種保護措施是否值得它創造的風險。

+0

如果你認爲3和4是完全相同的,我建議你閱讀更多什麼是virtualenv。從doc(http://docs.python-guide.org/en/latest/dev/virtualenvs/):虛擬環境,簡而言之,它是一個Python的獨立工作副本,它允許您在沒有特定項目的情況下工作擔心影響其他項目。 –

+0

@AndreadeMarco:是的,但是如果安裝腳本是惡意的,它會在任何地方造成破壞,贏得它?如果'site-packages'中安裝了惡意軟件,它與任何惡意軟件安裝在任何地方都沒有什麼不同 - 它會隨我一起運行,並且可以做任何我能做的事情。 – orome

+0

關鍵的區別是,virtualenv是「一個**孤立的** python工作副本」 – yuvi

回答

4

你可能想看看使用virtualenv。引述the docs

VIRTUALENV是創建孤立的Python環境的工具。被解決的基本問題 是依賴關係和版本之一,並且間接地具有 權限。

Virtualenv將創建一個文件夾與孤立副本的蟒蛇,孤立點和孤立的網站包。你以爲這是相同的選項3,因爲你帶你按面值連接該意見並沒有讀進去:

如果你給自己寫權限系統站點包, 您冒着在您之下運行的任何程序(不一定是 python程序)可以將惡意代碼注入到系統 site-packages並獲得root權限。

的問題是不是能夠訪問站點包(你必須有站點包的privilages到能夠做任何事情)。問題是有權訪問系統站點包。虛擬環境的站點包不會將惡意代碼的根權限暴露給整個系統正在使用的惡意代碼。

但是,我發現在使用sudo pip這個衆所周知和熟悉的軟件包方面沒有任何問題。在一天結束時,就像安裝任何其他程序,甚至是非python。如果你去它的網站,它看起來很誠實,而且你信任它,沒有理由不申請。

此外,點是非常安全的 - 它使用https爲pypi,如果你--allow-external它會從第三方下載包,但將still keep checksums on pypi並比較它們。對於沒有校驗和的第三方,您需要明確呼叫--allow-unverified,這是唯一被認爲是不安全的選項。

作爲個人筆記,我可以補充一點,大多數情況下我使用sudo pip,但作爲一個WEB開發者virtualenv是一種日常的事情,我也可以推薦使用它(尤其是如果你看到任何粗略的東西,但你仍然想嘗試一下)。

+0

具體而言,與選項(3)有何區別?這是我不清楚的。 – orome

+0

@raxacoricofallapatorius我編輯了答案 – yuvi

+0

因此,當我在系統'site-packages'(例如,在OSX'/ Library/Python/XX/site-packages /'中'pip',即使我擁有該目錄,惡意安裝腳本可以獲得root權限嗎?當我在虛擬環境中使用pip時,情況並非如此 – orome

相關問題