Do not run Composer as root/super user!
当用 root(超级管理员)身份运行 Composer,就会提示:
Do not run Composer as root/super user! See https://getcomposer.org/root for details Continue as root/super user [yes]? yes
Composer 安装依赖时可能执行第三方 PHP 代码,root 权限风险非常高
很多 Composer 命令都会执行第三方代码,比如:
composer installcomposer updatecomposer exec
这些代码来自:
composer.json的scripts插件
plugins某些依赖包的安装脚本
这些脚本会 继承当前用户权限。
如果你是 root,那么这些脚本就等于:拥有整台服务器的最高权限
例如理论上可以:
删除系统文件
改
/root/.ssh写 crontab
执行 shell
...
一个真实例子
比如某些 Laravel 包会在安装时自动执行:
{
"scripts": {
"post-install-cmd": [
"php artisan package:discover"
]
}
}
如果依赖包被污染,root 执行就很危险。
当然,如果你完全信任项目,也可以用root执行,但每次要填写 yes 确定也是很烦人
官方推荐的忽略方式就是设置环境变量 COMPOSER_ALLOW_SUPERUSER=1。这样 Composer 就不会每次都弹:
Do not run Composer as root/super user!
临时忽略(当前终端有效)
export COMPOSER_ALLOW_SUPERUSER=1
composer install
执行一次后,这个终端窗口里的 Composer 都不会再提醒。
永久忽略
如果你经常在 root 下运行,可以写进 shell 配置文件。
Bash
echo 'export COMPOSER_ALLOW_SUPERUSER=1' >> ~/.bashrc
source ~/.bashrc
Zsh(Mac)
MacBook,大概率用 zsh,建议用这个:
echo 'export COMPOSER_ALLOW_SUPERUSER=1' >> ~/.zshrc
source ~/.zshrc