sudo
运行pip
时,您会使用sudo
运行setup.py
。换句话说,您会以root权限从互联网运行任意Python代码。如果有人在PyPI上发布了恶意项目并且您安装了它,则会为攻击者提供root访问权限。在一些最近的pip
和PyPI修复之前,攻击者还可以运行中间人攻击,以在您下载可信赖的项目时注入他们的代码。pip
期间还是适用于安装后的任何后续运行? - oromesudo
,还有这些权限问题。即使忽略所有安全问题,这样做可能会更好、更可靠。 - user395760sudo
来运行某些东西时,你给予它 root 权限;这就是 sudo
的全部意义,并且肯定不是特定于 pip
的。 - user4953825pip
)修改系统软件时,您无法保证您的系统状态。另一个原因是sudo
可能会给您带来问题,否则您将没有机会或者机会非常小。例如,请参见Python中sys.executable和sys.version之间的不匹配
发行版意识到了这个问题,并试图缓解它。例如,Fedora - 使sudo pip安全和Debian - 使用dist-packages而不是site-packages。sudo -u
来实现这一点!site-packages
拥有写入权限? - oromepip
本身、IPython、django、pygments 等),因此您还需要访问它们自己安装的目录。 - MattDMopip
(不需要对系统进行其他更改,例如新的主目录等)?之后,我假设只需将 site-packages
的所有者更改为该用户,是吗? - oromegroupadd python; useradd -M pipuser -g python -d /tmp; passwd -l pipuser
然后 chgrp -R python site-packages; chmod -R g+w site-packages
最后 sudo --user pipuser pip install ...
。我不了解Mac系统。 - Cilyan有一些其他用户没有提到但仍然很重要的原因。
pip
软件包缺乏代码审查第一个原因是PyPI软件包(可以通过pip
安装的软件包)不像其他软件包管理器那样受到监控或代码审查。已经发生了许多恶意PyPI软件包被发布,然后被数千个用户下载,然后才被删除。如果您作为root下载其中一个恶意软件包,那么您实际上是在给恶意软件访问整个系统的权限。虽然这不是每天都会发生的事情,但它仍然是需要注意的攻击向量。您可以通过阅读最小权限概念来了解更多信息。
pip
会干扰系统级软件包sudo
或作为root用户运行pip
会干扰系统级别的包,可能会破坏系统的功能。Piotr Dobrogost's answer简要提到了软件包管理器对系统状态的影响,但我认为更深入的解释将有助于人们更好地理解为什么这种做法可能会有害。cryptography
软件包来散列密码并允许用户登录。如果同一个软件包的版本1.0.1引入了一个系统没有考虑到的回归,并且您通过运行sudo pip3 install -U cryptography
升级全局cryptography
软件包,您意外地破坏了用户通过系统依赖项进行登录的能力。sudo
运行pip
?我没有看到任何人回答您帖子中的最后一个问题,因此我会在这里回答。有一些原因会让某些人想要使用sudo
运行pip
,但这种情况非常罕见。
人们之所以想用这种方式运行pip
的第一个原因是因为懒惰,这是一种快速强制系统安装所需软件包的方法。假设有人需要安装coloredlogs
软件包,因为他们绝对必须立即将其日志变成彩色,并且他们不知道如何保持系统安全。对于缺乏经验的用户来说,通常更容易在每个命令前加上sudo
,因为“它就能工作”,而不是学习为什么第一次没有成功。
sudo
唯一的问题是它以超级用户(root)身份执行命令,这意味着你可能会因为错误的命令而破坏安装程序。而由于PIP是特定程序的包维护工具,你需要这样的访问权限来进行更改...