ユーザーから送信されたアプリケーションを実行する必要があります。私のコードは次のようになります:pythonでサブプロセスstdoutとstderrのサイズを制限する方法
私はユーザーが投稿するものを制御できないため、アプリケーションの出力サイズを制限したいと考えています。許可されていないシステムリソースへのアクセスやCPUサイクルの悪用などの他のことは、apparmorルールの適用によって制限されています。実行が許可される最大時間は、親プロセス(Pythonで)によって処理されています。今や、不正なアプリケーションは、stdoutがファイルに保存されていることを知っているので、多くのデータをstdoutに書き込むことによってサーバーシステムをフラッドさせることができます。
stdout/stderrファイルには、AppArmors RLIMITやカーネルモードのものは使用しません。標準ライブラリを使用してPythonからそれを実行できるのは素晴らしいことです。
私は現在、ファイルのサブクラスを作成することを考えています。各書き込みでは、すでにストリームに書き込まれているデータの量を確認します。または、最大長が設定されたメモリマップファイルを作成します。
しかし、私はそれがまだ見えないファイルサイズを制限する簡単な方法があるかもしれないと感じています。
出力を['head'](https://linux.die.net/man/1/head)でパイプすることはできますか? – Leon
@リーオンヘッドが動作します。私はoutp.maxsize = 10000という何かを探していました。その方法は非常に簡単です。私はRLIMITを使用して終了するかもしれません。または、1人の友人が/ etc/security/limitsについてのリンクを共有しました。 –