Ubuntu
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 挑戰本身將具有以下內容。
-rw-r----- 1 root root 87 Feb 7 17:27 ELnik5A0krJsKUsL2If1mVfd2pSzWJAiSSjhA6h-f5E
它由 root 擁有並且具有組 root 並且不能被 apache2 讀取。所以整個操作失敗了。
添加 –debug-challenges 將允許它暫停,以便我可以手動修復它,但我覺得更新可能是一個問題。
我有什麼選擇來解決這個問題?
好吧,你只是把事情複雜化了。很喜歡。無需讓 webserver 來處理你所有的特殊權限和東西:只需讓它成為自己的 webroot 以應對具有簡單權限的挑戰(它將託管文件,如其生命週期的 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"
(但說真的,擺脫 Apache,這是博物館的東西,大多數人在 10 年代初就擺脫了它)
然後只需使用新的 webroot 呼叫 certbot:
certbot certonly --webroot -w /var/www/le -d foo.bar