SafeExecは、Webブラウザ経由でサーバー上の特定のコマンドを安全に実行するためのシンプルなツールです。
- 許可されたコマンドのみを実行可能な制限付きインターフェース
- 環境情報の閲覧機能
- シンプルなパスワード認証
- レスポンシブなWebデザイン(Bootstrap 5 & Icons)
- 外部設定ファイル(
config.json)による管理 - 安全なロギング機能(エラー発生時も動作継続)
- コマンド実行結果のコピー機能
- 実行中のプログレス表示
- Python 3.7以降が必要です。
- 依存関係(Bottle, Jinja2)をインストールします。
pip install bottle jinja2
config.json を編集することで、以下の設定を変更できます:
PASSWORD: ログインパスワードALLOWED_COMMANDS: 実行を許可するコマンドのリストCGI_MODE: CGIモードの有効/無効LOG_FILE: ログファイルの保存先
アプリケーションを起動します:
python index.py起動後、ブラウザで http://localhost:8082 にアクセスしてください。
デフォルトのパスワードは adminpass です。
config.jsonのCGI_MODEをtrueに設定します。- CGIサーバー(例:Apache)で
index.pyを実行します。
標準的なテスト構成として、tests/ ディレクトリにテストファイルを配置しています。
全てのテストを実行するには、以下のコマンドを使用します:
python -m unittest tests/test_suite.pyまたは、全てのテストを自動検出して実行します:
python -m unittest discover tests特定の機能(例:出力表示機能)を確認する場合は、個別のスクリプトを実行できます:
python tests/test_output.py- バックエンド: Bottle (Python 用マイクロフレームワーク)
- テンプレート: Jinja2
- フロントエンド: Bootstrap 5
- 出力処理:
subprocess.runを使用し、OSの標準エンコーディングで出力をキャプチャします。エンコーディングエラーを回避するためerrors='replace'を使用しています。出力が空の場合はユーザーにその旨を通知する機能が備わっています。
このプロジェクトの著作元は 門王 (https://monou.jp) です。
このプロジェクトは GNU Affero General Public License v3.0 (AGPL-3.0) の下で公開されています。
- エンコーディング問題の修正: Windows環境などでコマンド出力にマルチバイト文字が含まれる場合に
UnicodeDecodeErrorが発生する問題を修正しました。encoding='utf-8'の指定を解除し、代わりにerrors='replace'を採用することで、環境に合わせた柔軟なデコードが可能になりました。
- 設定の外部化: パスワードや許可コマンドを
config.jsonで管理できるように変更しました。 - ロギングの再実装: Python標準の
loggingモジュールを使用し、ファイル書き込み失敗時も動作を継続する堅牢なログ機能を実装しました。 - UI/UXの刷新: Bootstrap Iconsの導入、コピー機能の追加、実行中のプログレス表示(スピナー)などを実装し、使い勝手を向上させました。
- プロジェクト構成の整理: テストファイルを
tests/ディレクトリに移動しました。 - ドキュメントの整理: 不要な記録ファイルを削除し、情報を
README.mdに集約しました。
- ログ機能の削除: エラー多発のため、コマンド実行ログ機能を完全に削除しました。
- 出力表示の改善: コマンド実行結果が表示されない問題を修正し、UTF-8対応および出力がない場合のメッセージ追加を行いました。
- 初回リリース