fcgiwrap mendengarkan file unix socket: cara mengubah izin file

1

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-datadan bukan pengguna git. Dan fcgiwrapmembuat soket fastcgi.sockdengan pengguna git, grup gitdan hanya membaca benteng bukan pemilik. Dengan demikian, nginc dengan pengguna www-datatidak 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

pengguna36520
sumber

Jawaban:

0

Salah satu caranya adalah dengan memulai fcgiwrap sebagai pengguna tertentu dan membuatnya membuat soket di folder dengan set bit yang lengket. Stickybit memastikan bahwa semua file yang dibuat dalam direktori ini memiliki grup tertentu.

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

Anda dapat symlink jika Anda masih ingin melihat nama soket yang asli

ln -s fastcgi.sock sdir/fastcgi.sock
teknopaul
sumber
-1

Fcgiwrap sekarang kompatibel dengan aktivasi soket systemd. Seharusnya dimungkinkan untuk menggunakan protokol systemd secara terpisah di os tanpa systemd.

pengguna36520
sumber