启动可以被其他人停止的 python http 服务器

启动可以被其他人停止的 python http 服务器

我想启动一个 python SimpleHTTPServer 实例,但我想给每个人停止它的能力(执行kill -1)。这并不是什么大问题,但我无权访问系统用户/组配置。这有可能吗?

答案1

如果服务器作为专用用户运行,那么您可以/bin/kill为该用户保留 setuid 的副本。仅当用户不用于其他任何操作时,这才有效,因为 setuidkill二进制文件允许向以该用户身份运行的任何进程发送信号。在杀死之前检查 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.

相关内容