授予 systemd 服务对受保护文件夹中的证书的访问权限

授予 systemd 服务对受保护文件夹中的证书的访问权限

我使用 certbot 生成证书文件。证书文件是创建于/etc/letsencrypt/live/...该实时文件夹由 certbot 创建,只有管理员可以访问。

以前,我会将这些文件复制到应用程序的文件夹中,这样就没问题了。但复制证书文件感觉不对。

因此,我想知道是否有可能将文件保留在原处。我尝试将其付诸实践,但我很难让我的应用程序访问该文件夹。我调整路径没有问题,但它没有访问该文件夹的权限。

我想知道如何让我的应用程序访问这些文件。

该应用程序使用 systemd 配置文件启动。我最初有这个 systemd 配置:

[Unit]
Description=my-service
Documentation=http://documentation.domain.com
After=network.target

[Service]
Type=simple
TimeoutSec=0
User=ubuntu
ExecStart=/usr/bin/node /home/ubuntu/my-service/server.js
Restart=on-failure

[Install]
WantedBy=multi-user.target

我尝试添加以下行,但没有什么变化。

PermissionsStartOnly=true

答案1

我认为将证书文件复制到/etc/letsencrypt/live应用程序的文件夹中并没有错。我建议您通过在文件夹中定义自定义脚本来执行此操作/etc/letsencrypt/renewal-hooks/deploy,该脚本还会在每次更新相应的证书时重新加载应用程序。例如:

#!/bin/sh

# /etc/letsencrypt/renewal-hooks/deploy/example-com_deploy.sh

set -e

for domain in $RENEWED_DOMAINS; do
        case $domain in
        example.com)
                daemon_cert_root=/etc/some-daemon/certs

                # Make sure the certificate and private key files are
                # never world readable, even just for an instant while
                # we're copying them into daemon_cert_root.
                umask 077

                cp "$RENEWED_LINEAGE/fullchain.pem" "$daemon_cert_root/$domain.cert"
                cp "$RENEWED_LINEAGE/privkey.pem" "$daemon_cert_root/$domain.key"

                # Apply the proper file ownership and permissions for
                # the daemon to read its certificate and key.
                chown some-daemon "$daemon_cert_root/$domain.cert" \
                        "$daemon_cert_root/$domain.key"
                chmod 400 "$daemon_cert_root/$domain.cert" \
                        "$daemon_cert_root/$domain.key"

                service some-daemon restart >/dev/null
                ;;
        esac
done

请查看此网址了解详情:https://certbot.eff.org/docs/using.html#renewing-certificates

相关内容