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

1

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

    
por user36520 06.07.2012 / 10:27

2 respostas

0

Uma maneira seria iniciar o fcgiwrap como um usuário específico e criar o soquete em uma pasta com o conjunto de bits fixos. O 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 ligar simbolicamente se ainda quiser ver o nome do soquete original

ln -s fastcgi.sock sdir/fastcgi.sock
    
por 15.07.2018 / 19:14
-1

O fcgiwrap agora é compatível com a ativação do soquete systemd. Deve ser possível usar o protocolo systemd separadamente em sistema operacional sem systemd.

    
por 30.03.2013 / 00:26