沙箱与文件保护
LanMate 执行命令和写文件时,默认跑在受限环境里:系统级沙箱隔离命令执行,文件保护限制可写入范围。两层独立生效,正常使用无需配置。
系统沙箱
沙箱用的是操作系统原生隔离机制,按平台自动选择:
| 系统 | 后端 | 说明 |
|---|---|---|
| macOS | Seatbelt(sandbox-exec) |
系统自带,无需安装 |
| Linux | Landlock 优先,bubblewrap 回退 | Landlock 内核原生;两者都不可用时见下方「沙箱不可用时」 |
| Windows | 低完整性进程 | 系统自带,无需安装 |
| HarmonyOS | 系统应用沙箱 | 操作系统强制执行,固定为仅工作目录,此设置不可更改 |
Agent 执行的命令(bash、脚本、内核进程)都在沙箱内运行,无法越界写文件;内置办公脚本与连接器进程例外,见「覆盖范围」。
文件保护范围
设置 → 安全 → 文件保护,两档可选:
| 档位 | 行为 |
|---|---|
| 仅工作目录(默认) | 通过系统沙箱限制可写范围;写工作目录外的文件时弹窗请求授权,批准后放行 |
| 不限制 | 关闭文件保护,可写任意文件,仅受审批级别约束 |
「仅工作目录」下,Agent 可以写入的范围:
| 权限 | 范围 |
|---|---|
| 读写 | 当前项目工作目录 |
| 读写 | 系统临时目录(macOS /tmp、TMPDIR;Windows %TEMP%;Linux /tmp) |
| 读写 | 当前会话的产物目录(报告、图表等中间文件) |
| 不可写 | 上述之外的任何路径,首次写入时弹出授权卡片 |
越界写入的授权是会话级的:批准一次后,本会话再写同一路径不再询问,新会话重新确认。经常需要写的目录(比如固定的输出文件夹)可以加入常驻可写目录(设置 → 安全 → 常驻可写目录),加入后所有会话都可直接写入。
提示:内置办公脚本(Word/Excel/PPT/PDF/图片处理)与连接器进程不走系统沙箱,但读写仍受工作目录与授权规则约束,每次执行都记录审计日志。
沙箱不可用时
Linux 上 Landlock 与 bubblewrap 都不可用(或用户命名空间被禁)时,LanMate 不会假装安全:命令以普通权限运行,但三层提示确保你知道现状——
- 启动时右下角弹出提示
- 设置 → 安全 显示常驻警告与补救指引(如安装 bubblewrap)
- 每个会话第一次执行命令前再确认一次
审批拦截不受影响,仍然生效。重启应用或修复系统配置后可能恢复。
其他安全设置
| 设置 | 位置 | 说明 |
|---|---|---|
| 沙箱内禁止联网 | 设置 → 安全 | Linux 沙箱内断网(默认开);内核内装依赖需要网络时可关 |
| LanMate 依赖项 | 设置 → 安全 | 依赖装到内置运行时(默认开);关闭后安装走系统环境,指向内置环境的命令会被拦截 |
| 删除移入回收站 | 设置 → 安全 | 确认删除后文件进回收站而非彻底删除,可找回 |
| 限制渠道发送文件路径 | 设置 → 安全 | 开启后蓝信等渠道会话只允许发送工作目录内的文件,防数据外发 |
执行策略规则
设置 → 安全 → 执行策略规则,按工具、路径和命令自定义放行策略:
- 每条规则:工具名(精确匹配)+ 匹配条件(路径前缀 / 命令包含)→ 决策(允许 / 拒绝 / 询问)
- 规则自上而下匹配,第一条命中生效;未命中走默认决策
示例:bash 工具 + 命令包含 git push → 询问,可以在放行日常操作的同时对推送留一道人工确认。
安全底线:敏感路径(
~/.ssh、~/.aws、/etc等)与破坏性命令(如rm -rf /)始终被拒绝,任何规则都不能覆盖。
企业审计
组织开启后,审批决策与高危工具调用会上报企业服务端审计日志:命令文本经密钥脱敏后上报,断网自动补发。完整本地轨迹保留在 ~/.lanmate/agent/sessions/<会话id>.jsonl,可用于企业取证。
与审批的关系
沙箱管「能碰哪里」,审批管「要不要问你」。两者独立组合——比如「仅工作目录 + 只读放行」下,读文件直接执行、写文件弹窗、写工作目录外的文件先过沙箱授权再过审批。详见审批与安全。