公司动态
OpenShell策略指南:一份YAML如何锁死AI Agent的文件系统、进程与网络访问
OpenShell策略指南一份YAML如何锁死AI Agent的文件系统、进程与网络访问【免费下载链接】OpenShellOpenShell is the safe, private runtime for autonomous AI agents.项目地址: https://gitcode.com/gh_mirrors/op/OpenShellOpenShell 是一个为自主 AI Agent 打造的安全沙箱运行时而它的核心武器就是一份简单的OpenShell 策略 YAML。在这份声明式文件里你可以用不到 30 行配置同时锁死 Agent 的文件系统读写边界、进程身份与出站网络访问——默认拒绝一切只放行你明确允许的端点、方法和路径。本文将带你从零读懂 OpenShell 策略的四大控制域文件系统、进程、网络、推理掌握创建、热更新与排查策略的完整流程。 想克隆仓库动手实验git clone https://gitcode.com/gh_mirrors/op/OpenShell cd OpenShell一张表看懂OpenShell 策略的四大控制域策略文件由多个顶层字段组成OpenShell 将它们分为静态Static与动态Dynamic两类这是理解整个策略系统的关键控制域YAML 字段类型作用生效时机 文件系统filesystem_policy静态限定 Agent 可读/可写的目录沙箱创建时锁定 内核加固landlock静态启用 Landlock LSM 内核级强制访问控制沙箱创建时锁定 进程process静态指定 Agent 运行身份UID/GID沙箱创建时锁定 网络network_policies动态声明哪些二进制可以访问哪些端点运行时热加载 网络中间件network_middlewares动态按目标主机挂载有序的检查/改写中间件运行时热加载静态字段在沙箱创建后即被锁定修改需要销毁并重建沙箱动态字段则可以通过openshell policy set在运行中的沙箱上热更新无需重启任何进程。完整的字段级参考见策略模式参考。第一步认识一份最小可用的策略 YAML仓库自带一个 5 分钟就能跑通的示例策略位于 examples/sandbox-policy-quickstart/policy.yaml它的结构是version: 1 filesystem_policy: include_workdir: true read_only: [/usr, /lib, /proc, /dev/urandom, /app, /etc, /var/log] read_write: [/sandbox, /tmp, /dev/null] landlock: compatibility: best_effort network_policies: github_api: name: github-api-readonly endpoints: - host: api.github.com port: 443 protocol: rest enforcement: enforce access: read-only binaries: - { path: /usr/bin/curl }逐段拆解version: 1—— 必填的模式版本号目前只能是1。filesystem_policy—— 未列入read_only或read_write的路径一律不可访问include_workdir: true会自动把 Agent 工作目录加入可写列表。landlock——best_effort表示个别路径缺失时跳过并告警其余规则照常生效若你的环境不容忍任何隔离缺口可改为hard_requirement任一路径不可用即启动失败。network_policies—— 精华所在只允许curl这个二进制访问api.github.com:443且access: read-only意味着只有GET/HEAD/OPTIONS能通过——POST、PUT一律被 L7 代理拦截。 核心心智模型默认拒绝default-deny 显式白名单。没有匹配规则的连接一律拒绝并留痕。锁死文件系统连内核都不放行的 LandlockOpenShell 的策略不只停留在应用层。文件系统策略会通过 Linux 内核的Landlock LSM在更底层强制执行——即使容器内进程权限再高也无法越过内核写下的访问规则。几个值得注意的校验约束来自策略模式参考所有路径必须是绝对路径禁止..路径穿越read_write中不能出现/这类过宽的写法单条路径不超过 4096 字符read_onlyread_write合计不超过 256 条。校验失败会被直接拒绝INVALID_ARGUMENT而不是静默降级——这是安全系统宁可报错也不放水的典型设计。锁死进程让 Agent 以受限身份运行process段用于覆盖计算驱动选定的运行身份process: run_as_user: 1500 run_as_group: 1500显式值只能是sandbox或1–4294967294之间的数字 UID/GID——root0会被直接拒绝。此外Agent 进程还会附带 seccomp 过滤器屏蔽危险系统调用。更完整的威胁分层可以看 architecture/security-policy.md 中的策略域划分。锁死网络从主机名到 HTTP 方法的七层管控network_policies是策略中最灵活的部分它把网络访问限制到哪个二进制 × 哪个端点 × 哪个 HTTP 方法/路径三个维度能力写法效果端点白名单hostport目标主机/端口不在列表中即拒绝L7 方法级控制access: read-only/read-write/full按 HTTP 方法预设放行范围细粒度规则rulesmethod/path只放行特定方法与路径 glob显式拒绝deny_rules允许集上的黑名单优先级最高审计模式enforcement: audit只记录不拦截适合迭代构建策略原生 TCPprotocol: tcp放行 DNS 透明 TCP 连接如数据库客户端一个带拒绝规则的实战片段摘自策略模式参考允许 GitHub REST 读写但禁掉创建代码评审和保护分支endpoints: - host: api.github.com port: 443 protocol: rest enforcement: enforce access: read-write deny_rules: - method: POST path: /repos/*/pulls/*/reviews - method: PUT path: /repos/*/branches/*/protection代理会自动检测并终结 TLS逐个 HTTP 请求对照rules检查方法与路径——这意味着即使CONNECT握手成功一个越权的POST依然会被 L7 拦截并返回 403。应用策略创建时锁定 运行时热更新创建沙箱时附带策略openshell sandbox create --policy ./my-policy.yaml -- claude或者设置默认策略环境变量免去每次传参export OPENSHELL_SANDBOX_POLICY./my-policy.yaml对运行中的沙箱热更新网络策略# 增量合并推荐用于加端点、加二进制 openshell policy update demo --add-endpoint api.github.com:443:read-only:rest:enforce --binary /usr/bin/gh --wait # 完整替换policy set 会替换整份策略因此需带上静态字段 openshell policy set demo --policy current-policy.yaml --wait--wait会阻塞到沙箱确认新策略加载完成。整个热更新闭环在策略文档中被总结为六个循环步骤创建沙箱 → 监控拒绝日志 → 拉取当前策略 → 修改 YAML → 推送新策略 → 验证版本。完整字段速查见策略模式参考日常工作流见策略文档。排查被拒请求每笔流量都有审计日志被拒的连接不会悄悄消失。openshell logs name --tail能给出目标主机、端口、发起二进制和拒绝原因actiondeny dst_hostapi.github.com dst_port443 binary/usr/bin/curl deny_reasonno matching network policyL7 拦截还会记录精确的 HTTP 方法与路径l7_actionPOST l7_target/repos/.../issues这些日志可以直接管道到 SIEM构成对 Agent 全部行为的完整审计链。想要图形化排查运行openshell term即可打开实时终端仪表盘如上节截图所示。想自己跑一遍完整的先被拒 → 上策略 → 放行读、拦掉写演示仓库内置了自动化脚本bash examples/sandbox-policy-quickstart/demo.sh进阶Policy Advisor 让 Agent 自己申请放行最有意思的能力来自Policy Advisor当请求被策略拒绝后沙箱内的 Agent 可以通过policy.local提交一条窄范围的策略变更提案开发者在沙箱外审批批准后新规则直接热加载进同一沙箱。它的默认姿态依然是人在回路所有提案先进草稿收件箱等待人工审批只有在显式开启auto模式、且策略证明器prover未产生任何新发现时提案才会自动放行。prover 会正式回答四类问题——是否触达云元数据端点、是否让非 HTTP 二进制够到带凭据的主机、是否为二进制新增了凭据可达性、是否新增了 HTTP 方法。任何一项为是都会阻断自动批准。详见Policy Advisor 文档与策略建议示例。小结一份 YAML 换一份可验证的边界回看全文OpenShell 策略的精髓可以浓缩为三句话默认拒绝——没有规则匹配的流量与路径一律拦截并留痕静态锁定 动态热更——文件系统与进程身份在创建时由内核机制焊死网络策略随时热加载全链路可审计——从403响应体到 SIEM 日志Agent 的每次越界尝试都有据可查。比起给 Agent 加--dangerously-skip-permissions式的权限豁免这份 YAML 策略提供的是一条可验证、可迭代、可回滚的安全边界。下一步建议从 examples/sandbox-policy-quickstart/ 的最小示例开始把binaries换成你实际使用的 Agent 二进制观察日志里被拦截的第一条请求——你会真正理解锁死二字的分量。【免费下载链接】OpenShellOpenShell is the safe, private runtime for autonomous AI agents.项目地址: https://gitcode.com/gh_mirrors/op/OpenShell创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考