
Composer 明确建议不要用 root(或 Administrator)身份运行,核心原因在于权限失控和安全风险——它会把本该由普通用户控制的依赖安装、脚本执行、文件写入等操作,直接提升到系统最高权限级别。
依赖包可能执行任意代码
Composer 安装时会运行 post-install-cmd、pre-autoload-dump 等脚本,这些脚本来自第三方包的 composer.json。一旦以 root 运行,这些脚本就能:
- 修改系统级配置文件(如 /etc/hosts、/etc/cron.d)
- 下载并执行远程二进制文件,写入 /usr/local/bin 等 PATH 路径
- 启动后台服务、监听端口、甚至反向连接攻击者服务器
vendor 目录权限失控
用 root 安装后,整个 vendor/ 目录及其所有文件默认属主为 root,导致后续普通用户无法:
- 更新或删除包(composer update 报 Permission denied)
- 运行本地开发命令(如 php artisan 或 bin/console 因写入缓存失败而崩溃)
- 配合 Git 协作(不同用户对 vendor 文件权限不一致,引发混乱)
全局安装(composer global)更危险
root 下执行 composer global require 会把可执行脚本安装到 /root/.composer/vendor/bin/,并可能软链到 /usr/local/bin/。这意味着:
正确做法:始终用当前项目用户运行
确保你以普通用户身份登录,且项目目录归属该用户:
- 检查归属:ls -ld . 应显示你的用户名,不是 root
- 修复权限(如误用 root 后):sudo chown -R $USER:$USER /path/to/project
- 全局工具改用用户级路径:export PATH="$HOME/.composer/vendor/bin:$PATH",避免动系统目录
- CI/CD 环境中也禁用 root,用专用非特权用户运行 composer










