运行“sudo pip”有什么风险?

偶尔我会遇到意见或回应 ,强调在sudo下运行pip是“错误的”或“不好的”,但有些情况(包括我设置了一堆工具的方式)要么简单得多,要么甚至更简单必须以这种方式运行。

sudo下运行pip有什么风险?


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

当你用sudo运行pip时,你用sudo运行setup.py 。 换句话说,你以root身份运行任意的Python代码。 如果有人在PyPI上安装了一个恶意项目,并且安装了该项目,则攻击者可以访问您的计算机。 在最近修复一些pip和PyPI之前,攻击者也可以在中间人攻击中运行一个人,在下载一个值得信赖的项目时注入他们的代码。

除了明显的安全风险(我认为安装软件的时候事实上很低),还有另一个原因。 系统附带的Python是这个系统的一部分,当你想要pipe理系统的时候,你可以使用指定用于系统维护的工具,例如安装/升级/卸载软件的软件包pipe理器。 当你开始用第三方工具修改系统软件时(在这个例子中是点),那么你不能保证你的系统状态。 还有一个原因是,sudo会给你带来问题,你不会有机会,或者有一个很小的机会。 例如,请参阅Python中的sys.executable和sys.version之间的不匹配

Distros知道这个问题,并试图缓解它。 例如Fedora – 使sudo pip安全 ,使用Debian – dist-packages而不是site-packages 。

使用pip这种方式意味着你相信它到你允许它做任何事情到你的系统的水平。 不仅是点子,而且它还会下载和执行任何代码,这些代码可能是不可信的,而且可能是恶意的。

而且pip不需要所有的权限,只需要对特定文件和目录的写权限。 如果你不能使用你系统的软件包pipe理器,也不想去虚拟环境的方式,你可以创build一个具有写权限的特定用户到python安装目录,并用它作为pip。 这样,你可以更好地控制可以做什么而不做什么。 你可以使用sudo -u

sudo唯一的“错误”就是它是超级用户ala root,意思是你可能用错误的命令破坏安装。 由于PIP是特定程序的软件包维护,因此无论如何都需要此类访问才能进行更改。