我偶尔会遇到一些评论或响应,这些评论或响应强调在sudo
下运行pip
是“错误的”或“糟糕的”,但在某些情况下(包括我设置了一系列工具的方式),这样运行会简单得多,甚至有必要这样运行。
在sudo
下运行pip
有哪些风险?
请注意,这个问题和这个问题不是同一个问题,尽管标题是这样,但没有提供任何关于风险的信息。这也不是关于如何避免使用sudo
的问题,而是关于为什么要这样做的问题。
当您使用sudo
运行pip
时,您将使用sudo
运行setup.py
。换句话说,您以root用户身份从Internet运行任意Python代码。如果有人在PyPI上发布恶意项目,而您安装了它,那么您将授予攻击者对您的计算机的根访问权限。在最近对pip
和PyPI进行了一些修复之前,攻击者还可以运行中间人攻击,以便在您下载值得信任的项目时注入他们的代码。
除了明显的安全风险(我认为当你安装你知道的软件时,这实际上是很低的)带来其他答案之外,还有另一个原因。系统附带的Python是这个系统的一部分,当您想要管理系统时,您可以使用指定用于系统维护的工具,例如安装/升级/卸载软件时的package manager。当你开始用第三方工具修改系统的软件(在这个例子中是pip),那么你就不能保证你的系统的状态。还有一个原因是,sudo会给你带来一些问题,否则你可能没有机会或者很小的机会会遇到这些问题。例如,请参见Python中sys.executable和sys.version之间的不匹配
发行版意识到了这个问题,并试图减轻它。例如,Fedora使sudo pip安全,debian-dist-packages而不是site-packages。
以这种方式使用pip意味着您对它的信任程度达到您允许它对您的系统进行任何操作的程度。不仅是pip,而且它将从您可能不信任的来源下载和执行的任何代码都可能是恶意的。
pip不需要所有这些权限,只需要对特定文件和目录的写访问权限。如果您不能使用系统的包管理器,并且不想使用虚拟环境的方式,您可以创建一个特定的用户,该用户具有对python安装目录的写入权限,并将其用于PIP。这样你最好控制好皮普能做什么,不能做什么。您可以使用sudo-u
来实现这一点!