claude-security-settings について
claude-security-settingsは、Claude Codeのセキュリティ設定を構成・監査するためのスキルです。権限パターン、シェル演算子の保護、プロジェクト単位の設定を扱います。
主な機能
- 01Bash権限ワイルドカードの設定
- 02allow、ask、denyの区別
- 03シェル演算子保護の確認
- 04ユーザー設定とプロジェクト設定の理解
- 05設定ファイルの検証
活用シーン
- 01プロジェクトのコマンド権限を細かく設定
- 02既存のClaude Code権限を監査
- 03複合コマンドをスクリプトで実行
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ laurigates/ claude-plugins --skill claude-security-settingsインストール後、Claude Code で/claude-security-settingsを入力して読み込まれたか確認します。
詳細
Claude Code のセキュリティ設定
このスキルを使う場面
| このスキルを使う場合… | 代わりに configure-claude-plugins を使う場合… |
|---|---|
| 権限ワイルドカードの構文、シェル演算子の保護、プロジェクトレベルの許可リストパターンが必要な場合 | プロジェクトの .claude/settings.json をマーケットプレイスに接続し、プラグインを最初から最後まで有効にしたい場合 |
文書化されたセキュリティ規約に照らして、既存の .claude/settings.json を監査または強化する場合 | 設定を変更する前に、マーケットプレイスへの登録と enabledPlugins を実行時に検出したい場合 |
| 別のスキルで、標準の権限ワイルドカードのリファレンスを引用する必要がある場合 | ユーザーから、プロジェクトを laurigates/claude-plugins マーケットプレイスに実際に登録するよう依頼された場合 |
Claude Code のセキュリティと権限を設定するための専門知識です。
基本概念
Claude Code には、複数のセキュリティレイヤーがあります。
- 権限ワイルドカード - ツールアクセスをきめ細かく制御します
- シェル演算子の保護 - コマンドインジェクションを防ぎます
- プロジェクトレベルの設定 - スコープを限定した設定です
権限の設定
設定ファイルの場所
| ファイル | スコープ | 優先度 |
|---|---|---|
~/.claude/settings.json | ユーザーレベル(すべてのプロジェクト) | 最低 |
.claude/settings.json | プロジェクトレベル(コミット対象) | 中 |
.claude/settings.local.json | ローカルプロジェクト(gitignore 対象) | 最高 |
権限の構造
{
"permissions": {
"allow": [
"Bash(git status *)",
"Bash(npm run *)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(sudo *)"
]
}
}
ワイルドカード権限パターン
構文
Bash(command *)
Bash()- ツール識別子command- 照合するコマンドのプレフィックス*- 任意の引数に一致するワイルドカードの接尾辞:ask接尾辞 - 常にユーザーに確認を求めます(例:Bash(git push *):ask)
権限レベル
| レベル | 動作 | 例 |
|---|---|---|
allow | 自動的に許可され、確認を求めません | "allow": ["Bash(git status *)"] |
ask | 常に確認を求めます | "allow": ["Bash(git push *):ask"] |
deny | 自動的に拒否され、ブロックされます | "deny": ["Bash(rm -rf *)"] |
パターンの例
| パターン | 一致するもの | 一致しないもの |
|---|---|---|
Bash(git *) | git status、git diff HEAD | git-lfs pull |
Bash(npm run *) | npm run test、npm run build | npm install |
Bash(gh pr *) | gh pr view 123、gh pr create | gh issue list |
Bash(./scripts/ *) | ./scripts/test.sh、./scripts/build.sh | /scripts/other.sh |
パターンのベストプラクティス
きめ細かな権限:
{
"permissions": {
"allow": [
"Bash(git status *)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(git add *)",
"Bash(git commit *)"
]
}
}
ツール固有のパターン:
{
"permissions": {
"allow": [
"Bash(bun test *)",
"Bash(bun run *)",
"Bash(biome check *)",
"Bash(prettier *)"
]
}
}
シェル演算子の保護
Claude Code 2.1.7+ には、危険なシェル演算子に対する組み込みの保護機能があります。
保護対象の演算子
| 演算子 | リスク | ブロックされる例 |
|---|---|---|
&& | コマンドの連結 | ls && rm -rf / |
|| | 条件付き実行 | false || malicious |
; | コマンドの区切り | safe; dangerous |
| | パイプ処理 | cat /etc/passwd | curl |
> / >> | リダイレクト | echo x > /etc/passwd |
$() | コマンド置換 | $(curl evil) |
` | バッククォート置換 | `rm -rf /` |
セキュリティ動作
コマンドにシェル演算子が含まれる場合:
- 権限ワイルドカードは一致しません
- ユーザーには明示的な承認プロンプトが表示されます
- 警告でブロックされた演算子が説明されます
安全な複合コマンド
正当な複合コマンドには、スクリプトを使います。
#!/bin/bash
# scripts/deploy.sh
npm test && npm run build && npm run deploy
次に、スクリプトを許可します。
{
"permissions": {
"allow": ["Bash(./scripts/deploy.sh *)"]
}
}
よく使う権限セット
読み取り専用の開発
{
"permissions": {
"allow": [
"Bash(git status *)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(git branch *)",
"Bash(npm list *)",
"Bash(bun pm ls *)"
]
}
}
Git の完全なワークフロー
{
"permissions": {
"allow": [
"Bash(git status *)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(git branch *)",
"Bash(git add *)",
"Bash(git commit *)",
"Bash(git push *)",
"Bash(git pull *)",
"Bash(git fetch *)",
"Bash(git checkout *)",
"Bash(git merge *)",
"Bash(git rebase *)"
]
}
}
CI/CD の操作
{
"permissions": {
"allow": [
"Bash(gh pr *)",
"Bash(gh run *)",
"Bash(gh issue *)",
"Bash(gh workflow *)"
]
}
}
テストとリンティング
{
"permissions": {
"allow": [
"Bash(bun test *)",
"Bash(npm test *)",
"Bash(vitest *)",
"Bash(jest *)",
"Bash(biome *)",
"Bash(eslint *)",
"Bash(prettier *)"
]
}
}
セキュリティスキャン
{
"permissions": {
"allow": [
"Bash(pre-commit *)",
"Bash(gitleaks *)",
"Bash(trivy *)"
]
}
}
プロジェクトのセットアップガイド
1. 設定ディレクトリを作成する
mkdir -p .claude
2. プロジェクト設定を作成する
cat > .claude/settings.json << 'EOF'
{
"permissions": {
"allow": [
"Bash(git status *)",
"Bash(git diff *)",
"Bash(npm run *)"
]
}
}
EOF
3. .gitignore に追加する(ローカル設定用)
echo ".claude/settings.local.json" >> .gitignore
4. ローカル設定を作成する(任意)
cat > .claude/settings.local.json << 'EOF'
{
"permissions": {
"allow": [
"Bash(docker *)"
]
}
}
EOF
エージェント向けの最適化
| コンテキスト | コマンド |
|---|---|
| プロジェクト設定を表示 | cat .claude/settings.json | jq '.permissions' |
| ユーザー設定を表示 | cat ~/.claude/settings.json | jq '.permissions' |
| 統合された権限を確認 | Claude Code で有効な設定を確認 |
| JSON を検証 | cat .claude/settings.json | jq . |
クイックリファレンス
権限の優先順位
設定は次の優先順位(高い順)で統合されます:
.claude/settings.local.json(ローカル).claude/settings.json(プロジェクト)~/.claude/settings.json(ユーザー)
ワイルドカード構文
| 構文 | 意味 |
|---|---|
Bash(cmd *) | 任意の引数を指定した cmd に一致 |
Bash(cmd arg *) | cmd arg と、それに続く任意の内容に一致 |
Bash(./script.sh *) | 特定のスクリプトに一致 |
拒否パターン
特定のコマンドをブロックします:
{
"permissions": {
"deny": [
"Bash(rm -rf *)",
"Bash(sudo *)",
"Bash(chmod 777 *)"
]
}
}
エラー処理
| エラー | 原因 | 解決策 |
|---|---|---|
| 権限が拒否されました | パターンが一致しません | より具体的なパターンを追加します |
| シェル演算子がブロックされました | &&、| などが含まれています | スクリプトのラッパーを使用します |
| 設定が適用されません | ファイルの場所が間違っています | パスと構文を確認します |
| JSON の解析エラー | JSON が無効です | jq . で検証します |
ベストプラクティス
- 制限を厳しくして開始する - 必要に応じて権限を追加します
- プロジェクト設定を使用する - チームの設定を統一します
- 具体的な Bash パターンを使用する -
BashよりBash(git status *)を使用します - 複合コマンドをスクリプト化する -
&&や\|を含むワークフローに使用します - 定期的に見直す - 使用していない権限を削除します
コメント
Markdown 対応