Shell 隔离(shell isolation) 安全与工程

别名: Shell 隔离 · Shell 隔离执行

让 Agent 执行命令时也受约束的机制:命令白名单(fail-closed,只放行只读命令)+ `execFile` 参数数组执行(不经 `/bin/sh`,没有 shell 元字符注入通道)。诚实局限:白名单拦命令名不拦参数,彻底隔离需要容器/虚拟机级。

它是什么

Shell 隔离(shell isolation)让 Agent 执行命令时也受约束:run_shell 标记 risk: 'approve'(先过 ch18 的审批门),impl 内部再过命令白名单——fail-closed,默认答案是「不」,只有名单上的只读命令(ls/cat/pwd/echo/wc/date)才放行。能写、能删、能联网的一律不在名单里。

为什么必须无 shell 解析

白名单检查的对象是解析后的命令名,这要求执行时不经过 shellexecFile(checked.command, checked.args) 直接以指定程序 + 参数启动。设想用 sh -c "${line}" 执行——模型给的 ls demo-notes; rm -rf ~ 会被 shell 展开成两条命令:白名单检查看到的是 ls,shell 实际执行了 rm。参数数组形式下 ; 只是 ls 的普通参数,shell 元字符注入这个通道根本不存在,白名单拦的才是「真正会执行的程序名」。

诚实局限

白名单拦命令名、不拦参数cat /etc/passwd 能过白名单(cat 在名单里)。所以 run_shell 的组合拳是「approve 档 + 只读命令 + cwd 限定工作目录」——把「任意命令执行」降级为「有限只读命令」,把 RCE 面缩到最小;彻底封死留给容器/虚拟机级。smolagents 官方对本地执行的态度同样是「不是安全边界」。

在本教程的位置

第 19 章「Shell 隔离」一节:parseCommandLine/isCommandAllowed/checkShellCommand 是纯函数、浏览器判题可跑;输出走 markUntrusted 回填。相关词条:沙箱最小权限

相关词条

出现在这些章节