auth.json权限必须为600,否则Composer静默忽略;Linux/macOS下权限不符会导致“Authentication required”等错误,修复命令为chmod 600 auth.json或sudo chown -R $USER:$USER ~/.composer && chmod 700 ~/.composer。

auth.json 权限必须是 600,否则 Composer 静默忽略
Composer 不会报错提示 auth.json 权限不对,它只是跳过读取——你看到 Could not fetch 或 Authentication required,八成是这个原因。Linux/macOS 下,auth.json 文件权限必须严格为 600(即仅属主可读写),否则直接失效。
常见错误场景:
- 用
composer config --auth在项目根目录生成了auth.json,但没执行chmod 600 auth.json - CI 构建时挂载的
auth.json文件权限为644,被 Composer 忽略 - 全局配置路径
~/.composer/auth.json所在目录~/.composer/属主是root(比如曾用sudo composer),导致普通用户无法写入或读取
修复命令(复制即用):
chmod 600 auth.json sudo chown -R $USER:$USER ~/.composer chmod 700 ~/.composer
私有仓库 URL 里不能塞 token,凭据必须走 auth.json 或 COMPOSER_AUTH
把 token 写进 composer.json 的 repositories.url 字段,例如 "https://user:token@pkgs.example.com",等于把密码明文提交进 Git 历史。日志、CI 输出、composer show -p 全都可能泄露。
正确做法只有两种:
-
本地开发:用
composer config --global http-basic.pkgs.example.com username password,凭据存进~/.composer/auth.json,再加auth.json到.gitignore -
CI/CD 环境:用
COMPOSER_AUTH环境变量,值为合法 JSON 字符串,如{"http-basic": {"pkgs.example.com": {"username": "deploy", "password": "xxx"}}}
注意:auth.json 中的域名必须和仓库 URL 的 host 部分完全一致——pkgs.example.com:8080 和 pkgs.example.com 是两个不同 key,少端口或多 www. 都不匹配。
镜像源 ≠ 私有包托管,packagist.org 镜像无法拉 internal/auth-sdk
搭个 packagist.org 的全量镜像,对私有包毫无作用。composer require internal/auth-sdk 仍会报 Could not find package,因为 packagist.org 根本不托管这类包,镜像只是缓存公开元数据。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
真正让私有包可用的是三层组合:
-
源声明:在
composer.json的repositories里显式声明私有源类型为"type": "composer",URL 以/结尾 -
认证:凭据由
auth.json或COMPOSER_AUTH提供,且域名精确匹配 -
元数据控制:私有源(如 Satis、Private Packagist)需生成完整
packages.json,Web 服务器返回application/jsonMIME 类型
漏掉任意一层,就会出现“包存在但装不上”的问题——不是网络不通,是 Composer 根本没走到下载那步。
Docker 构建中 vendor 权限失控的真实原因不是 chmod 777
file_put_contents(/app/vendor/autoload.php): Permission denied 这类报错,95% 不是因为权限数字太小,而是 vendor/ 下部分文件属主是 root(比如在 Docker 容器里用 root 用户跑了 composer install),当前非 root 用户无权覆盖。
chmod -R 777 vendor/ 是危险操作:它会让 vendor/bin/ 下的脚本(如 phpunit)被 CI 安全扫描标记为高危,甚至被拦截。
正确做法是归还属主:
sudo chown -R $USER:$USER vendor/ # 如果在 Dockerfile 中,应在 RUN 之前设好 USER,或显式 chown
顺手清理缓存避免干扰:composer clear-cache;Docker 构建阶段建议加 RUN umask 0022 控制新建文件默认权限。

















