首页 文章 精选 留言 我的

精选列表

搜索[cli],共6254篇文章
优秀的个人博客,低调大师

Codex CLI 的权限与沙箱:三个档位到底怎么选

我们在 CI 流水线里放过一条命令,用它自动修失败的单测。参数是当时最省事的那种——一个表示"全自动"的开关。 它确实很自动。直到有一次 runner 上残留了一些不该出现的文件,日志里只剩一行关于参数过时的警告。那次之后我把所有同类脚本都翻出来重写了一遍。 这篇把这件事复盘清楚:权限这一层到底有几个旋钮,分别管什么。 ## 为什么"全自动"这个默认值现在不推荐了? 那个开关是 **--full-auto**。官方目前把它保留为兼容路径,运行时会打印弃用警告,但不再推荐用于新脚本。 替代写法是把两件事分开声明: ```bash codex exec --sandbox workspace-write "修复当前失败的单元测试" ``` 好处在审计上:把"能碰什么"和"要不要问"拆成两个显式参数之后,边界是一眼可见的。含糊的"全自动"看不出边界在哪。 ## 沙箱的三个档位分别意味着什么? | 档位 | 写入范围 | 联网 | 定位 | | --- | --- | --- | --- | | **read-only** | 不写 | 默认关 | 只读巡检、代码分析、出方案 | | **workspace-write** | 当前工作区(含临时目录) | 默认关,需显式开启 | 日常开发的主档位 | | **danger-full-access** | 无限制 | 无沙箱 | 隔离容器、专用 CI runner、临时虚拟机 | 第三档的适用场景写得很窄,这不是措辞保守。日常开发机、多租户 runner 上默认开它,等于把沙箱这一层整个拆掉,只剩审批策略兜底;而审批如果也设成 never,就真的没有任何拦阻了。 另有一处容易被误解:工作区不只是当前目录。可以查看当前会话实际把哪些目录算进了工作区,在 monorepo 里这一步很有价值——你可能以为只放开了子项目,实际放开了整棵树。 ## 审批策略和沙箱模式为什么必须分开看? 沙箱决定技术上能碰什么,审批决定什么时候暂停来问你。两者叠加生效,不是互相替代。 | 审批策略 | 行为 | | --- | --- | | **never** | 从不询问,在沙箱边界内尽力完成 | | **untrusted** | 只自动放行已知安全的只读操作;会改状态或触发外部执行的命令需要批准 | | **on-request** | 越出沙箱边界时才询问,例如要写工作区之外或需要联网 | **never** 可以和任何沙箱档位组合。也就是说你可以保留严格沙箱、同时不被打断——多数自动化场景想要的其实是这个形态,而不是把沙箱关掉。 还有一档更细的写法:粒度策略可以按类别分别决定,沙箱升级、规则命中、MCP 提示、权限请求、技能脚本审批各自设定是交互还是自动拒绝。 ## 工作区里哪些位置仍然写不进去? 即使在 workspace-write 下,工作区根目录里也有几处被递归设为只读: | 路径 | 说明 | | --- | --- | | 工作区根下的 .git | 无论它是目录还是文件 | | 工作区根下的 .git 若是指针文件 | 其解析出的真实 Git 目录同样受保护 | | 工作区根下的 .agents | 存在且为目录时保护 | | 工作区根下的 .codex | 存在且为目录时保护 | 设计意图很清楚:允许改代码,但不允许顺手改版本库元数据和 Agent 自己的配置。 反过来也提醒了一件事:密钥如果放在工作区内的普通配置目录里,它不在上述保护范围内,仍然可读可写。 ## 网络默认是关的,什么时候需要开? workspace-write 默认不带网络。需要时在配置里显式打开: ```toml [sandbox_workspace_write] network_access = true ``` 开了之后如果还想约束目的地,可以再叠一层网络策略,用域名规则表达: ```toml [features.network_proxy] enabled = true domains = { "api.openai.com" = "allow", "example.com" = "deny" } ``` 域名规则有几处细节容易踩错: - 精确主机名只匹配它自己 - 带单个通配前缀的写法匹配子域,但不匹配根域 - 带双通配前缀的写法同时匹配根域和子域 - deny 始终优先于 allow,全局通配只能出现在 allow 规则里 本地与私有地址默认也是拦的。回环、链路本地、私网目标都不通,除非显式加例外;而且通配规则不算例外,解析结果落在私网的主机名照样拦。这一层是为了降低 DNS 重绑定类风险。 ## 沙箱在操作系统层是怎么落地的? | 系统 | 实现方式 | | --- | --- | | macOS | Seatbelt,通过 sandbox-exec 加载与所选模式对应的策略 | | Linux | bwrap 配合 seccomp | | WSL2 | 走 Linux 沙箱实现 | | Windows 原生 | 独立实现,可在配置里选 unelevated 或 elevated | 有一条变化值得记:Linux 沙箱改为基于 bwrap 之后,WSL1 不再被支持。CI 跑在 WSL1 上的话,升级后这一项会直接失效。 另外,容器里通常已经有 seccomp 之类的限制,沙箱会叠加在上面。这类环境建议先在目标 runner 上实跑一遍,不要假设本地能过线上就能过。 ## CI 里怎么配才可审计? 我的做法是把常用组合固化成 profile 文件,脚本里只引用名字: ```bash # ~/.codex/readonly_quiet.config.toml → 只读巡检 codex --profile readonly_quiet exec "分析这次改动的风险,只输出结论" # ~/.codex/full_auto.config.toml → workspace-write + on-request codex --profile full_auto exec "修复单元测试并重新运行" # 构建产物和变更说明生成之后,分发环节我用墨衍的图文同步推到多个渠道 # 这一步不依赖 Codex 的权限设置,单独跑在流水线最后 ``` 显式 profile 的收益是:权限组合进版本库、可评审,出问题时能直接定位是哪套配置导致的。 ## 审批也可以交给评审代理,这适合什么场景? 把评审方从"人"换成"代理",是另一档配置:审批保持交互式,但符合条件的请求先交给评审代理判断,再决定是否执行。 它只处理本来就需要审批的那几类动作——沙箱升级、被拦的网络请求、权限请求、会产生副作用的工具调用。已经在当前沙箱边界内允许的动作直接运行,不会额外过一遍。 评审依据是一套策略,检查重点包括数据外泄、凭据探测、持续性安全削弱、破坏性操作。低风险与中风险按策略放行,关键风险直接拒绝,高风险则要看授权是否足够。 一个值得注意的设计是失败关闭:策略构建、评审会话、解析过程出问题,都按拒绝处理。超时会单独呈现,但动作同样不执行。 我的建议是把它当作"减少打断次数的中间档",而不是无人值守的开关。真正的无人值守场景,需要的是把沙箱档位和任务范围一起收窄。 ## 上线前检查什么? | 检查项 | 期望值 | | --- | --- | | 沙箱档位 | 日常机器不超过 workspace-write;全开放只在隔离环境用 | | 审批策略 | 与沙箱组合后仍留有拦阻点 | | 工作区范围 | 实际确认过,没有被整棵树放开 | | 网络 | 默认关闭;需要时用域名规则收窄 | | 高风险入口 | 考虑禁止登录 shell 之类的外层入口 | | WSL 版本 | 确认不是 WSL1 | | 历史脚本 | 已把全自动参数换成显式声明 | 回到开头那次事故:问题不在于某个参数危险,而在于边界从来没有被写出来过。 沙箱和审批是两层不同的约束,把它们各自显式声明,自动化才真的可控——这也是这场改动唯一真正的收益。

优秀的个人博客,低调大师

使用API/CLI对阿里云子账户做ACK(Kubernetes) RBAC授权

使用CloudShell 来一次完成ACK集群的RAM授权和RBAC授权 登录CloudShell获取一个配置完整集群管理命令行 授权 List existing users aliyun ram ListUsers | jq -r ".Users.User[].UserName" wget https://ack-downloads.oss-cn-hangzhou.aliyuncs.com/rbac/ack-grant-once -O ack-grant-once && chmod 755 ack-grant-once Grant permission once ./ack-grant-once <USER_NAME> <ROLE: one of custom:network-view, cs:ad

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册