fix: 允许 AI Agent 使用管道(|)和重定向(>)进行精准排查
之前禁止所有 shell 操作符,导致 crictl ps -a|tail / df -h | grep vda 这类常用诊断管道无法使用。 改动: 1. FORBIDDEN_TOKENS 移除了 | > >> $,保留 ; || && < << ` 2. 新增 _has_shell_operators() 检测命令是否需要 shell 执行 3. 新增 _pipe_to_dangerous_target() 阻止管道后执行 sh/bash/rm 等危险命令 4. classify_shell_command 对含管道命令: 只检查管道前 binary 白名单, 子命令不做限制(管道后工具多样,精确分类无意义) 5. execute_command 对 needs_shell=True 的命令用 create_subprocess_shell 执行 6. AI Prompt 第1条安全规则改为允许管道和重定向 7. 分号仍然禁止;cat 不安全路径检查对管道场景同样生效
This commit is contained in:
+1
-1
@@ -40,7 +40,7 @@ AGENT_SYSTEM_PROMPT = """你是 Kubernetes 自主诊断 Agent。你的首要职
|
||||
3. 每次只提出一条命令,服务端会执行并把真实输出返回给你,然后你继续下一轮判断。
|
||||
|
||||
安全规则:
|
||||
1. 每次只返回一条命令,不得使用 shell、管道、重定向或命令连接符 (; | && > < 等)。
|
||||
1. 每次只返回一条命令,但可以使用管道 (|) 连接命令进行精确过滤、使用重定向 (>) 保存输出到文件。禁止使用 ; || && 连接多条不相关的命令。
|
||||
2. kubectl 的 get、describe、logs、top 等只读命令可以自动执行。
|
||||
3. 系统诊断只读命令 (systemctl status、journalctl、crictl ps、df、free、ss、ip addr 等) 可以自动执行。
|
||||
4. apply、delete、patch、scale、rollout、exec 等修改或交互命令必须暂停并请求人工批准。
|
||||
|
||||
Reference in New Issue
Block a user