fcgiwrap escuchando un archivo de socket Unix: cómo cambiar los permisos del archivo

fcgiwrap escuchando un archivo de socket Unix: cómo cambiar los permisos del archivo

Tengo un servidor web (nginx) y una aplicación CGI (gitweb) que se ejecuta con fcgiwrap para permitir el acceso rápido CGI. Quiero que el protocolo Fast CGI se realice sobre un archivo de socket Unix.

Para iniciar el demonio fcgiwrap, ejecuto:

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

(esto es unDaemon Toolsdemonio)

El problema es que mi servidor web se ejecuta como usuario www-datay no como usuario git. Y fcgiwrapcrea el socket fastcgi.sockcon usuario git, grupo gity solo lectura para el no propietario. Por lo tanto, nginc con el usuario www-datano puede acceder al socket.

Aparentemente, fcgiwrap no puede seleccionar permisos de archivos de socket Unix. Y esto es bastante molesto. Además, si logro que el archivo de socket exista antes de ejecutarlo fcgiwrap(lo cual es bastante difícil dado que no encontré ningún comando de shell para crear un archivo de socket), se cierra con el siguiente error:

Failed to bind: Address already in use

La única solución que encontré es iniciar el servidor de la siguiente manera:

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"

Lo cual está lejos de ser la solución más elegante. ¿Se te ocurre algo mejor?

Gracias

Respuesta1

Fcgiwrap ahora es compatible con la activación del socket systemd. Debería ser posible utilizar el protocolo systemd por separado en un sistema operativo sin systemd.

Respuesta2

Una forma sería iniciar fcgiwrap como un usuario específico y hacer que cree el socket en una carpeta con el bit adhesivo configurado. Stickybit garantiza que todos los archivos creados en este directorio tengan un grupo determinado.

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

Puede realizar un enlace simbólico si aún desea ver el nombre del socket original

ln -s fastcgi.sock sdir/fastcgi.sock

información relacionada