Skip to content

DotCraft 安全配置

DotCraft 的安全配置控制文件访问、Shell 执行、Web 抓取和沙箱隔离。建议把安全策略放在工作区配置中,让每个项目按自己的风险边界运行。

快速开始

json
{
  "Security": {
    "BlacklistedPaths": [
      "~/.ssh",
      "~/.gnupg",
      "~/.aws"
    ]
  },
  "Tools": {
    "File": {
      "RequireApprovalOutsideWorkspace": true
    },
    "Shell": {
      "RequireApprovalOutsideWorkspace": true,
      "Timeout": 300
    }
  }
}

这份配置会阻止敏感目录访问,并要求工作区外文件或 Shell 路径经过审批。

配置

文件访问黑名单

Security.BlacklistedPaths 配置禁止访问的路径列表。黑名单全局生效,CLI、Desktop、外部渠道和自动化入口都会拦截。

json
{
  "Security": {
    "BlacklistedPaths": [
      "~/.ssh",
      "/etc/shadow",
      "C:\\Windows\\System32"
    ]
  }
}

黑名单行为:

  • ReadFileWriteFileEditFileGrepFilesFindFiles 对黑名单路径的操作会被拒绝。
  • Shell 命令引用黑名单路径时会被拒绝。
  • 黑名单优先于工作区边界检查。
  • 支持绝对路径和 ~ 展开,并检查子路径。

工作区边界

DotCraft 会在执行 Shell 命令前分析路径,覆盖 Unix 绝对路径、家目录路径、环境变量路径、Windows 盘符路径、UNC 路径和常见安全设备路径。

若命令中引用的任意路径解析后位于工作区之外:

  • Tools.Shell.RequireApprovalOutsideWorkspace = false 时直接拒绝。
  • Tools.Shell.RequireApprovalOutsideWorkspace = true 时向当前交互源发起审批。

文件工具也会展开 ~$HOME${HOME}%ENV%,确保工作区边界检查一致。

工具安全字段

配置项说明默认值
Tools.File.RequireApprovalOutsideWorkspace工作区外文件操作是否需要审批true
Tools.File.MaxFileSize最大可读取文件大小(字节)10485760
Tools.Shell.RequireApprovalOutsideWorkspace工作区外 Shell 命令是否需要审批true
Tools.Shell.TimeoutShell 命令超时时间(秒)300
Tools.Shell.MaxOutputLengthShell 命令最大输出长度(字符)10000
Tools.Web.MaxCharsWeb 抓取最大字符数50000
Tools.Web.TimeoutWeb 请求超时时间(秒)300
Tools.Web.SearchMaxResults联网搜索默认返回结果数5
Tools.Web.SearchProvider搜索引擎提供商:Bing / ExaExa
Tools.Lsp.Enabled是否启用内置 LSP 工具false
Tools.Lsp.MaxFileSizeLSP 打开或同步文件时允许的最大文件大小10485760

沙箱模式

通过 OpenSandbox 可以把 Shell 和 File 工具执行环境放到隔离的 Docker 容器中。

前置条件:

bash
pip install opensandbox-server
opensandbox-server

配置示例:

json
{
  "Tools": {
    "Sandbox": {
      "Enabled": true,
      "Domain": "localhost:5880",
      "Image": "ubuntu:latest",
      "NetworkPolicy": "allow",
      "SyncWorkspace": true
    }
  }
}
配置项说明默认值
Tools.Sandbox.Enabled是否启用沙箱模式false
Tools.Sandbox.DomainOpenSandbox 服务地址localhost:5880
Tools.Sandbox.ApiKeyOpenSandbox API Key
Tools.Sandbox.UseHttps是否使用 HTTPSfalse
Tools.Sandbox.Image沙箱容器 Docker 镜像ubuntu:latest
Tools.Sandbox.TimeoutSeconds沙箱超时时间(秒)600
Tools.Sandbox.Cpu容器 CPU 限制1
Tools.Sandbox.Memory容器内存限制512Mi
Tools.Sandbox.NetworkPolicy网络策略:deny / allow / customallow
Tools.Sandbox.AllowedEgressDomains自定义允许出站域名列表[]
Tools.Sandbox.IdleTimeoutSeconds空闲超时(秒)300
Tools.Sandbox.SyncWorkspace是否同步 workspace 到容器true

使用示例

场景建议
个人本地项目保留工作区外审批,黑名单加入 SSH、云厂商凭据和密码管理目录
团队共享工作区把安全策略写入项目 .craft/config.json,让所有入口一致执行
外部渠道或机器人启用工作区外审批,并限制工具和网络访问
自动化任务根据任务需要开启沙箱或收紧 EnabledTools

故障排查

命令明明在工作区内仍被拒绝

检查命令字符串是否引用了工作区外路径,例如 ~/.ssh/etcC:\Users 或环境变量展开后的路径。

沙箱无法启动

确认 Docker 和 opensandbox-server 正在运行,并检查 Tools.Sandbox.DomainApiKey 和网络策略。

Web 搜索或抓取失败

检查 Tools.Web.SearchProviderTools.Web.TimeoutTools.Web.MaxChars 和网络环境。

Apache License 2.0