他の人が停止できる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

おすすめ記事