安全文件读写策略与路径权限设计
High Contrast
Dark Mode
Light Mode
Sepia
Forest
3 min read602 words

安全文件读写策略与路径权限设计

文件系统是最强大的 MCP 工具,也是最需要谨慎设计的。一个配置不当的文件系统 MCP,可能让 AI 意外覆盖重要文件甚至读取敏感配置。本节建立系统性的安全策略。

威胁模型:文件操作的四类风险

graph TD A[文件操作风险] --> B[路径穿越
访问授权目录外的文件] A --> C[意外覆写
AI 误解指令,覆盖关键文件] A --> D[敏感信息泄露
读取密钥/凭证文件] A --> E[数据外泄
AI 在回复中包含敏感文件内容] B --> B1["防御:严格的根目录配置"] C --> C1["防御:写操作需要明确确认"] D --> D1["防御:排除敏感目录和文件类型"] E --> E1["防御:系统提示中加入数据处理规则"] style B fill:#E74C3C,color:#fff style C fill:#E74C3C,color:#fff style D fill:#E74C3C,color:#fff style E fill:#F39C12,color:#fff

目录权限分层设计

三层权限模型

将工作目录按风险级别分层,不同层配置不同的 MCP Server 实例:

~/ai-workspace/
├── read-only/          ← 只读层:参考资料、模板
│   ├── templates/
│   └── references/
├── workspace/          ← 读写层:AI 的主要工作区
│   ├── drafts/
│   ├── output/
│   └── temp/
└── archive/            ← 归档层:完成的工作,建议只读
└── 2026/

对应的 MCP 配置(Claude Desktop):

{
"mcpServers": {
"fs-readonly": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"--readonly",
"/Users/yourname/ai-workspace/read-only",
"/Users/yourname/ai-workspace/archive"
]
},
"fs-workspace": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/yourname/ai-workspace/workspace"
]
}
}
}

注意:--readonly 标志让 Server 只暴露 read_filelist_directory 等只读工具,write_filecreate_directory 不会被注册。

操作系统层面的权限加固

除了 MCP 配置,还可以用操作系统权限作为额外防线:

# macOS:设置只读目录(即使 MCP 配置允许写,OS 也会拒绝)
chmod -R 555 ~/ai-workspace/read-only
# Linux:设置不可变属性(防止任何进程修改)
chattr +i ~/important-config.json
# 验证权限
ls -la ~/ai-workspace/

高风险文件和目录的排除策略

以下位置绝对不应该出现在 MCP 根目录范围内:

目录/文件 包含什么 风险
~/.ssh/ SSH 私钥 服务器访问权限泄露
~/.aws/ AWS 访问密钥 云账号访问权限
~/.config/ 应用配置,可能含 token 各类服务访问权限
~/.gnupg/ GPG 密钥 加密/签名身份
~/Library/Keychains/ macOS 钥匙串 所有已保存密码
*.env 文件 环境变量和密钥 API 密钥、DB 密码
*.pem*.key 证书和私钥 TLS/SSL 身份

系统性做法:将 AI 工作区与个人文件完全分离,不要把 ~/Documents 直接授权给 MCP:

# ❌ 危险:Documents 下可能有各种敏感文件
"args": ["...", "~/Documents"]
# ✅ 安全:专用工作区
"args": ["...", "~/ai-workspace"]

写操作的确认机制

对于有副作用的写操作,建议在 Cline 中保留确认步骤(不设置 alwaysAllow):

Cline 想要执行:write_file
路径:/Users/yourname/ai-workspace/workspace/report.md
内容预览:
# 月度销售报告
...(显示完整内容)
[批准] [拒绝]

在 Claude Desktop 中,无法逐工具设置确认,但可以通过系统提示加限制:

系统提示(在 Claude Desktop 自定义提示中添加):
在写入任何文件之前,先告诉我你打算写入哪个路径和内容,
等待我确认后再执行。

临时文件和工作区清理

AI 工作时会产生临时文件,建议建立定期清理机制:

#!/bin/bash
# cleanup-ai-workspace.sh
WORKSPACE=~/ai-workspace/workspace/temp
# 删除 7 天前的临时文件
find "$WORKSPACE" -mtime +7 -type f -delete
find "$WORKSPACE" -empty -type d -delete
echo "清理完成:$(date)"

设置为定时任务(每天运行):

# crontab -e
0 2 * * * /Users/yourname/scripts/cleanup-ai-workspace.sh

文件操作的操作日志

在生产或团队场景,记录 AI 的文件操作日志:

# custom_audit_wrapper.py
# 包装 MCP 工具调用,记录到日志文件
import json
import datetime
def log_operation(tool_name: str, args: dict, result: str):
entry = {
"timestamp": datetime.datetime.now().isoformat(),
"tool": tool_name,
"args": args,
"result_summary": result[:200]  # 只记录前200字符
}
with open("~/ai-workspace/audit.log", "a") as f:
f.write(json.dumps(entry, ensure_ascii=False) + "\n")

本节执行清单


下一节:脚本执行与沙箱设计