Claude Code 直接在你的终端运行,能读写文件、执行命令。安全问题必须重视。
权限模式
Claude Code 提供三种权限模式,通过 --permission-mode 参数或 /permissions 命令切换:
default 模式(推荐)
默认模式,每次敏感操作都需要确认:
- 写入/编辑文件前询问
- 执行 bash 命令前询问
- 访问网络前询问
claude
plan 模式
只读模式,Claude 只能读取文件和搜索,不能修改任何内容:
claude --permission-mode plan
适合:
- 代码审查
- 架构分析
- 学习理解代码库
bypassPermissions 模式
跳过所有确认,Claude 可以自由执行操作:
claude --permission-mode bypassPermissions
警告:仅在完全信任的环境中使用,比如隔离的开发容器。
敏感文件保护
.claudeignore 文件
在项目根目录创建 .claudeignore,阻止 Claude 访问敏感文件:
# 环境变量和密钥
.env
.env.*
*.key
*.pem
id_rsa*
credentials.json
# 敏感配置
config/secrets/
.aws/
.ssh/
# 大文件(避免上下文浪费)
node_modules/
*.log
dist/
build/
.gitignore 联动
Claude Code 默认尊重 .gitignore,被忽略的文件不会被读取。
网络访问控制
Claude Code 的网络访问通过工具控制:
WebFetch:获取网页内容WebSearch:搜索网络
在 default 模式下,每次网络请求都需要确认。
如果不需要网络功能,可以在 CLAUDE.md 中声明:
# 安全约束
- 禁止使用 WebFetch 和 WebSearch 工具
- 所有操作限制在本地文件系统
Bash 命令安全
危险命令拦截
Claude Code 会自动拦截危险命令:
rm -rf /sudo相关命令- 修改系统文件的命令
命令白名单
在 CLAUDE.md 中限制允许的命令:
# Bash 命令限制
只允许以下命令:
- git(版本控制)
- npm/yarn/pnpm(包管理)
- node/python(运行脚本)
- curl(仅限 localhost)
禁止:
- 任何 sudo 命令
- 直接操作 /etc、/var 等系统目录
- 安装全局包
Hooks 安全
使用 Hooks 时注意:
- 验证输入:Hook 脚本要验证 stdin 输入
- 最小权限:Hook 脚本只做必要的事
- 避免敏感操作:不要在 Hook 中处理密钥
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/check-secrets.sh"
}
]
}
]
}
}
检查敏感信息的 Hook 示例:
#!/bin/bash
input=$(cat)
content=$(echo "$input" | jq -r '.tool_input.content // empty')
# 检查是否包含敏感模式
if echo "$content" | grep -qE '(api[_-]?key|secret|password)\s*[:=]\s*["\x27]?[a-zA-Z0-9]'; then
echo "检测到可能的敏感信息" >&2
exit 2
fi
exit 0
会话隔离
每个 Claude Code 会话是独立的:
- 不同项目的会话互不影响
- 会话结束后临时数据清除
- 使用
--resume恢复会话时会加载历史上下文
最佳实践
开发环境
- 使用 default 模式,保持确认提示
- 配置
.claudeignore保护敏感文件 - 定期检查 Claude 的操作历史
CI/CD 环境
- 使用 plan 模式进行代码审查
- 限制网络访问
- 在隔离容器中运行
团队协作
- 在
.claude/settings.json中统一安全配置 - 将安全规则写入 CLAUDE.md 并提交到仓库
- 代码审查时关注 Claude 生成的代码是否有安全漏洞
安全检查清单
- 配置了
.claudeignore保护敏感文件 - CLAUDE.md 中声明了安全约束
- 使用 default 模式而非 bypassPermissions
- 敏感操作前仔细检查 Claude 的计划
- 定期审查 Claude 生成的代码
- CI/CD 中使用受限权限运行
安全是持续的过程,不是一次性配置。保持警惕,定期审查。