返回 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