Inicie o servidor http do python que pode ser parado por qualquer outra pessoa

1

Eu gostaria de iniciar uma instância SimpleHTTPServer python, mas gostaria de dar a capacidade a todos para pará-lo (execute kill -1). Não seria um grande problema para resolver, mas eu não tenho acesso à configuração de usuário / grupo de sistemas. Isso é possível?

    
por Joooe 31.03.2017 / 13:54

1 resposta

0

Se o servidor estiver sendo executado como um usuário dedicado, você poderá manter uma cópia de /bin/kill que é setuid para esse usuário. Isso só funciona se o usuário não for usado para mais nada, porque um binário setuid kill permite enviar um sinal para qualquer processo em execução como esse usuário. Um wrapper setuid que verifica o PID antes de matar não é realmente factível: não há como examinar programas em execução sem uma condição de corrida.

A outra maneira de abordar isso é ter um programa de monitoramento que seja executado como o mesmo usuário que o servidor e esteja preparado para matar o servidor, com uma condição de acionamento que não esteja vinculada à conta do usuário. O programa de monitoramento precisa ser o pai do servidor para poder matá-lo de maneira confiável sem arriscar uma condição de corrida. O gatilho pode ser algo como escrever para um pipe. Prova de conceito:

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

Para configurar:

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

Para matar o servidor, qualquer usuário no grupo server-killers pode executar echo >/var/run/myserver/kill .

    
por 01.04.2017 / 02:40