Unix 소켓 파일을 수신하는 fcgiwrap: 파일 권한을 변경하는 방법

Unix 소켓 파일을 수신하는 fcgiwrap: 파일 권한을 변경하는 방법

저는 빠른 CGI 액세스를 활성화하기 위해 fcgiwrap으로 실행되는 웹 서버(nginx)와 CGI 응용 프로그램(gitweb)을 가지고 있습니다. 저는 Fast CGI 프로토콜이 Unix 소켓 파일을 통해 이루어지기를 원합니다.

fcgiwrap 데몬을 시작하려면 다음을 실행합니다.

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

(이것은데몬툴즈악마)

문제는 내 웹 서버가 사용자 www-data가 아닌 사용자 로 실행된다는 것입니다 git. 그리고 소유자가 아닌 사용자 , 그룹 및 읽기 전용 fcgiwrap소켓을 생성합니다 . 따라서 사용자의 nginc는 소켓에 액세스할 수 없습니다.fastcgi.sockgitgitwww-data

분명히 fcgiwrap은 유닉스 소켓 파일의 권한을 선택할 수 없습니다. 그리고 이것은 꽤 짜증나는 일이다. 또한 실행하기 전에 소켓 파일이 존재하도록 관리하면 fcgiwrap(소켓 파일을 생성하는 쉘 명령을 찾지 못했기 때문에 매우 어렵습니다) 다음 오류와 함께 종료됩니다.

Failed to bind: Address already in use

내가 찾은 유일한 해결책은 다음과 같은 방법으로 서버를 시작하는 것입니다.

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"

가장 우아한 솔루션과는 거리가 멀습니다. 더 나은 것을 생각해 볼 수 있나요?

감사해요

답변1

Fcgiwrap은 이제 시스템 소켓 활성화와 호환됩니다. systemd가 없는 OS에서도 systemd 프로토콜을 별도로 사용할 수 있어야 합니다.

답변2

한 가지 방법은 특정 사용자로 fcgiwrap을 시작하고 고정 비트가 설정된 폴더에 소켓을 생성하도록 하는 것입니다. Stickybit은 이 디렉터리에 생성된 모든 파일에 특정 그룹이 있는지 확인합니다.

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

원래 소켓 이름을 계속 보고 싶다면 심볼릭 링크를 사용할 수 있습니다.

ln -s fastcgi.sock sdir/fastcgi.sock

관련 정보