fcgiwrap 監聽 unix 套接字檔:如何更改檔案權限

fcgiwrap 監聽 unix 套接字檔:如何更改檔案權限

我有一個 Web 伺服器 (nginx) 和一個使用 fcgiwrap 運行的 CGI 應用程式 (gitweb),以啟用對其的快速 CGI 存取。我希望 Fast CGI 協定透過 unix 套接字檔案進行。

要啟動 fcgiwrap 守護進程,我運行:

setuidgid git fcgiwrap -s "unix:$PWD/fastcgi.sock"

(這是一個守護程式工具守護程式)

問題是我的網頁伺服器以用戶身份運行www-data,而不是以用戶身份運行git。並使用使用者、群組和非所有者的唯讀fcgiwrap權限建立套接字。因此,nginc與該用戶無法存取該套接字。fastcgi.sockgitgitwww-data

顯然,fcgiwrap 無法選擇 unix 套接字檔案的權限。這很煩人。此外,如果我設法在運行之前讓套接字文件存在fcgiwrap(鑑於我沒有找到任何 shell 命令來創建套接字文件,這非常困難),它會退出並出現以下錯誤:

Failed to bind: Address already in use

我找到的唯一解決方案是按以下方式啟動伺服器:

rm -f fastcgi.sock # Ensure that the socket doesn't already exists
(sleep 5; chgrp www-data fastcgi.sock; chmod g+w fastcgi.sock) &
exec setuidgid git fcgiwrap -s "unix:$PWD/fastcgi.sock"

這遠遠不是最優雅的解決方案。你能想到更好的嗎?

謝謝

答案1

Fcgiwrap 現在與 systemd 套接字激活相容。應該可以在沒有 systemd 的作業系統上單獨使用 systemd 協定。

答案2

一種方法是以特定使用者身分啟動 fcgiwrap,並讓它在設定了黏性位的資料夾中建立套接字。 Stickybit 確保在此目錄中建立的所有檔案都具有給定的群組。

mkdir sdir
chgrp www-data sdir
chmod g+s sdir
exec setuidgid git fcgiwrap -s "unix:$PWD/sdir/fastcgi.sock"

如果您仍然想查看原始套接字名稱,可以進行符號鏈接

ln -s fastcgi.sock sdir/fastcgi.sock

相關內容