Saya memiliki server web (nginx) dan aplikasi CGI (gitweb) yang dijalankan dengan fcgiwrap untuk mengaktifkan akses Cepat CGI ke sana. Saya ingin protokol Fast CGI berlangsung di atas file socket unix.
Untuk memulai daemon fcgiwrap, saya menjalankan:
setuidgid git fcgiwrap -s "unix:$PWD/fastcgi.sock"
(Ini adalah daemontools daemon)
Masalahnya adalah server web saya berjalan sebagai pengguna www-data
dan bukan pengguna git
. Dan fcgiwrap
membuat soket fastcgi.sock
dengan pengguna git
, grup git
dan hanya membaca benteng bukan pemilik. Dengan demikian, nginc dengan pengguna www-data
tidak dapat mengakses soket.
Rupanya, fcgiwrap tidak dapat memilih izin file soket unix. Dan ini cukup menyebalkan. Selain itu, jika saya berhasil memiliki file socket ada sebelum saya menjalankan fcgiwrap
(yang cukup sulit mengingat saya tidak menemukan perintah shell untuk membuat file socket), itu berhenti dengan kesalahan berikut:
Failed to bind: Address already in use
Satu-satunya solusi yang saya temukan adalah memulai server dengan cara berikut:
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"
Yang jauh dari solusi paling elegan. Bisakah Anda memikirkan sesuatu yang lebih baik?
Terima kasih
sumber