fcgiwrap 监听 unix 套接字文件:如何更改文件权限

fcgiwrap 监听 unix 套接字文件:如何更改文件权限

我有一个 Web 服务器 (nginx) 和一个 CGI 应用程序 (gitweb),它们使用 fcgiwrap 运行以启用对它的快速 CGI 访问。我希望快速 CGI 协议通过 unix 套接字文件进行。

要启动 fcgiwrap 守护进程,我运行:

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

(这是一个守护进程工具守护进程

问题是我的 Web 服务器以用户身份运行,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

相关内容