使用'pip'维护Python包最安全的方法是什么?

使用'pip'维护Python包最安全的方法是什么?,python,security,virtualenv,pip,Python,Security,Virtualenv,Pip,面对恶意软件包或安装脚本的安全问题,我很困惑如何最好地使用pip。我不是什么安全专家,所以我可能会感到困惑(请容忍),但似乎有4种方法,可能是重叠的: (1)使用sudo-pip处理所有事情 这就是我现在做事的方式。我通常不需要virtualenvs,并且喜欢让我的所有包都能为我的所有工具工作的便利性。我也没有安装很多实验性的软件包,基本上都是使用广泛的知名软件包(matplotlib,six,等等) 我认为这可能是一种危险的方法,因为安装过程具有su特权,并且;但是,它的优点是在安装后保护站点

面对恶意软件包或安装脚本的安全问题,我很困惑如何最好地使用
pip
。我不是什么安全专家,所以我可能会感到困惑(请容忍),但似乎有4种方法,可能是重叠的:

(1)使用
sudo-pip
处理所有事情

这就是我现在做事的方式。我通常不需要virtualenvs,并且喜欢让我的所有包都能为我的所有工具工作的便利性。我也没有安装很多实验性的软件包,基本上都是使用广泛的知名软件包(
matplotlib
six
,等等)

我认为这可能是一种危险的方法,因为安装过程具有
su
特权,并且;但是,它的优点是在安装后保护
站点软件包
目录不受任何以非
su
运行的东西(不仅仅是软件包)的破坏

这种方法也不能完全避免,因为一些包(
pip
本身)需要它来引导任何Python安装

(2)创建一个
pip
用户,并授予其
网站包的所有权

这将限制
pip
的功能:它所能做的就是安装到
站点包中。但我不确定副作用,或者它是否会起作用(例如,当
pip
需要将东西放在其他位置时)。一个更现实的变体是这样设置,当它工作时使用
pip
作为“pip用户”,当它不工作时使用
su

(3)让自己拥有
网站包的所有权

我想是的,但我不太清楚为什么。这意味着我运行的任何代码都可以篡改
站点包
;但这意味着恶意安装脚本只会破坏我自己也能破坏的东西

(4)“使用虚拟电视”

这个建议提了很多,但我看不出有什么帮助。对我来说,它与3没有什么不同,因为它创建了一个我自己的
站点包

如果这些方法中有任何一种或多种方法的组合,那么哪种方法最适合确保
pip
不会导致暴露我的系统?我关心的主要是我的整个系统,其次是我在
站点包中安装的Python(如果需要,我可以随时重建)



我的部分问题是,a不知道如何权衡风险。在我有限的理解中,一个示例方法似乎是有意义的,就是在大多数情况下只需执行(1),并对我担心可能损坏我的
站点包的任何包使用virtualenv(4)。我安装的任何东西仍然会损坏我可以访问的任何东西,但这似乎是不可避免的,至少我无法访问的东西是安全的(安装过程本身除外)。但是我很难评估它提供的保护是否值得它所带来的风险。

您可能想看看使用virtualenv。引述:

Virtualenv是一种创建孤立Python环境的工具。基本问题 被寻址是依赖项和版本之一,并且是间接的 权限

Virtualenv将创建一个包含python的独立副本、独立pip和独立站点包的文件夹。你认为这与选项3是一样的,因为你是在接受你在表面上链接的建议,而不是阅读它:

如果您授予自己对系统站点包的写入权限, 你正在冒着任何在你下面运行的程序(不一定)的风险 python程序)可以向系统中注入恶意代码 站点包并获得根权限

问题不在于访问站点包(您必须拥有站点包的特权才能执行任何操作)。问题在于访问系统站点包的权限。虚拟环境的站点包不会向恶意代码公开根权限,这与整个系统正在使用的权限相同

但是,我认为对众所周知和熟悉的软件包使用
sudopip
没有什么错。最终,这就像安装任何其他程序一样,即使是非python程序。如果你去它的网站,它看起来诚实,你信任它,没有理由不去sudo

此外,pip是非常安全的——它使用https进行pypi,如果您
--允许外部
,它将从第三方下载软件包,但将下载并比较它们。对于没有校验和的第三方,您需要显式调用
--allow unverified
,这是唯一被认为不安全的选项


作为个人提示,我可以补充一点,我大多数时候都使用sudo-pip,但作为一名WEB开发人员,virtualenv是一种日常事务,我也可以建议您使用它(特别是如果您看到任何粗略的内容,但仍想尝试一下的话)。

如果您认为3和4是完全相同的,我建议您阅读更多关于virtualenv的内容。从文档():简单地说,虚拟环境是Python的一个独立工作副本,它允许您在特定项目上工作,而不必担心影响其他项目。@AndreadeMarco:是的,但是如果安装脚本是恶意的,它会在任何地方造成破坏,不是吗?如果在
站点包中安装了恶意软件,那么它与任何地方安装的恶意软件没有什么区别——它将以我的身份运行,并造成我所能造成的任何损害。关键区别在于virtualenv是“python的独立工作副本”可能我忽略了什么对你来说是恶意的。@yuvi:在什么意义上,virtualenv会与我在前面的评论中描述的恶意行为“隔离”(在安装过程中或之后)?如何,具体