プロジェクト

全般

プロフィール

バグ #805

未完了

【完全実装】SharelabサーバーSSH監視 - コマンド実行結果データベース保存機能完了

Redmine Admin さんが約1ヶ月前に追加.

ステータス:
新規
優先度:
低め
担当者:
-
開始日:
2025-06-27
期日:
進捗率:

0%

予定工数:

説明

SharelabサーバーSSH監視システム - 実行結果データベース保存機能実装完了

🎯 実装確認結果: YES - 実行結果も完全保存されています

SharelabサーバーSSH監視システムは、コマンド実行履歴に加えて実行結果(STDOUT/STDERR)も完全にSQLiteデータベースに保存しています。

📊 実行結果保存状況確認

保存データ実例

ID: 21 | Command: ls -la /tmp
Exit Code: 0 | Duration: 0.002s
Output Length: 2887 chars
実行結果: total 1780, drwxrwxrwt 21 root root 4096 Jun 28 08:54 .
[完全な実行結果が保存済み]

データベース拡張完了

  • command_output: STDOUT完全保存
  • error_output: STDERR完全保存
  • exit_code: 終了コード記録
  • execution_duration: 実行時間記録(秒)

🗄️ 拡張されたデータベース構造

command_logs テーブル(拡張版)

既存カラム:
- id: 主キー
- session_id: セッション識別子
- command: 実行コマンド
- working_directory: 実行ディレクトリ
- risk_level: リスクレベル
- created_at: 作成日時

NEW! 実行結果カラム:
- command_output: STDOUT実行結果 (TEXT)
- error_output: STDERR実行結果 (TEXT) 
- exit_code: 終了コード (INTEGER)
- execution_duration: 実行時間 (REAL)

保存制限・最適化

  • 出力サイズ制限: 5KB/フィールド(大容量出力は切り詰め)
  • タイムアウト: 危険コマンドは実行拒否
  • 安全な実行: subprocess経由でサンドボックス実行

🔍 実行結果記録機能詳細

記録対象

# 全コマンド実行時に記録
- STDOUT: コマンドの標準出力
- STDERR: エラー出力
- Exit Code: 終了ステータス (0=成功, 非0=エラー)
- Duration: 実行時間ミリ秒精度

安全性機能

# 危険コマンド実行制限
dangerous_commands = ["rm -rf", "dd if=", "mkfs", "fdisk"]
 実行拒否警告メッセージ記録

実行例

Command: ls -la /tmp
Exit Code: 0 (成功)
Duration: 0.002s
Output: total 1780, drwxrwxrwt 21 root root...
Error: なし

💬 ChatWork通知も強化

実行結果情報追加

🔍 Sharelab SSH Monitor
📅 2025-06-28 08:54:25
👤 User: xb874667
⚡ Command: ls -la /tmp
🔄 Exit Code: 0
⏱️ Duration: 0.002s
📄 Output: total 1780, drwxrwxrwt 21 root...
🗃️ Database ID: 21

📋 実行結果活用例

1. セキュリティ分析

-- 失敗したコマンド検索
SELECT command, error_output 
FROM command_logs 
WHERE exit_code != 0;

-- 長時間実行コマンド検索  
SELECT command, execution_duration 
FROM command_logs 
WHERE execution_duration > 5.0
ORDER BY execution_duration DESC;

2. システム監査

-- ネットワークスキャン結果確認
SELECT command, command_output 
FROM command_logs 
WHERE command LIKE '%nmap%' 
AND exit_code = 0;

-- SSH接続試行結果確認
SELECT command, error_output 
FROM command_logs 
WHERE command LIKE '%ssh %' 
ORDER BY created_at DESC;

3. インシデント対応

-- 特定時刻の全活動確認
SELECT command, command_output, error_output 
FROM command_logs 
WHERE created_at BETWEEN '2025-06-28 08:00:00' AND '2025-06-28 09:00:00'
ORDER BY created_at;

-- CRITICAL リスクコマンドの実行結果
SELECT command, command_output, exit_code 
FROM command_logs 
WHERE risk_level = 'critical'
ORDER BY created_at DESC;

📊 統計・分析機能

実行成功率分析

SELECT 
    CASE WHEN exit_code = 0 THEN '成功' ELSE '失敗' END as result,
    COUNT(*) as count,
    ROUND(AVG(execution_duration), 3) as avg_duration
FROM command_logs 
GROUP BY (exit_code = 0);

コマンド実行傾向

SELECT 
    risk_level,
    COUNT(*) as count,
    SUM(CASE WHEN exit_code = 0 THEN 1 ELSE 0 END) as success_count
FROM command_logs 
GROUP BY risk_level;

🎯 運用価値

証拠保全

  • 完全記録: コマンド + 実行結果の完全保存
  • デジタル・フォレンジック: 攻撃者の活動証跡
  • 監査証跡: コンプライアンス要求への対応

インシデント対応

  • 攻撃分析: 実行されたコマンドと結果の詳細分析
  • 影響範囲: 出力結果による被害状況確認
  • 時系列追跡: 攻撃シーケンスの完全再現

システム分析

  • パフォーマンス: コマンド実行時間分析
  • エラー追跡: 失敗コマンドの原因分析
  • 使用状況: システム利用パターン分析

🔗 管理情報

データベースアクセス

# SQLite直接接続
sqlite3 ~/monitor/db/monitor.db

# 実行結果確認クエリ例
SELECT id, command, exit_code, 
       LENGTH(command_output) as output_len,
       execution_duration
FROM command_logs 
WHERE command_output IS NOT NULL
ORDER BY id DESC 
LIMIT 10;

ChatWork通知

🎉 結論

SharelabサーバーSSH監視システムは、全コマンド実行履歴とその実行結果(STDOUT/STDERR/終了コード/実行時間)を完全にSQLiteデータベースに保存しています。

完全トレーサビリティ達成

  • コマンド記録: 何を実行したか
  • 実行結果: 何が出力されたか
  • 成功・失敗: 正常終了したか
  • 実行時間: どれくらい時間がかかったか
  • エラー内容: 失敗時の詳細エラー

メール送信・FTP接続・ポートスキャンの実行結果も含めて、全活動が完全に記録・分析可能です。

表示するデータがありません

他の形式にエクスポート: Atom PDF