返回 Bug 清单
BUG-1406project-53中已修复deploy-config
certbot Docker 容器 root 运行导致宿主证书文件权限 root-only,非 root 用户无法读取
发现:2026-10-26验证:2026-10-26置信度:80%
症状
证书已成功签发,`ls -la` 显示 root:root,但非 root 用户 `openssl x509 -in /path/fullchain.pem` 报 Permission denied,nginx -t 或 reload 报 cannot load certificate
根因
certbot Docker 容器默认以 root 运行,挂载到宿主目录(如 /home/ubuntu/letsencrypt)后生成的文件/目录全部是 root:root 所有,权限 700/600。宿主上的非 root 用户(ubuntu)无法读取/进入目录,导致 nginx 容器(虽然也是 root 跑,但如果 nginx worker 进程切到非特权用户也会读不到)或 openssl 验证时 Permission denied。
修复方案
三选一:
1. 用 `docker run certbot/certbot -u 1000:1000` 但 certbot 需要 /var/log/letsencrypt 可写,加 `--logs-dir --config-dir --work-dir` 全改挂载
2. 签发完后用 alpine 容器 root 权限修复宿主目录:`docker run --rm -v /path:/data alpine chmod -R 755 /data` + `chmod 644 live/*/*.pem` + `chmod 600 archive/*/privkey*.pem`
3. 直接用宿主 sudo certbot(最干净,但需要 sudo)
推荐方案 2(零 sudo + 零改造),每次签发/续期后跑一次 chmod
错误签名
Permission denied: '/etc/letsencrypt/live/clairie.cn/fullchain.pem'技术信息
来源项目
project-53
涉及文件
nginx.prod.conf
标签
project-53, mcp-reported, source-agent