如何安全地安装不受信任的软件包?以超级用户或 root 身份运行 Composer 安全吗?#

为什么我看到“不要以 root/超级用户身份运行 Composer”警告/错误?#

始终不建议以 root 身份运行 Composer,原因如下。

从 Composer 2.4.2 开始,以 root 身份运行时,插件会自动禁用,并且没有迹象表明用户是故意这么做的。用户同意可以通过两种方式给出

  • 如果您以交互方式运行,Composer 会提示您是否确定要继续以 root 身份运行。如果您以非交互方式运行,插件将被禁用,除非...
  • 如果您将 COMPOSER_ALLOW_SUPERUSER 环境变量设置为 1,这也表明您有意以 root 身份运行 Composer 并接受这样做带来的风险。

以超级用户或 root 身份运行 Composer 安全吗?#

某些 Composer 命令(包括 execinstallupdate)允许第三方代码在您的系统上执行。这来自于它的“插件”和“脚本”功能。插件和脚本对运行 Composer 的用户帐户拥有完全访问权限。因此,强烈建议 **避免以超级用户/root 身份运行 Composer**。所有命令还会分发事件,这些事件可以被插件捕获,因此除非明确禁用,否则已安装的插件将被 **每个** Composer 命令加载/执行。

您可以在软件包安装或更新期间禁用插件和脚本,使用以下语法,这样只有 Composer 的代码(而不是任何第三方代码)会执行

php composer.phar install --no-plugins --no-scripts ...
php composer.phar update --no-plugins --no-scripts ...

根据操作系统的不同,我们已经看到了使用精心制作的 composer.json 触发仓库中文件执行的案例。因此,一般来说,如果您确实想安装不受信任的依赖项,您应该将它们完全沙盒化在一个容器或等效环境中。

另请注意,exec 命令将始终以运行 composer 的用户的身份运行第三方代码。

有关如何禁用警告的更多信息,请参阅 COMPOSER_ALLOW_SUPERUSER 环境变量。

在 Docker/Podman 容器内运行 Composer#

Composer 会尽力尝试检测它是在容器内运行,如果是,则会允许以 root 身份运行,而不会出现任何其他问题。但是,如果该检测失败,您将看到警告,并且插件将被禁用,除非您设置 COMPOSER_ALLOW_SUPERUSER 环境变量。

发现错别字?文档中有错误?fork 并编辑它!