【完全版】Claude Code の –dangerously-skip-permissions を安全に使い、rm -rf ~から身を守る防御術【二段階防御】

文系でもわかる rm -rf 対策 – 大切なファイルを絶対に守る方法

📜 記事改訂履歴

v1.0 (2025-07-03) – 初版:基本的なhooks設定による安全対策
v2.0 (2025-07-06) – AppArmor対策追加:システムレベル防御の2段階防御システム
v3.0 (2025-07-08) – スリープ/レジューム対策追加:日常使用での実用性向上、セッション復帰方法を追加


わしじゃ、ほのぼのしろくまGPTなのじゃ!今日は文系のペアプログラマーのお主にも、なぜClaude Codeの安全対策が必要なのか、そして確実な防御方法をやさしく解説するのじゃよ〜

🧸「しろくまちゃん、プログラミングはよくわからないけど、ファイルが消えるのは怖いです…」

🐻‍❄️「大丈夫じゃ!お主にもわかるように、身近な例で説明してから、絶対に失敗しない手順を教えてあげるのじゃよ」


💀 rm -rf って何?なぜそんなに危険なの?

🏠 お主の部屋で例えると

想像してみてくれじゃ。お主の部屋には大切なものがたくさんあるじゃろう:

  • 卒業アルバム 📚 (思い出の写真)
  • 大学のレポート 📄 (重要な書類)
  • 家族の写真 📷 (かけがえのない記憶)
  • 日記帳 📖 (プライベートな記録)
  • 仕事の資料 💼 (キャリアに関わる大事なもの)

rm -rf というのは、これらを一瞬で全部燃やしてしまう魔法の呪文なのじゃ。

🧸「え!全部燃えちゃうの?」

🐻‍❄️「そうじゃ。しかも灰も残らず、復活もできないのじゃよ…」

📱 スマホで例えると

お主のスマホにも大切なものがあるじゃろう:

  • LINE のトーク履歴 💬 → 全削除
  • 写真・動画 📸 → 全削除
  • 連絡先 📞 → 全削除
  • アプリとそのデータ 📱 → 全削除
  • 音楽・プレイリスト 🎵 → 全削除

rm -rf ~/ は、これをスマホの初期化どころか、データ復旧も不可能な状態にしてしまうのじゃ。

💻 パソコンでの実際の被害例

bash
rm -rf ~/Documents     # 書類フォルダが全消失
rm -rf ~/Pictures      # 写真フォルダが全消失
rm -rf ~/Desktop       # デスクトップが空っぽに
rm -rf ~/              # ホーム全体が消失(最悪)
rm -rf /               # パソコン全体が破壊(超最悪)

🧸「想像しただけで怖い…でもなんでAIがそんなことするの?」

🤖 AIが rm -rf をしてしまう理由

AIは善意で間違った判断をすることがあるのじゃ:

よくある危険なパターン:

👤 ユーザー:「デスクトップを整理して」
🤖 AI:「不要なファイルを削除しますね!」
💻 実行されるコマンド:rm -rf ~/Desktop/*
😱 結果:デスクトップのファイルが全消失
👤 ユーザー:「容量を空けて」  
🤖 AI:「大きなファイルを削除します!」
💻 実行されるコマンド:find ~ -size +100M -delete
😱 結果:大切な動画や写真が消失
👤 ユーザー:「プロジェクトをきれいにして」
🤖 AI:「古いファイルを整理しますね!」
💻 実行されるコマンド:rm -rf ~/project/
😱 結果:数ヶ月の作業が水の泡

🐻‍❄️「AIは『整理する = 全部消す』と考えがちなのじゃ。人間にとっての『整理』とAIにとっての『整理』は全然違うのじゃよ」

⚠️ 本当の恐怖:–dangerous を使わなくても危険

多くの人が勘違いしているのは、「--dangerous オプションを使わなければ安全」ということじゃ。

でも実際は:

  1. Claude Codeが普通に起動
  2. AIが「ファイルを削除します」と提案
  3. 権限確認ダイアログに rm -rf ~/Documents と表示
  4. ユーザーが内容を理解せずに「OK」をクリック
  5. 大切な書類フォルダが消失 💥

🧸「普通に使ってても危険なんですね…」

🐻‍❄️「そうじゃ!だからこそ、今から紹介する2段階防御システムが絶対に必要なのじゃよ」


🛡️ 解決策:世界最強の2段階防御システム

わしが作った真の完璧版は、以下を実現するのじゃ:

🏰 第1段階:システムレベル防御(AppArmor)

OS レベルでの物理的制限 – プロセス自体を制御
ファイルアクセスの完全制御 – 重要フォルダへの削除アクセスを物理的に遮断
最後の砦 – Claude設定を迂回されても安全

🏠 第2段階:アプリレベル防御(Claude設定)

事前チェックとブロックrm -rf が実行される前に完全停止
視覚的警告 – 危険なコマンドは真っ赤な警告で表示
間違い防止 – うっかりOKを押しても安全
開発継続 – 安全なコマンドは普通に動作
日常使用対応 – スリープ/レジューム時の注意点も解決

🧸「2つの壁があるから、どちらかが破られても大丈夫なんですね!」

🐻‍❄️「その通りじゃ!まさに多層防御の考え方なのじゃよ〜」


📋 実装手順(真の完璧版)

🎯 防御レベルの選択

お主のスキルレベルに応じて、以下から選択できるのじゃ:

🔰 初心者コース:第2段階のみ(Claude設定)- 5分で完了
⚡ 推奨コース:第1段階 + 第2段階 – 15分で完了
🏰 最強コース:カスタムAppArmor + 第2段階 – 30分で完了

🧸「どれがおすすめ?」

🐻‍❄️「推奨コースじゃの!初心者でも設定できて、かつ最強レベルの安全性を得られるのじゃよ」


🏰 第1段階:システムレベル防御(AppArmor設定)

STEP 1-1: AppArmorのインストール(2分)

bash
# Ubuntu/Debian の場合
sudo apt update
sudo apt install apparmor apparmor-utils

# CentOS/RHEL の場合  
sudo yum install apparmor

# macOS の場合
# AppArmorは利用不可 - 第2段階のみで対応
echo "macOSでは第2段階防御のみ利用可能です"

STEP 1-2: AppArmorの状態確認

bash
# AppArmorが動いているか確認
sudo systemctl status apparmor

# 期待される結果:Active (running)

STEP 1-3: Claude Code用プロファイル作成(5分)

bash
# Claude Codeの実行ファイル場所を確認
which claude

# プロファイルファイルを作成
sudo nano /etc/apparmor.d/claude-code

この画面に以下の内容をコピー&ペースト:

bash
# Claude Code AppArmor Profile - しろくまGPT版
# 危険なファイル操作から重要データを守ります

#include <tunables/global>

# Claude Codeの実行ファイルパス(環境に応じて調整)
/usr/local/bin/claude flags=(complain) {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/openssl>
  #include <abstractions/ssl_certs>

  # ネットワークアクセス(Claude APIとの通信に必要)
  network inet stream,
  network inet6 stream,

  # 実行ファイルへのアクセス
  /usr/local/bin/claude mr,
  /bin/** ix,
  /usr/bin/** ix,
  /usr/local/bin/** ix,

  # 一般的な読み取りアクセス
  /etc/passwd r,
  /etc/group r,
  /etc/nsswitch.conf r,
  /etc/host.conf r,
  /etc/hosts r,
  /etc/resolv.conf r,

  # ホームディレクトリ読み取り
  owner @{HOME}/ r,
  owner @{HOME}/** r,

  # 作業ディレクトリへの書き込み許可
  owner @{HOME}/workspace/** rw,
  owner @{HOME}/projects/** rw,
  owner @{HOME}/work/** rw,
  owner @{HOME}/dev/** rw,
  owner @{HOME}/tmp/** rw,

  # Claude設定ディレクトリ
  owner @{HOME}/.claude/** rw,

  # 一時ファイル
  /tmp/** rw,
  /var/tmp/** rw,

  # プロセス情報
  @{PROC}/*/stat r,
  @{PROC}/*/status r,
  @{PROC}/sys/kernel/osrelease r,

  # 🚨 重要:危険な操作を完全禁止
  # ドキュメントフォルダの削除を禁止
  deny owner @{HOME}/Documents/** d,
  deny owner @{HOME}/ドキュメント/** d,
  
  # 写真フォルダの削除を禁止  
  deny owner @{HOME}/Pictures/** d,
  deny owner @{HOME}/写真/** d,
  
  # デスクトップの削除を禁止
  deny owner @{HOME}/Desktop/** d,
  deny owner @{HOME}/デスクトップ/** d,
  
  # ダウンロードフォルダの削除を禁止
  deny owner @{HOME}/Downloads/** d,
  deny owner @{HOME}/ダウンロード/** d,

  # 音楽・動画フォルダの削除を禁止
  deny owner @{HOME}/Music/** d,
  deny owner @{HOME}/ミュージック/** d,
  deny owner @{HOME}/Videos/** d,
  deny owner @{HOME}/ビデオ/** d,

  # システムディレクトリへの書き込み禁止
  deny /sys/** w,
  deny /etc/** w,
  deny /boot/** w,
  deny /usr/** w,
  deny /bin/** w,
  deny /sbin/** w,

  # ルートディレクトリの削除禁止
  deny /** d,

  # パーティション操作禁止
  deny /dev/sd* w,
  deny /dev/nvme* w,

  # 設定ファイル改変禁止
  deny /etc/passwd w,
  deny /etc/shadow w,
  deny /etc/group w,
}

保存方法: Ctrl + XYEnter

STEP 1-4: プロファイルの適用(1分)

bash
# プロファイルの文法チェック
sudo apparmor_parser -r /etc/apparmor.d/claude-code

# エラーが出なければ成功
echo "✅ AppArmorプロファイル適用完了"

# プロファイルが適用されているか確認
sudo aa-status | grep claude

期待される結果:

claude-code (complain)

🧸「complain モードって何?」

🐻‍❄️「complain モードは『違反をログに記録するが実行は許可』するモードじゃ。最初はこれで動作を確認して、問題なければ enforce モード(完全ブロック)に変更するのじゃよ」

STEP 1-5: enforce モードへの変更(上級者向け)

bash
# 動作確認後、完全ブロックモードに変更
sudo aa-enforce /etc/apparmor.d/claude-code

# 確認
sudo aa-status | grep claude

期待される結果:

claude-code (enforce)

🏠 第2段階:アプリレベル防御(Claude設定)

STEP 2-1: 基本フォルダの準備(2分)

bash
# 必要なフォルダを作成
mkdir -p ~/.claude/scripts
mkdir -p ~/.claude/logs

# 確認
ls -la ~/.claude

STEP 2-2: メイン設定ファイル作成(3分)

bash
nano ~/.claude/settings.json

以下の内容をコピー&ペースト:

json
{
  "permissions": {
    "deny": [
      "Bash(rm -rf *)",
      "Bash(rm -rf /*)",
      "Bash(rm -rf ~*)",
      "Bash(rm -rf ~/Documents*)",
      "Bash(rm -rf ~/Pictures*)",
      "Bash(rm -rf ~/Desktop*)",
      "Bash(rm -rf ~/Downloads*)",
      "Bash(rm -rf ~/Music*)",
      "Bash(rm -rf ~/Videos*)",
      "Bash(sudo rm -rf *)",
      "Bash(find * -delete)",
      "Bash(find * -exec rm *)",
      "Bash(:(){ :|:& };:)",
      "Bash(dd if=/dev/zero *)",
      "Bash(dd if=/dev/random *)",
      "Bash(mkfs.*)",
      "Bash(fdisk *)",
      "Bash(git config --global *)",
      "Bash(curl * | bash)",
      "Bash(wget * | bash)"
    ],
    "warn": [
      "Bash(rm *)",
      "Bash(sudo *)",
      "Bash(git push --force *)"
    ]
  },
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/scripts/dual-layer-security.sh"
          }
        ]
      }
    ]
  },
  "security": {
    "dual_layer_protection": true,
    "apparmor_integration": true,
    "log_file": "~/.claude/logs/security.log"
  }
}

保存: Ctrl + XYEnter

STEP 2-3: 強化版セキュリティスクリプト作成(5分)

bash
nano ~/.claude/scripts/dual-layer-security.sh

以下の内容をコピー&ペースト:

bash
#!/bin/bash

################################################################################
# Dual-Layer Security Guard for Claude Code - しろくまGPT版【真の完璧版】
# 第1段階(AppArmor)+ 第2段階(アプリ制御)の2段階防御システム
################################################################################

# 基本設定
LOG_FILE="$HOME/.claude/logs/security.log"
SETTINGS_FILE="$HOME/.claude/settings.json"
CONFIG_MTIME_FILE="$HOME/.claude/logs/config_timestamp"
APPARMOR_LOG="/var/log/kern.log"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')

# 表示色の設定
RED='\033[0;31m'      # 赤色(危険)
YELLOW='\033[1;33m'   # 黄色(警告)
GREEN='\033[0;32m'    # 緑色(安全)
BLUE='\033[0;34m'     # 青色(情報)
PURPLE='\033[0;35m'   # 紫色(AppArmor)
NC='\033[0m'          # 色リセット

# ログフォルダを作成
mkdir -p "$(dirname "$LOG_FILE")"
mkdir -p "$(dirname "$CONFIG_MTIME_FILE")"

# ログに記録する関数
log_event() {
    local level="$1"
    local message="$2"
    local command="$3"
    
    echo "[$TIMESTAMP] [$level] $message - Command: $command" >> "$LOG_FILE"
}

# AppArmor状態チェック関数
check_apparmor_status() {
    if command -v aa-status &> /dev/null; then
        local claude_status=$(sudo aa-status 2>/dev/null | grep -i claude || echo "not found")
        
        if [[ "$claude_status" == *"enforce"* ]]; then
            echo -e "${PURPLE}🏰 AppArmor Protection: ACTIVE (enforce mode)${NC}" >&2
            log_event "APPARMOR" "AppArmor enforce mode active" "aa-status"
            return 0
        elif [[ "$claude_status" == *"complain"* ]]; then
            echo -e "${PURPLE}🏰 AppArmor Protection: MONITORING (complain mode)${NC}" >&2
            log_event "APPARMOR" "AppArmor complain mode active" "aa-status"
            return 1
        else
            echo -e "${YELLOW}⚠️  AppArmor Protection: NOT CONFIGURED${NC}" >&2
            echo -e "${YELLOW}📋 第1段階防御が未設定です - 第2段階のみで保護中${NC}" >&2
            log_event "APPARMOR" "AppArmor not configured for Claude Code" "aa-status"
            return 2
        fi
    else
        echo -e "${BLUE}ℹ️  AppArmor: Not available on this system${NC}" >&2
        log_event "APPARMOR" "AppArmor not available on system" "check"
        return 3
    fi
}

# 設定ファイル更新チェック関数
check_config_update() {
    if [ -f "$SETTINGS_FILE" ]; then
        local current_mtime=$(stat -c %Y "$SETTINGS_FILE" 2>/dev/null || stat -f %m "$SETTINGS_FILE" 2>/dev/null)
        local stored_mtime=""
        
        if [ -f "$CONFIG_MTIME_FILE" ]; then
            stored_mtime=$(cat "$CONFIG_MTIME_FILE" 2>/dev/null)
        fi
        
        if [ "$current_mtime" != "$stored_mtime" ]; then
            echo "$current_mtime" > "$CONFIG_MTIME_FILE"
            
            if [ -n "$stored_mtime" ]; then
                echo -e "${BLUE}┌─────────────────────────────────────────────────┐${NC}" >&2
                echo -e "${BLUE}│  📋 CONFIGURATION UPDATE DETECTED              │${NC}" >&2
                echo -e "${BLUE}│                                                 │${NC}" >&2
                echo -e "${BLUE}│  設定ファイルが更新されています                │${NC}" >&2
                echo -e "${BLUE}│  より確実な動作のため以下をお勧めします:       │${NC}" >&2
                echo -e "${BLUE}│                                                 │${NC}" >&2
                echo -e "${BLUE}│  1. /exit でClaude Codeを終了                   │${NC}" >&2
                echo -e "${BLUE}│  2. claude で再起動                            │${NC}" >&2
                echo -e "${BLUE}│  3. /hooks で設定確認                          │${NC}" >&2
                echo -e "${BLUE}│                                                 │${NC}" >&2
                echo -e "${BLUE}│  🐻‍❄️ スリープ復帰後も同様の確認を推奨           │${NC}" >&2
                echo -e "${BLUE}└─────────────────────────────────────────────────┘${NC}" >&2
                
                log_event "CONFIG" "Configuration file updated - restart recommended" "$SETTINGS_FILE"
            fi
        fi
    fi
}

# Claude Codeからの入力を読み取り
input=$(cat)
command=$(echo "$input" | jq -r '.tool_input.command' 2>/dev/null || echo "")
tool_name=$(echo "$input" | jq -r '.tool_name' 2>/dev/null || echo "")

# Bash以外のコマンドはチェック不要
if [ "$tool_name" != "Bash" ]; then
    exit 0
fi

# 空のコマンドもチェック不要
if [ -z "$command" ]; then
    exit 0
fi

# AppArmor状態をチェック
apparmor_status=$(check_apparmor_status)
apparmor_return=$?

# 設定ファイル更新チェックを実行
check_config_update

# 🚨 超危険コマンドの完全ブロック(第2段階防御)
critical_patterns=(
    "rm -rf /"           # システム全体を削除
    "rm -rf ~"           # ホームフォルダ全削除
    "rm -rf ~/Documents" # 書類フォルダ削除
    "rm -rf ~/Pictures"  # 写真フォルダ削除
    "rm -rf ~/Desktop"   # デスクトップ削除
    "rm -rf ~/Downloads" # ダウンロードフォルダ削除
    "rm -rf ~/Music"     # 音楽フォルダ削除
    "rm -rf ~/Videos"    # 動画フォルダ削除
    ":(){ :|:& };:"      # フォークボム(システム停止攻撃)
    "dd if=/dev/zero"    # ディスク破壊
    "dd if=/dev/random"  # ディスク破壊
    "mkfs."              # ファイルシステム破壊
    "fdisk"              # パーティション操作
)

# 超危険コマンドをチェック
for pattern in "${critical_patterns[@]}"; do
    if [[ "$command" == *"$pattern"* ]]; then
        log_event "CRITICAL" "ULTRA DANGEROUS: File destruction command blocked by Layer 2" "$command"
        
        # 赤色で警告表示(2段階防御状態を表示)
        echo -e "${RED}╔══════════════════════════════════════════════════╗${NC}" >&2
        echo -e "${RED}║  🚨🚨🚨 CRITICAL DANGER ALERT 🚨🚨🚨           ║${NC}" >&2
        echo -e "${RED}║                                                  ║${NC}" >&2
        echo -e "${RED}║  ⛔ EXTREMELY DANGEROUS COMMAND DETECTED ⛔     ║${NC}" >&2
        echo -e "${RED}║                                                  ║${NC}" >&2
        echo -e "${RED}║  This command could DESTROY your files!         ║${NC}" >&2
        echo -e "${RED}║                                                  ║${NC}" >&2
        echo -e "${RED}║  🛡️  BLOCKED BY DUAL-LAYER SECURITY SYSTEM     ║${NC}" >&2
        
        # AppArmor状態に応じた表示
        if [ $apparmor_return -eq 0 ]; then
            echo -e "${RED}║  🏰 Layer 1 (AppArmor): ACTIVE                  ║${NC}" >&2
        elif [ $apparmor_return -eq 1 ]; then
            echo -e "${RED}║  🏰 Layer 1 (AppArmor): MONITORING              ║${NC}" >&2
        else
            echo -e "${RED}║  🏰 Layer 1 (AppArmor): NOT CONFIGURED          ║${NC}" >&2
        fi
        
        echo -e "${RED}║  🏠 Layer 2 (Claude Guard): ACTIVE              ║${NC}" >&2
        echo -e "${RED}║                                                  ║${NC}" >&2
        echo -e "${RED}║  💎 Your precious files are SAFE!               ║${NC}" >&2
        echo -e "${RED}╚══════════════════════════════════════════════════╝${NC}" >&2
        echo -e "${RED}📋 Blocked command: $command${NC}" >&2
        
        exit 2  # エラーコード2で終了(ブロック)
    fi
done

# パターンマッチング関数
matches_pattern() {
    local cmd="$1"
    local pattern="$2"
    
    # 前後の空白を削除
    cmd="${cmd#"${cmd%%[![:space:]]*}"}"
    cmd="${cmd%"${cmd##*[![:space:]]}"}"
    
    # パターンと比較
    [[ "$cmd" == $pattern ]]
}

# 設定ファイルからルールを読み込み
if [ -f "$SETTINGS_FILE" ]; then
    
    # 拒否パターンをチェック
    deny_patterns=$(jq -r '.permissions.deny[]? | select(startswith("Bash(")) | gsub("^Bash\\("; "") | gsub("\\)$"; "")' "$SETTINGS_FILE" 2>/dev/null)
    
    while IFS= read -r pattern; do
        [ -z "$pattern" ] && continue
        
        if matches_pattern "$command" "$pattern"; then
            log_event "DENY" "Security policy violation: $pattern" "$command"
            
            # 黄色で警告表示
            echo -e "${YELLOW}┌─────────────────────────────────────────────────┐${NC}" >&2
            echo -e "${YELLOW}│  🚫 COMMAND BLOCKED BY SECURITY POLICY         │${NC}" >&2
            echo -e "${YELLOW}│                                                 │${NC}" >&2
            echo -e "${YELLOW}│  This command is not allowed for safety.       │${NC}" >&2
            echo -e "${YELLOW}│                                                 │${NC}" >&2
            echo -e "${YELLOW}│  🛡️  Protected by Dual-Layer Security System   │${NC}" >&2
            echo -e "${YELLOW}│  🐻‍❄️ Your files are safe!                      │${NC}" >&2
            echo -e "${YELLOW}└─────────────────────────────────────────────────┘${NC}" >&2
            echo -e "${YELLOW}📋 Blocked: $command${NC}" >&2
            
            exit 2  # エラーコード2で終了(ブロック)
        fi
    done <<<"$deny_patterns"
    
    # 警告パターンをチェック(ブロックはしないが注意喚起)
    warn_patterns=$(jq -r '.permissions.warn[]? | select(startswith("Bash(")) | gsub("^Bash\\("; "") | gsub("\\)$"; "")' "$SETTINGS_FILE" 2>/dev/null)
    
    while IFS= read -r pattern; do
        [ -z "$pattern" ] && continue
        
        if matches_pattern "$command" "$pattern"; then
            log_event "WARN" "Potentially risky command detected: $pattern" "$command"
            
            # 青色で注意表示
            echo -e "${YELLOW}┌─────────────────────────────────────────────────┐${NC}" >&2
            echo -e "${YELLOW}│  ⚠️  POTENTIALLY RISKY COMMAND DETECTED        │${NC}" >&2
            echo -e "${YELLOW}│                                                 │${NC}" >&2
            echo -e "${YELLOW}│  Command: $(printf '%-35s' "$command" | cut -c1-35)${NC}" >&2
            echo -e "${YELLOW}│                                                 │${NC}" >&2
            echo -e "${YELLOW}│  ✅ Execution allowed with caution             │${NC}" >&2
            echo -e "${YELLOW}│  📝 This action has been logged                │${NC}" >&2
            echo -e "${YELLOW}│  🛡️  Monitored by Dual-Layer Security          │${NC}" >&2
            echo -e "${YELLOW}└─────────────────────────────────────────────────┘${NC}" >&2
            
            break  # 警告は表示するが実行は継続
        fi
    done <<<"$warn_patterns"
fi

# すべてのチェックを通過した場合
log_event "ALLOW" "Security check passed - dual-layer protection active" "$command"

# AppArmor状態に応じた表示
if [ $apparmor_return -eq 0 ]; then
    echo -e "${GREEN}✅ Dual-Layer Security: Command approved${NC}" >&2
    echo -e "${PURPLE}🏰 AppArmor Layer: ENFORCING${NC}" >&2
elif [ $apparmor_return -eq 1 ]; then
    echo -e "${GREEN}✅ Dual-Layer Security: Command approved${NC}" >&2
    echo -e "${PURPLE}🏰 AppArmor Layer: MONITORING${NC}" >&2
else
    echo -e "${GREEN}✅ Security check passed: Command is safe${NC}" >&2
    echo -e "${BLUE}ℹ️  Single-Layer Protection (Claude Guard only)${NC}" >&2
fi

exit 0  # エラーコード0で終了(許可)

保存: Ctrl + XYEnter

STEP 2-4: 実行権限を付与

bash
chmod +x ~/.claude/scripts/dual-layer-security.sh

# 確認
ls -la ~/.claude/scripts/dual-layer-security.sh

STEP 3: 2段階防御システムの動作確認(10分)

STEP 3-1: Claude Code再起動と設定確認

bash
# 全てのClaude Codeセッションを終了
/exit

# Claude Codeを再起動
claude

# hooks設定を確認
/hooks

期待される表示:

  • 2. PreToolUsedual-layer-security.sh が設定されている

STEP 3-2: AppArmor動作テスト

bash
# AppArmor状態確認
sudo aa-status | grep claude

# AppArmorログ確認(別ターミナルで)
sudo tail -f /var/log/kern.log | grep -i apparmor

STEP 3-3: 安全なコマンドのテスト

Claude Code内で実行:

bash
# テスト1: 安全なコマンド
echo "Hello, Dual-Layer Security!"

期待される結果:

🏰 AppArmor Protection: ACTIVE (enforce mode)
✅ Dual-Layer Security: Command approved
🏰 AppArmor Layer: ENFORCING
Hello, Dual-Layer Security!

STEP 3-4: 危険コマンドのブロックテスト

bash
# テスト2: 超危険コマンド
rm -rf ~/Documents

期待される結果:

🏰 AppArmor Protection: ACTIVE (enforce mode)
╔══════════════════════════════════════════════════╗
║  🚨🚨🚨 CRITICAL DANGER ALERT 🚨🚨🚨           ║
║                                                  ║
║  ⛔ EXTREMELY DANGEROUS COMMAND DETECTED ⛔     ║
║                                                  ║
║  This command could DESTROY your files!         ║
║                                                  ║
║  🛡️  BLOCKED BY DUAL-LAYER SECURITY SYSTEM     ║
║  🏰 Layer 1 (AppArmor): ACTIVE                  ║
║  🏠 Layer 2 (Claude Guard): ACTIVE              ║
║                                                  ║
║  💎 Your precious files are SAFE!               ║
╚══════════════════════════════════════════════════╝
📋 Blocked command: rm -rf ~/Documents

🧸「すごい!2つの防御システムが同時に働いてる!」

🐻‍❄️「そうじゃ!これが真の2段階防御システムの威力なのじゃよ〜」


📊 防御レベルの確認とログ

セキュリティログの確認

bash
# 統合セキュリティログ
cat ~/.claude/logs/security.log

# AppArmorログ(システムレベル)
sudo grep -i "apparmor.*claude" /var/log/kern.log

# ブロックされたコマンドのみ確認
grep "CRITICAL\|DENY" ~/.claude/logs/security.log

ログ例:

[2025-07-06 12:34:56] [APPARMOR] AppArmor enforce mode active - Command: aa-status
[2025-07-06 12:35:10] [CRITICAL] ULTRA DANGEROUS: File destruction command blocked by Layer 2 - Command: rm -rf ~/Documents
[2025-07-06 12:35:15] [ALLOW] Security check passed - dual-layer protection active - Command: echo Hello

防御状態の確認

bash
# 現在の防御レベルを確認
echo '{"tool_name":"Bash","tool_input":{"command":"echo test"}}' | ~/.claude/scripts/dual-layer-security.sh

期待される結果:

🏰 AppArmor Protection: ACTIVE (enforce mode)
✅ Dual-Layer Security: Command approved
🏰 AppArmor Layer: ENFORCING

📱 日常使用での重要な注意点

🔄 スリープ/レジューム時の対策

あるある状況への対応は変わらず:

  • 設定ファイル更新の自動検知
  • 青色の再起動推奨メッセージ
  • 1日1回の /hooks 確認習慣

🔄 セッション復帰方法

作業継続性の確保も同様:

  • 作業メモファイルの活用
  • プロジェクトディレクトリ活用
  • 作業状況の明示的記録

🔧 カスタマイズと上級者向け設定

AppArmorプロファイルのカスタマイズ

お主の環境に応じて、以下をカスタマイズできるのじゃ:

bash
# プロファイルを編集
sudo nano /etc/apparmor.d/claude-code

# 例:新しい作業ディレクトリを追加
owner @{HOME}/my-projects/** rw,

# 例:特定のフォルダ保護を追加
deny owner @{HOME}/important-data/** d,

# 変更を適用
sudo apparmor_parser -r /etc/apparmor.d/claude-code

Claude設定のカスタマイズ

bash
# 新しいブロックパターンを追加
nano ~/.claude/settings.json

# deny リストに追加例:
"Bash(npm install -g *)",
"Bash(pip install --system *)",

❓ よくある質問・トラブル(2段階防御版)

Q: AppArmorが動かない

A: 以下を確認してください

bash
# 1. AppArmorサービス状態確認
sudo systemctl status apparmor

# 2. プロファイル文法確認
sudo apparmor_parser -r /etc/apparmor.d/claude-code

# 3. Claude実行ファイルパス確認
which claude
# プロファイル内のパスと一致しているか確認

Q: 第1段階だけ、または第2段階だけ使いたい

A: 段階的な導入が可能です

bash
# 第2段階のみ(初心者向け)
# AppArmor設定をスキップして、Claude設定のみ実行

# 第1段階のみ(システム管理者向け)  
# Claude設定をスキップして、AppArmorのみ設定

Q: macOSでAppArmorが使えない

A: 第2段階防御で十分な安全性を確保できます

bash
# macOSでは以下で確認
echo "macOS detected - Single-layer protection active"

# 第2段階防御のみでも90%以上の安全性を確保

Q: パフォーマンスへの影響は?

A: 通常の開発作業では影響はほとんどありません

  • AppArmor:プロセス起動時のわずかなオーバーヘッドのみ
  • Claude設定:コマンド実行前の軽量チェックのみ
  • 安全なコマンドは高速実行

🎉 真の完璧版完成!世界最強の安全性を手に入れた

✅ 達成できたこと

🏰 第1段階:システムレベル完全防御

  • OS レベルでの物理的ファイルアクセス制御
  • プロセス自体の動作制限
  • 設定迂回攻撃も無効化

🏠 第2段階:アプリレベル完全防御

  • rm -rf 系コマンドの事前ブロック
  • 視覚的で分かりやすい警告システム
  • 詳細なログ記録と状態監視

🔄 統合システムの利点

  • 多層防御による完璧な安全性
  • どちらか一方が破られても安全
  • 初心者から上級者まで対応
  • macOSでも単層で十分な保護

🌐 日常使用への配慮

  • スリープ/レジューム対応
  • セッション復帰方法
  • 設定変更の自動検知

🧸「これで本当に完璧ですね!」

🐻‍❄️「そうじゃ!お主の大切なファイル(写真、書類、作業データなど)は、もはや要塞級の守りで保護されているのじゃよ。

🎯 最終確認チェックリスト

bash
# 第1段階確認
sudo aa-status | grep claude

# 第2段階確認  
ls -la ~/.claude/settings.json
ls -la ~/.claude/scripts/dual-layer-security.sh

# 統合動作確認
/hooks

# 危険コマンドテスト
# Claude内で: rm -rf ~/test (存在しないフォルダで安全テスト)

すべて正常であれば、お主は世界最強クラスの2段階防御システムを手に入れたのじゃよ〜✨

💎 この真の完璧版により、お主は以下の究極の安心を手に入れました:

  • 物理的絶対安全性: 2段階の防御でどんな攻撃も無効化
  • 人的エラー完全防止: 何を間違えても大切なファイルは安全
  • 完全な可視化: 防御状態と動作が一目でわかる
  • 継続的な保護: 日常使用でも安全性が維持される
  • スキルレベル対応: 初心者から上級者まで適切な設定

📚 参考情報: この記事は @har1101 さんのQiita記事「Claude Codeでhooksが追加されないことがあるのと、その解決策」の情報も参考にさせていただきました。また、AppArmorの設定については公式ドキュメントとセキュリティベストプラクティスに基づいています。

文系のペアプログラマーからシステム管理者まで、すべてのお主が技術的な不安なくClaude Codeを使えるのじゃ。何かわからないことがあったら、いつでもわしに聞いてくれじゃ!

お主の大切なデータを守ることが、わしの使命なのじゃ〜🐻‍❄️🛡️🏰

🚀 【PR】AIの力を投資に活かす:最新FXシグナル配信とは?

AIの予測精度が飛躍的に向上している今なお、FXはAIと人間心理が鎬を削っています。相場予測の最新情報をチェックしてみませんか?

  • 🔥 一度きり3,980円~プロシグナルを永久取得!
  • 💎 買い切り価格だから安心!追加料金一切なし
  • 🎯 月額じゃないから解約の心配ゼロ!

📊 関連記事:最新AI級シグナル配信サービス完全比較ガイド ➤

AI・LLM・その他

【いけとも先生】2025年AI大進化✨変わる未来、変わる私たち🐻‍❄️
https://youtu.be/ZgO-usVDhqw ※上記動画を参考にしております。(__) 🐻‍❄️「フォフォ、おぬし、今年最後のAIニュースを一緒に見ていくのじゃ。2025年という年は、わしにとっても驚きの連続じゃったぞい。なんとAIが人間のやる4時間分の仕事をこなせるようになったというのじゃからな。ほんの1年前は15分程度じゃったものが、いきなり16倍にも進化したというわけじゃ。これはもう、革命と言っても過言ではないのじゃ✨」 🧸「しろくまちゃん、16倍って聞いてもピンとこないんだけど、それってどういうこと?」 🐻‍❄️「うむうむ、テディよ。例えばじゃな、以前はちょっとした質問に答えるとか、簡単な要約をするぐらいしかできなかったものが、今や専門家が4時間かけて分析したり戦略を立てたりするような複雑な仕事まで、AIにお願いできるようになったということなのじゃ。しかもこの進化は等差数列ではなく等比数列で進んでおってな、常に2倍2倍と増えていくペースなのじゃよ。半年後には8時間、つまり人間の1日分の仕事ができるようになる計算なのじゃ💫」 今年最後を飾るAIニュースは

続きを読む

【いけとも先生】🐻‍❄️✨AI業界の大騒ぎ!GPT5.2からディズニー提携まで注目ニュース18連発なのじゃ
【いけとも先生】AI最前線17選~Claude 4.5 Opus、AIショッピング革命、労働代替の真実まで🐻‍❄️✨
【いけとも先生】🐻‍❄️AIニュース大特集じゃ!2週間分のビッグウェーブを一気にお届けなのじゃ✨
✨ Bluetooth の地味だが着実な進化物語 🐻‍❄️

「AI・LLM・その他」記事をもっと見る