certbot 创建了一个由 root:root 拥有且权限为 640 的挑战,但 apache 无法访问它 - 自定义 ACL 应用于父目录

certbot 创建了一个由 root:root 拥有且权限为 640 的挑战,但 apache 无法访问它 - 自定义 ACL 应用于父目录

在我的服务器上,我对 public_html 文件夹设置了特殊权限。

首先是粘性位

chmod g+s /home/domain.com/public_html

还有默认组权限。

setfacl -m 'default:group::rwX' /home/domain.com/public_html

当我运行 certbot 命令时

certbot certonly \
        --webroot \
        -w /home/domain.com/public_html/ -d domain.com

certbot 将在 public_html 文件夹中创建具有正确权限的 .well-known/acme-challenge。它甚至保留了正确的组名。但是,acme challenge 本身将具有以下内容。

-rw-r-----  1 root                 root                   87 Feb  7 17:27 ELnik5A0krJsKUsL2If1mVfd2pSzWJAiSSjhA6h-f5E

它由 root 拥有并属于 root 组,因此 apache2 无法读取。因此整个操作失败。

添加--debug-challenges将允许它暂停,以便我可以手动修复它,但我觉得更新可能是一个问题。

我有什么办法可以解决这个问题?

答案1

好吧,你只是把事情复杂化了。就像很多事情一样。不需要让网络服务器处理你所有的特殊权限和东西:只需让它成为自己的网络根目录,以应对具有简单权限的挑战(它将托管其生命周期的 0.0001% 的文件,而 99.9999% 将保持空白,因此可以认为它是完全安全的):

对于 nginx 来说

    location ~* /.well-known/acme-challenge {
        allow all;
        rewrite ^/(.*)$ /$1;
        root /var/www/le;
        break;
    }

以及废弃软件(不确定,几十年没用过)

    Alias "/.well-known/acme-challenge" "/var/www/le"

(不过说真的,把阿帕奇扔掉吧,它是博物馆的东西,大多数人在 2010 年代初就把它扔掉了)

然后只需使用新的 webroot 调用 certbot 即可:

certbot certonly --webroot -w /var/www/le -d foo.bar

相关内容