You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Let's Encrypt证书权限问题导致PostgreSQL无法使用SSL的解决方案咨询

Let's Encrypt证书权限问题导致PostgreSQL无法使用SSL的解决方案咨询

嗨,我来帮你搞定这个不用反复复制证书的权限问题!你遇到的情况很常见——Certbot默认生成的证书和目录都是root:root权限,而PostgreSQL是用postgres用户运行的,自然读不到这些文件。下面给你靠谱的解决办法,重点推荐第一个,一劳永逸:

推荐方案:用ACL+Certbot钩子自动维护权限

这个方法不用改动证书的属主属组,而是通过访问控制列表(ACL)给postgres用户单独开读取权限,并且配置Certbot的钩子脚本,让证书更新后自动同步权限,完全不用手动干预。

1. 先给现有证书目录设置ACL

执行下面的命令,让postgres能读取Certbot的证书存储目录(包括live和archive,因为live里的文件其实是指向archive的软链接):

sudo setfacl -R -m u:postgres:rX /etc/letsencrypt/live/
sudo setfacl -R -m u:postgres:rX /etc/letsencrypt/archive/

解释:rX的意思是对目录赋予读取+执行权限(这样才能进入目录),对文件赋予读取权限,刚好满足PostgreSQL读取证书的需求,又不会给多余权限。

2. 配置Certbot更新钩子,确保证书续期后权限自动生效

因为Certbot续期证书时会覆盖旧文件,ACL不会自动继承,所以需要加个钩子脚本:

  • 创建钩子脚本文件:
sudo nano /etc/letsencrypt/renewal-hooks/post/update-postgres-acl.sh
  • 写入以下内容:
#!/bin/bash
# 给postgres用户更新证书目录的ACL权限
setfacl -R -m u:postgres:rX /etc/letsencrypt/live/
setfacl -R -m u:postgres:rX /etc/letsencrypt/archive/
  • 给脚本加执行权限:
sudo chmod +x /etc/letsencrypt/renewal-hooks/post/update-postgres-acl.sh

这样以后每次Certbot自动或者手动续期证书,都会自动运行这个脚本,把权限同步给postgres,再也不用手动处理了。

3. 最后重启PostgreSQL生效

sudo systemctl restart postgresql

之后就可以测试PostgreSQL的SSL连接是否正常了。

不推荐的方案:直接修改证书属组

你可能会想直接把证书的属组改成postgres,但这么做有个问题——Certbot每次续期都会生成新的证书文件,默认还是root:root权限,你得每次手动改,太麻烦了,所以不推荐。

备注:内容来源于stack exchange,提问作者ciro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:54:49