Skip to content

feat(executor): snekbox による安全な Python 実行環境#10

Open
Mikuto0831 wants to merge 3 commits into
mainfrom
feat/snekbox-executor
Open

feat(executor): snekbox による安全な Python 実行環境#10
Mikuto0831 wants to merge 3 commits into
mainfrom
feat/snekbox-executor

Conversation

@Mikuto0831
Copy link
Copy Markdown
Contributor

Summary

  • snekbox.Executor を新規実装(usecase.Executor インターフェースを実装)
    • snekbox HTTP API(POST /snekeval/)を呼び出してコードを実行
    • stdin は base64 エンコードして sys.stdin シムとしてコード先頭に注入
  • EXECUTOR_TYPE=snekbox 環境変数で切り替え可能、未設定時は従来の Docker 方式を継続
  • docker-compose.snekbox.yml を追加(docker-compose.prod.yml へのオーバーライド)

セキュリティ比較

項目 Docker executor(現行) snekbox(本PR)
分離方式 Docker コンテナ nsjail (seccomp-bpf + namespaces)
ネットワーク network_mode: none namespace で完全分離
メモリ制限 64MB (Docker) snekbox 設定で制御
CPU 制限 50% / 1 core snekbox 設定で制御
PID 制限 50 nsjail で制御
privileged 不要 snekbox コンテナに必要(nsjail の要件)

snekbox は nsjail でシステムコールレベルの制限をかけるため、コンテナエスケープに対してより強固。

使用方法

# snekbox を有効化して起動
docker compose -f docker-compose.prod.yml -f docker-compose.snekbox.yml up -d

Test plan

  • EXECUTOR_TYPE=snekbox で起動し、コード提出が正常に動作すること
  • stdin を使う問題(競技プログラミング形式)が正しく動作すること
  • EXECUTOR_TYPE 未設定で Docker executor が従来通り動作すること
  • タイムアウト・メモリ超過時にエラーが返ること

🤖 Generated with Claude Code

Mikuto0831 and others added 3 commits April 20, 2026 15:21
- snekbox (nsjail サンドボックス) 対応の Executor を追加
  EXECUTOR_TYPE=snekbox で切り替え、未設定は従来の Docker 方式を継続使用
- stdin は base64 エンコードして sys.stdin シムとして注入
  (snekbox API は stdin を直接サポートしないため)
- docker-compose.snekbox.yml: snekbox サービスのオーバーライド定義
  docker-compose.prod.yml と組み合わせて使用する

セキュリティ比較:
  Docker executor: コンテナ分離 (メモリ/CPU/PID/ネットワーク制限)
  snekbox:         nsjail による seccomp-bpf + namespace 分離 (より強固)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- snekbox API の誤ったエンドポイント /snekeval/ を正しい /eval に修正
- healthcheck も /eval を使うよう修正(docker-compose.snekbox.yml / .dev.yml)
- docker-compose.snekbox.dev.yml を新規追加(開発用、ポート 8060 をホスト公開)
- mise に snekbox:dev / snekbox:dev:down / snekbox:up / snekbox:down / snekbox:logs タスクを追加
- README に snekbox の概要・環境変数・開発/本番手順・ディレクトリ構成を追記

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant