关于python:运行’sudo pip’有什么风险?

What are the risks of running 'sudo pip'?

有时我会遇到一些强调在sudo下运行pip是"错误的"或"不好的"的评论或回答,但有些情况(包括我设置了一系列工具的方式)下运行EDOCX1要简单得多,甚至需要这样运行。

sudo下运行pip有哪些风险?

请注意,这个问题与这个问题不一样,尽管它的标题没有提供关于风险的信息。这也不是一个关于如何避免使用sudo的问题,而是一个关于为什么要使用sudo的问题。


当你用sudo运行pip时,你用sudo运行setup.py。换句话说,您从Internet以根用户身份运行任意的python代码。如果有人在pypi上放置了一个恶意项目,并且您安装了它,那么您就给了攻击者对您的计算机的根访问权。在最近对pip和pypi进行一些修复之前,攻击者还可以运行中间人攻击,在您下载值得信赖的项目时注入他们的代码。


除了明显的安全风险(我认为当你安装你知道的软件时,这实际上是很低的)带来了其他的答案之外,还有另一个原因。系统附带的python是这个系统的一部分,当您想要管理系统时,您可以使用为系统维护而指定的工具,比如安装/升级/卸载软件时的package manager。当您开始使用第三方工具(本例中的PIP)修改系统的软件时,您就不能保证系统的状态。另一个原因是,sudo会给你带来一些你没有机会或者很小的机会去解决的问题。例如,请参见python中sys.executable和sys.version之间的不匹配

发行商意识到这个问题,并试图缓解它。例如,fedora—使sudo-pip安全,debian—dist包而不是站点包。


以这种方式使用pip意味着您将它信任到您允许它对您的系统做任何事情的级别。不仅是pip,而且它将从您可能不信任的源下载和执行的任何代码,这可能是恶意的。

PIP不需要所有的特权,只需要对特定文件和目录的写访问。如果您不能使用系统的包管理器,并且不想采用虚拟环境的方式,您可以创建一个对python安装目录具有写权限的特定用户,并将其用于pip。这样你就可以更好地控制PIP可以做什么,不可以做什么。你可以用sudo -u来做这个!


sudo唯一"错误"的地方是它作为超级用户ala-root的作用,这意味着您可能会用错误的命令破坏安装。由于PIP是一个特定程序的包维护,您无论如何都需要这样的访问来进行更改…