第五章 Claude Code 权限控制
  AI

第五章 Claude Code 权限控制

 次点击
34 分钟阅读

概述

Claude Code 提供了强大的权限控制系统,让您能够精确控制 AI 代理可以执行的操作。本教程将重点介绍 Bash 命令权限MCP (Model Context Protocol) 权限 的实践配置和使用方法。

因为在使用Claude Code的过程中我们会用到很多工具,尤其是Bash命令和Mcp Tools,Claude Code中使用他们是需要你在对话的过程中不断提示授权的,如果已经确定要使用某些命令,并且该命令也是安全、必要的,那我们无需再次人工确认的动作就需要设置这个配置,所以这一章也是常见使用配置项。

权限系统基础

Claude Code 使用分层权限系统,支持以下权限规则:

  • 允许 (Allow) - 无需手动批准即可使用指定工具

  • 询问 (Ask) - 使用工具前需要用户确认(优先级高于允许规则)

  • 拒绝 (Deny) - 阻止使用指定工具(优先级最高)

权限配置位置

权限可以在以下位置配置:

  • 用户设置:~/.claude/settings.json

  • 项目设置:.claude/settings.json

  • 本地项目设置:.claude/settings.local.json

  • 企业策略:系统级管理设置

Bash 权限控制实践

基础配置

Bash 权限控制允许您精确管理 Claude Code 可以执行的 shell 命令。

1. 基本权限规则

{
  "permissions": {
    "allow": [
      "Bash(npm run build)",
      "Bash(npm run test:*)",
      "Bash(git status)",
      "Bash(git add .)",
      "Bash(git commit -m *)"
    ],
    "ask": [
      "Bash(npm install *)",
      "Bash(yarn install *)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(sudo *)",
      "Bash(curl *)"
    ]
  }
}

2. 权限规则详解

精确匹配

"Bash(npm run build)"  // 只允许执行 "npm run build"

前缀匹配(使用 : 通配符)*

"Bash(npm run test:*)"  // 允许所有以 "npm run test" 开头的命令
"Bash(git commit -m *)"  // 允许所有 git commit 操作

安全限制示例

{
  "permissions": {
    "allow": [
      "Bash(npm run *)",        // 允许所有 npm 脚本
      "Bash(yarn *)",           // 允许所有 yarn 命令
      "Bash(git status)",       // 允许查看 git 状态
      "Bash(git log *)",        // 允许查看 git 历史
      "Bash(ls *)",             // 允许列出文件
      "Bash(cat *)",            // 允许查看文件内容
      "Bash(grep *)"            // 允许搜索文件
    ],
    "ask": [
      "Bash(git push *)",       // 推送前需要确认
      "Bash(git pull *)",       // 拉取前需要确认
      "Bash(npm install *)",    // 安装依赖前需要确认
      "Bash(docker *)"          // Docker 命令需要确认
    ],
    "deny": [
      "Bash(rm *)",             // 禁止删除文件
      "Bash(sudo *)",           // 禁止使用 sudo
      "Bash(chmod *)",          // 禁止修改文件权限
      "Bash(curl http://*)",    // 禁止 HTTP 请求
      "Bash(wget *)",           // 禁止下载文件
      "Bash(ssh *)"             // 禁止 SSH 连接
    ]
  }
}

3. 开发环境特定配置

Node.js 项目

{
  "permissions": {
    "allow": [
      "Bash(npm run dev)",
      "Bash(npm run build)",
      "Bash(npm run test)",
      "Bash(npm run lint)",
      "Bash(npx *)",
      "Bash(node *)"
    ],
    "ask": [
      "Bash(npm install *)",
      "Bash(npm uninstall *)",
      "Bash(npm update *)"
    ]
  }
}

Python 项目

{
  "permissions": {
    "allow": [
      "Bash(python -m *)",
      "Bash(pytest *)",
      "Bash(pip list)",
      "Bash(python *.py)",
      "Bash(black *)",
      "Bash(flake8 *)"
    ],
    "ask": [
      "Bash(pip install *)",
      "Bash(pip uninstall *)"
    ]
  }
}

4. 安全最佳实践

  1. 最小权限原则 - 只授予必需的权限

  2. 分层配置 - 在项目级别设置特定权限

  3. 定期审查 - 定期检查和更新权限配置

  4. 测试环境隔离 - 在测试环境中使用更宽松的权限

重要安全注意事项:

// ❌ 危险配置 - 避免使用
{
  "permissions": {
    "allow": [
      "Bash(*)"  // 允许所有命令 - 极其危险!
    ]
  }
}

// ✅ 安全配置 - 推荐使用
{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git status)",
      "Bash(ls *)"
    ],
    "ask": [
      "Bash(git push *)",
      "Bash(npm install *)"
    ],
    "deny": [
      "Bash(rm *)",
      "Bash(sudo *)"
    ]
  }
}

总之,如果要用Bash命令就要把权限给他设置好,否则一直会询问你是否要执行的允许权限的过程确认。


MCP 权限控制实践

MCP 简介

Model Context Protocol (MCP) 允许 Claude Code 与外部服务和工具集成。MCP 权限控制确保只有授权的 MCP 服务器和工具可以被使用。

MCP 工具配置教程

在使用 MCP 权限控制之前,您需要先配置 MCP 服务器。以下是完整的配置流程。

1. MCP 服务器配置

首先,您需要在 Claude Code 的配置文件中添加 MCP 服务器配置。在您的 settings.json 文件中添加 mcpServers 配置:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "your_github_token_here"
      }
    },
    "database": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "POSTGRES_CONNECTION_STRING": "postgresql://user:password@localhost:5432/mydb"
      }
    },
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem"],
      "args": ["/path/to/allowed/directory"]
    }
  }
}

2. 查看可用的 MCP 工具

配置完 MCP 服务器后,您可以通过以下方式查看每个服务器提供的工具:

方法一:使用 Claude Code 命令

claude-code --list-mcp-tools

方法二:在聊天中询问

请列出当前配置的 MCP 服务器和它们提供的工具

假设 GitHub MCP 服务器提供以下工具:

  • create_repository

  • get_repository

  • list_repositories

  • create_issue

  • get_issue

  • list_issues

  • create_pull_request

  • get_pull_request

  • search_repositories

  • fork_repository

3. 选择性工具授权示例

场景:只授权 GitHub MCP 服务器中的 get_issuelist_issues 两个工具

{
  "permissions": {
    "allow": [
      "mcp__github__get_issue",      // 只允许获取单个 issue
      "mcp__github__list_issues"     // 只允许列出 issues
    ],
    "ask": [
      // 可选:某些操作需要确认
    ],
    "deny": [
      "mcp__github__create_repository",   // 禁止创建仓库
      "mcp__github__create_issue",        // 禁止创建 issue
      "mcp__github__create_pull_request", // 禁止创建 PR
      "mcp__github__fork_repository",     // 禁止 fork 仓库
      "mcp__github__search_repositories"  // 禁止搜索仓库
    ]
  }
}

场景:数据库 MCP 服务器只允许查询操作

假设数据库 MCP 服务器提供工具:

  • execute_query

  • create_table

  • drop_table

  • insert_data

  • update_data

  • delete_data

  • describe_table

  • list_tables

配置只允许安全的读取操作:

{
  "permissions": {
    "allow": [
      "mcp__database__execute_query",   // 允许执行查询(需要额外验证查询类型)
      "mcp__database__describe_table",  // 允许查看表结构
      "mcp__database__list_tables"      // 允许列出表
    ],
    "ask": [
      // 写操作需要用户确认
      "mcp__database__insert_data",
      "mcp__database__update_data"
    ],
    "deny": [
      "mcp__database__drop_table",      // 完全禁止删除表
      "mcp__database__delete_data",     // 完全禁止删除数据
      "mcp__database__create_table"     // 禁止创建新表
    ]
  }
}

4. 复杂场景:多服务器精确控制

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "your_token"
      }
    },
    "slack": {
      "command": "npx", 
      "args": ["-y", "@modelcontextprotocol/server-slack"],
      "env": {
        "SLACK_BOT_TOKEN": "your_slack_token"
      }
    },
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem"],
      "args": ["/workspace/allowed-directory"]
    }
  },
  
  "permissions": {
    "allow": [
      // GitHub: 只允许读取操作
      "mcp__github__get_issue",
      "mcp__github__list_issues",
      "mcp__github__get_repository",
      
      // Slack: 只允许发送消息和读取频道
      "mcp__slack__send_message",
      "mcp__slack__list_channels",
      
      // 文件系统: 只允许读取操作
      "mcp__filesystem__read_file",
      "mcp__filesystem__list_directory"
    ],
    
    "ask": [
      // GitHub: 创建操作需要确认
      "mcp__github__create_issue",
      "mcp__github__create_pull_request",
      
      // Slack: 频道管理需要确认
      "mcp__slack__create_channel",
      "mcp__slack__invite_user",
      
      // 文件系统: 写操作需要确认
      "mcp__filesystem__write_file",
      "mcp__filesystem__create_directory"
    ],
    
    "deny": [
      // GitHub: 禁止危险操作
      "mcp__github__delete_repository",
      "mcp__github__force_push",
      
      // Slack: 禁止管理员操作
      "mcp__slack__delete_channel",
      "mcp__slack__kick_user",
      
      // 文件系统: 禁止删除操作
      "mcp__filesystem__delete_file",
      "mcp__filesystem__delete_directory"
    ]
  }
}

管理和监控

查看当前权限

使用 /permissions 命令在 Claude Code 中查看当前权限配置:

/permissions

这将显示:

  • 所有权限规则及其来源

  • 当前权限模式

  • 附加目录配置

权限调试

当权限配置不按预期工作时:

  1. 检查权限优先级

    • 企业策略 > 命令行参数 > 本地项目设置 > 共享项目设置 > 用户设置

  2. 验证语法

    • 确保 JSON 格式正确

    • 检查 MCP 权限语法(不支持通配符 *

    • 验证 Bash 权限前缀匹配规则

  3. 测试权限

    • 使用简单命令测试权限是否生效

    • 检查日志输出了解权限决策过程

安全建议

1. 权限设计原则

  • 最小权限:只授予必要的权限

  • 分层管理:不同环境使用不同权限级别

  • 定期审查:定期检查和更新权限配置

  • 监控记录:记录权限使用情况

2. 常见安全陷阱

  • 避免使用过于宽泛的通配符

  • 不要在生产环境中使用 bypassPermissions 模式

  • 谨慎配置网络访问相关权限

  • 定期更新和维护权限配置

3. 企业部署建议

  • 使用企业策略强制执行安全标准

  • 为不同角色配置不同权限模板

  • 实施权限审计和合规检查

  • 建立权限变更审批流程

总结

Claude Code 的权限控制系统为您提供了细粒度的安全控制能力。通过合理配置 Bash 和 MCP 权限,您可以:

  • 确保 AI 代理只能执行授权操作

  • 在不同环境中实施不同安全策略

  • 平衡功能性和安全性需求

  • 满足企业合规要求

记住,良好的权限配置是安全使用 Claude Code 的关键。建议从严格的权限开始,然后根据实际需要逐步放宽限制。

© 本文著作权归作者所有,未经许可不得转载使用。