运行“sudo pip”有啥风险?

Posted

技术标签:

【中文标题】运行“sudo pip”有啥风险?【英文标题】:What are the risks of running 'sudo pip'?运行“sudo pip”有什么风险? 【发布时间】:2014-01-30 02:34:49 【问题描述】:

偶尔我会遇到comments or responses,它强调在sudo 下运行pip 是“错误”或“坏”,但在某些情况下(包括我设置了一堆工具的方式)它要么更简单,甚至有必要以这种方式运行它。

sudo 下运行pip 有哪些风险?


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

【问题讨论】:

这能回答你的问题吗? Is it acceptable and safe to run pip install under sudo? 【参考方案1】:

除了明显的安全风险(我认为当您安装您知道的软件时实际上风险很低)带来其他答案之外,还有另一个原因。系统附带的 Python 是该系统的一部分,当您想要管理系统时,您可以使用指定用于系统维护的工具,例如包管理器,以防安装/升级/卸载软件。当您开始使用第三方工具(在这种情况下为 pip)修改系统软件时,您无法保证系统的状态。另一个原因是 sudo 可能会给您带来您没有机会或很少有机会遇到的问题。参见例如Mismatch between sys.executable and sys.version in Python

发行版已意识到此问题并尝试缓解它。例如 Fedora – Making sudo pip safe 和 Debian – dist-packages instead of site-packages。

【讨论】:

【参考方案2】:

以这种方式使用 pip 意味着您信任它到您允许它为您的系统做任何事情的程度。不仅是 pip,还有它会从您可能不信任且可能是恶意的来源下载和执行的任何代码。

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

【讨论】:

所以我需要做的就是,例如,允许自己写权限到site-packages? @raxacoricofallapatorius 不只是在那里,因为一些软件包还安装了帮助脚本(如 pip 本身、IPython、django、pygments ......)所以你还需要访问它们安装的任何目录自己进去。 是和不是。我不是安全专家,但我认为运行脚本的用户没有写权限会更好。因此,我建议使用单独的用户。 @MattDMo:是的,这是有道理的;但是这些情况很容易被发现,因为没有适当的权限就失败了。如果这样做了,那不是最安全的方法吗?那么我的系统作为一个整体可能发生的最坏情况就是当我运行任何东西时会发生什么,对吧?唯一的区别是我可能会像我一样破坏我的 Python 安装(而不是必须是 su 才能做到),对吧? 我如何创建这样的用户,仅用于使用pip(不需要对系统进行其他更改,例如新的主目录等)?之后我假设我只是将site-packages 的所有者更改为该用户,对吗?【参考方案3】:

当你运行pipsudo 时,你运行setup.pysudo。换句话说,您以 root 身份从 Internet 运行任意 Python 代码。如果有人在 PyPI 上放置了一个恶意项目并且你安装了它,你就给了攻击者对你机器的 root 访问权限。在最近对 pip 和 PyPI 进行修复之前,攻击者还可以在您下载可信项目时运行中间人攻击以注入他们的代码。

【讨论】:

威胁是否仅在pip 期间或安装的任何后续运行期间适用? 但是无论我sudo 还是pip 时都是这样,对吧?一旦安装完毕,无论它是如何到达那里的,我们都会面临风险? @raxacoricofallapatorius 这进入了我不愿意回答的领域,不是因为我没有任何想法(我有预感并且可以给出原因),而是因为众所周知很难预测像这些看似很小的变化如何影响整体安全性。此外,通过将软件包安装在其他地方(例如在 virtualenv 中)来避免sudo 和这些权限问题通常非常简单。即使忽略所有安全问题,这样做也可能会更好、更可靠。 @raxacoricofallapatorius 根据具体的写入权限和目录布局,我担心更复杂的恶意软件会覆盖其他更受信任的代码,例如系统实用程序使用的代码通常以 root 身份运行。 这个答案很奇怪。当然,当你使用sudo 运行某些东西时,你会给它root 权限;这就是sudo 的全部意义,当然不是针对pip【参考方案4】:

sudo 唯一的“错误”是它确实是超级用户 ala root,这意味着您可能会使用错误的命令破坏安装。由于 PIP 是针对特定程序的软件包维护,因此您无论如何都需要这种访问权限才能进行更改...

【讨论】:

以上是关于运行“sudo pip”有啥风险?的主要内容,如果未能解决你的问题,请参考以下文章

linux(乌班图)下执行pip没有问题,执行sudo pip报错的问题

mac下 sudo pip install scikit-image 报错 用sudo pip install scikit-image --user -U

Ubuntu 18.04使用sudo pip3报错

ubuntu sudo: pip:找不到命令

sudo: pip: command not found in CentOS

conda创建的环境中使用sudo pip的问题