- 为什么我看到“不要以 root/超级用户身份运行 Composer”警告/错误?
- 以超级用户或 root 身份运行 Composer 安全吗?
- 在 Docker/Podman 容器内运行 Composer
如何安全地安装不受信任的软件包?以超级用户或 root 身份运行 Composer 安全吗?#
为什么我看到“不要以 root/超级用户身份运行 Composer”警告/错误?#
始终不建议以 root 身份运行 Composer,原因如下。
从 Composer 2.4.2 开始,以 root 身份运行时,插件会自动禁用,并且没有迹象表明用户是故意这么做的。用户同意可以通过两种方式给出
- 如果您以交互方式运行,Composer 会提示您是否确定要继续以 root 身份运行。如果您以非交互方式运行,插件将被禁用,除非...
- 如果您将 COMPOSER_ALLOW_SUPERUSER 环境变量设置为
1
,这也表明您有意以 root 身份运行 Composer 并接受这样做带来的风险。
以超级用户或 root 身份运行 Composer 安全吗?#
某些 Composer 命令(包括 exec
、install
和 update
)允许第三方代码在您的系统上执行。这来自于它的“插件”和“脚本”功能。插件和脚本对运行 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 并编辑它!