如何为运行Java应用的Linux用户授予LetsEncrypt pem文件访问权限
问题根因
你执行的权限命令未生效核心有两个原因:
/etc/letsencrypt/live/域名/下的cert.pem、privkey.pem都是软链接,实际文件存储在/etc/letsencrypt/archive/对应域名/目录下,仅修改软链接的权限/属主不会对实际文件生效/etc/letsencrypt/live、/etc/letsencrypt/archive两个上层目录默认仅root用户有访问权限,你的应用运行用户连进入目录的权限都没有,哪怕文件本身权限足够也会提示文件不存在
安全的权限配置方案
全程不要使用777、a+rwx这类全局可写权限,会导致私钥泄露风险,按照以下步骤操作即可(将appuser替换为你实际运行Java应用的用户名,你的域名替换为证书对应域名):
- 创建专用证书访问用户组,将应用用户加入组
sudo groupadd cert-users sudo usermod -aG cert-users appuser
- 配置证书相关目录和文件的组权限
# 给上层目录配置组可进入(执行权限)、可读权限 sudo chmod 750 /etc/letsencrypt/{live,archive} # 将目录属组修改为刚创建的证书组 sudo chgrp -R cert-users /etc/letsencrypt/{live,archive} # 给实际证书文件配置组可读权限 sudo chmod -R 640 /etc/letsencrypt/archive/*/*.pem
- 验证权限是否生效
# 切换到应用运行用户 sudo su - appuser # 执行以下两个命令,无报错即代表权限配置正常 cat /etc/letsencrypt/live/你的域名/cert.pem cat /etc/letsencrypt/live/你的域名/privkey.pem
自动续期兼容配置
Certbot自动续期后会重置证书权限,你可以添加续期钩子自动重设权限:打开/etc/letsencrypt/cli.ini文件,添加如下配置即可:
renew_hook = chgrp -R cert-users /etc/letsencrypt/{live,archive} && chmod -R 750 /etc/letsencrypt/{live,archive} && chmod -R 640 /etc/letsencrypt/archive/*/*.pem
内容的提问来源于stack exchange,提问作者Kihz
相关产品推荐
相关产品推荐

