Eu tenho um servidor web (nginx) e um aplicativo CGI (gitweb) que é executado com o fcgiwrap para permitir acesso rápido a CGI. Eu quero que o protocolo Fast CGI ocorra sobre um arquivo de soquete unix.
Para iniciar o daemon fcgiwrap, eu corro:
setuidgid git fcgiwrap -s "unix:$PWD/fastcgi.sock"
(este é um daemon daemontools )
O problema é que meu servidor da web é executado como o usuário www-data
e não o usuário git
. E fcgiwrap
cria o soquete fastcgi.sock
com o usuário git
, o grupo git
e lê somente o não proprietário. Assim, nginc com o usuário www-data
não pode acessar o socket.
Aparentemente, o fcgiwrap não é capaz de selecionar permissões de arquivos de soquete unix. E isso é muito chato. Além disso, se eu conseguir ter o arquivo de soquete existe antes de executar fcgiwrap
(o que é bastante difícil, pois não encontrei nenhum comando shell para criar um arquivo de soquete), ele sai com o seguinte erro:
Failed to bind: Address already in use
A única solução que encontrei é iniciar o servidor da seguinte maneira:
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"
O que está longe de ser a solução mais elegante. Você consegue pensar em algo melhor?
Obrigado