fcgiwrap beim Abhören einer Unix-Socket-Datei: So ändern Sie die Dateiberechtigungen

1467
user36520

Ich habe einen Webserver (nginx) und eine CGI-Anwendung (gitweb), die mit fcgiwrap ausgeführt wird, um den schnellen CGI-Zugriff darauf zu ermöglichen. Das Fast CGI-Protokoll soll über eine Unix-Socket-Datei erfolgen.

Um den fcgiwrap-Daemon zu starten, starte ich:

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

(Dies ist ein Daemontools- Daemon)

Das Problem ist, dass mein Webserver als Benutzer www-dataund nicht als Benutzer ausgeführt wird git. Und fcgiwraperstellt den Socket fastcgi.sockmit user git, group gitund read nur für den Nicht-Besitzer. Daher kann nginc mit dem Benutzer www-datanicht auf den Socket zugreifen.

Offenbar kann fcgiwrap keine Berechtigungen für Unix-Socket-Dateien auswählen. Und das ist ziemlich nervig. Wenn es mir gelingt, dass die Socket-Datei vor dem Ausführen vorhanden ist fcgiwrap(was ziemlich schwierig ist, da ich keinen Shell-Befehl zum Erstellen einer Socket-Datei gefunden habe), wird sie mit dem folgenden Fehler beendet:

Failed to bind: Address already in use 

Die einzige Lösung, die ich gefunden habe, ist, den Server folgendermaßen zu starten:

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" 

Welches ist bei weitem nicht die eleganteste Lösung. Können Sie sich etwas Besseres vorstellen?

Vielen Dank

1

2 Antworten auf die Frage

0
teknopaul

Eine Möglichkeit wäre, fcgiwrap als bestimmten Benutzer zu starten und den Socket in einem Ordner mit dem gesetzten Sticky-Bit erstellen zu lassen. Stickybit stellt sicher, dass alle in diesem Verzeichnis erstellten Dateien eine bestimmte Gruppe haben.

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

Sie können symbolisch verknüpfen, wenn Sie noch den ursprünglichen Socket-Namen sehen möchten

ln -s fastcgi.sock sdir/fastcgi.sock 
-1
user36520

Fcgiwrap is now compatible with systemd socket activation. It should be possible to use systemd protocol separately on os without systemd.