Skip to content

feat: 工具权限控制与安全沙箱 #8

@xiaotonng

Description

@xiaotonng

功能描述

为 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: 10

3. 调用限制

@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"
}

任务清单

  • 设计权限模型
  • 实现权限检查中间件
  • 实现路径匹配引擎
  • 实现速率限制器
  • 实现执行沙箱
  • 添加审计日志
  • 实现用户角色管理
  • 编写安全文档

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions