-
Notifications
You must be signed in to change notification settings - Fork 14
Open
Labels
enhancementNew feature or requestNew feature or request
Description
功能描述
为 MCP 工具提供细粒度的权限控制和安全执行环境,确保工具调用的安全性。
背景
部分工具(如文件操作、代码执行)可能存在安全风险。需要提供权限控制机制,限制工具的访问范围和执行能力。
使用场景
from lc2mcp import register_tools
from lc2mcp.security import ToolPermissions, Sandbox
# 定义权限策略
permissions = ToolPermissions()
permissions.allow("file_read", paths=["/data/*", "/tmp/*"])
permissions.deny("file_write", paths=["/etc/*", "/sys/*"])
permissions.rate_limit("web_search", max_calls=100, period="1h")
# 应用权限
register_tools(mcp, tools, permissions=permissions)
# 沙箱执行
sandbox = Sandbox(
timeout=30, # 超时秒数
memory_limit="512MB",
network=False, # 禁用网络
filesystem="readonly"
)
register_tools(mcp, dangerous_tools, sandbox=sandbox)权限模型
1. 资源权限
permissions:
file_system:
read: ["/data/*", "/tmp/*"]
write: ["/tmp/*"]
deny: ["/etc/*", "/root/*", "~/.ssh/*"]
network:
allow: ["api.openai.com", "*.google.com"]
deny: ["internal.*", "localhost"]
environment:
expose: ["OPENAI_API_KEY", "HOME"]
hide: ["AWS_*", "DATABASE_*"]2. 用户权限
user_permissions:
admin:
tools: ["*"]
rate_limit: null
standard:
tools: ["search_*", "query_*"]
deny: ["execute_*", "file_write"]
rate_limit:
per_minute: 60
per_hour: 1000
guest:
tools: ["get_weather", "search_web"]
rate_limit:
per_minute: 103. 调用限制
@permissions.require("admin")
@permissions.rate_limit(10, "1m")
@permissions.audit_log(level="info")
def dangerous_operation(cmd: str) -> str:
...安全沙箱
执行隔离
- 超时控制
- 内存限制
- CPU 限制
- 进程隔离
网络隔离
- 白名单 URL
- 禁用本地网络
- 请求审计
文件系统隔离
- 只读挂载
- 路径白名单
- 临时文件自动清理
审计日志
{
"timestamp": "2024-01-15T10:30:00Z",
"user_id": "user_123",
"tool": "file_read",
"args": {"path": "/data/report.csv"},
"result": "success",
"duration_ms": 45,
"permissions_checked": ["file_system.read"],
"client": "chatgpt",
"ip": "1.2.3.4"
}任务清单
- 设计权限模型
- 实现权限检查中间件
- 实现路径匹配引擎
- 实现速率限制器
- 实现执行沙箱
- 添加审计日志
- 实现用户角色管理
- 编写安全文档
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request