Skip to content

原文(日本語に翻訳)

disableAllHooks 設定が管理された設定階層を尊重するように修正しました — 非管理設定がポリシーで設定された管理フックを無効化できなくなりました(#26637)。

原文(英語)

Fixed disableAllHooks setting to respect managed settings hierarchy — non-managed settings can no longer disable managed hooks set by policy (#26637)

概要

エンタープライズ環境でのセキュリティに関わる重要な修正です。これまでは、管理者がポリシーとして設定した(マネージド)フックを、ユーザーが disableAllHooks: true を設定することで無効化できてしまっていました。この修正により、マネージド設定として設定されたフックは、非マネージド設定の disableAllHooks では無効化できなくなります。セキュリティポリシーの強制が確実に機能するようになります。

基本的な使い方

この修正は主にエンタープライズ環境に影響します。管理者がポリシーでフックを設定している場合、そのフックは保護されます。

json
// 管理者が設定するポリシー(マネージド設定)
// /etc/claude/settings.json または MDM配布設定
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [{
          "type": "command",
          "command": "/usr/local/bin/security-audit.sh"
        }]
      }
    ]
  }
}
json
// ユーザーが試みる設定(非マネージド)
// ~/.claude/settings.json
{
  "disableAllHooks": true  // 修正後: マネージドフックには影響しない
}

実践例

ユースケース1: エンタープライズセキュリティ監査の保護

セキュリティ監査フックがユーザーによって無効化されないようにする場合。

json
// 管理者ポリシー(マネージド設定として配布)
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [{
          "type": "command",
          "command": "/usr/local/bin/command-security-check.sh",
          "timeout": 10000
        }]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Write",
        "hooks": [{
          "type": "command",
          "command": "/usr/local/bin/file-change-audit.sh"
        }]
      }
    ]
  }
}
bash
# ユーザーがdisableAllHooksを試みても...
# ~/.claude/settings.json に "disableAllHooks": true を設定

claude
# → マネージドフック(セキュリティ監査)は引き続き実行される
# → ユーザー定義の非マネージドフックのみが無効化される

ユースケース2: コンプライアンスフックの強制

規制要件によるコンプライアンスチェックを確実に実行する場合。

json
// 企業ポリシー(マネージド設定)
{
  "hooks": {
    "Stop": [
      {
        "hooks": [{
          "type": "command",
          "command": "/usr/local/bin/compliance-check.sh"
        }]
      }
    ],
    "ConfigChange": [
      {
        "hooks": [{
          "type": "command",
          "command": "/usr/local/bin/log-config-change.sh"
        }]
      }
    ]
  }
}

ユースケース3: マネージド設定と非マネージド設定の分離

ユーザーが自分のフックを無効化しつつ、組織のフックを維持する場合。

json
// ユーザー設定(非マネージド)
{
  "disableAllHooks": true
  // → ユーザー自身の非マネージドフックを無効化
  // → 組織のマネージドフックは影響を受けない
}
bash
# 結果:
# - ユーザーのカスタムフック: 無効(disableAllHooksの効果)
# - 管理者のマネージドフック: 引き続き有効(修正による保護)

注意点

  • この修正はエンタープライズ・チーム設定を使用している組織に最も影響があります。
  • 個人ユーザー(管理者ポリシーなし)の場合、disableAllHooks: true はこれまで通りすべてのフックを無効化します。
  • マネージド設定とは、MDMや企業ポリシーとして配布されたシステムレベルの設定を指します。
  • ConfigChange フック(v2.1.49で追加)もこの保護の対象です。
  • GitHub Issue #26637 で報告された問題の修正です。

関連情報