다른 사람이 중지할 수 있는 Python http 서버 시작

다른 사람이 중지할 수 있는 Python http 서버 시작

Python SimpleHTTPServer 인스턴스를 시작하고 싶지만 모든 사람에게 이를 중지할 수 있는 기능을 제공하고 싶습니다(kill -1 실행). 큰 문제는 아니지만 시스템 사용자/그룹 구성에 대한 액세스 권한이 없습니다. 이것이 가능한가?

답변1

서버가 전용 사용자로 실행 중인 경우 /bin/kill해당 사용자에 대한 setuid 복사본을 보관할 수 있습니다. 이는 사용자가 다른 용도로 사용되지 않는 경우에만 작동합니다. setuid kill바이너리를 사용하면 해당 사용자로 실행되는 모든 프로세스에 신호를 보낼 수 있기 때문입니다. 종료하기 전에 PID를 확인하는 setuid 래퍼는 실제로 가능하지 않습니다. 경쟁 조건 없이 실행 중인 프로그램을 확인할 방법이 없습니다.

이 문제를 해결하는 또 다른 방법은 서버와 동일한 사용자로 감시 장치를 실행하고 사용자 계정에 연결되지 않은 트리거를 사용하여 서버를 종료할 준비를 하는 것입니다. 모니터는 경쟁 조건의 위험 없이 안정적으로 종료될 수 있도록 서버의 상위가 되어야 합니다. 트리거는 쓰기 파이프와 유사할 수 있습니다. 개념의 증거:

#!/bin/sh
SimpleHTTPServer &
server_pid=$!
read </var/lib/myserver/kill
kill "$server_pid"

이를 설정하려면:

mkdir /var/run/myserver
mkfifo -m 660 /var/run/myserver/kill
chown server-user /var/run/myserver/kill
chgrp server-killers /var/run/myserver/kill

서버를 종료하려면 server-killers그룹의 모든 사용자가 를 실행할 수 있습니다 echo >/var/run/myserver/kill.

관련 정보