fcgiwrap ouvindo um arquivo de soquete unix: como alterar as permissões do arquivo

fcgiwrap ouvindo um arquivo de soquete unix: como alterar as permissões do arquivo

Eu tenho um servidor web (nginx) e um aplicativo CGI (gitweb) que é executado com fcgiwrap para permitir acesso rápido ao CGI. Quero que o protocolo Fast CGI ocorra em um arquivo de soquete unix.

Para iniciar o daemon fcgiwrap, executo:

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

(isto é umDaemon Toolsdaemon)

O problema é que meu servidor web é executado como usuário www-datae não como usuário git. E fcgiwrapcria o soquete fastcgi.sockcom user git, group gite somente leitura para o não proprietário. Assim, o nginc com o usuário www-datanão pode acessar o soquete.

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 que o arquivo de soquete exista antes de executar fcgiwrap(o que é bastante difícil, pois não encontrei nenhum comando shell para criar um arquivo de soquete), ele será encerrado com o seguinte erro:

Failed to bind: Address already in use

A única solução que encontrei foi 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

Responder1

Fcgiwrap agora é compatível com a ativação do soquete systemd. Deve ser possível usar o protocolo systemd separadamente em sistemas operacionais sem systemd.

Responder2

Uma maneira seria iniciar o fcgiwrap como um usuário específico e fazer com que ele criasse o soquete em uma pasta com o sticky bit definido. Stickybit garante que todos os arquivos criados neste diretório tenham um determinado grupo.

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

Você pode criar um link simbólico se ainda quiser ver o nome do soquete original

ln -s fastcgi.sock sdir/fastcgi.sock

informação relacionada