在我的服务器上,我对 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