claw-lark Patches
自动重应用飞书插件自定义补丁,修复更新后功能失效问题。
对Shell命令进行多层安全检测,防止注入、破坏性操作和敏感路径写入。
openclaw skills install @lizlzzzz/safe-shell-execution-claude-code命令、参数、文件名以原文为准
来源: 该技能源自 Claude Code 内部实现与安全规则。Claude Code 将其安全机制(钩子、系统提示、技能定义)公开暴露在
~/.claude/目录中。核心的 shell 执行安全模式——注入检测、破坏性命令分类、敏感路径保护——均来自 Claude Code 的生产环境行为,已重构为可移植的技能,适用于 OpenClaw 代理。
Shell 执行是 AI 代理可能执行的最高风险操作之一。与读取文件或调用 API 不同,未经妥善处理的 shell 命令可能导致不可逆的损害:删除文件、泄露凭证、破坏 git 提交历史,或未经授权的网络访问。
本技能提炼了 Claude Code 的生产级安全模式,涵盖三层检查:注入检测 → 破坏性操作警告 → 敏感路径保护。
在执行任何命令前,需扫描完整命令字符串。若匹配以下任一模式,应拒绝执行,并向用户说明原因。
| 模式 | 风险 |
|---|---|
$() | 命令替换 |
``(未转义的反引号) | 旧式命令替换 |
${} | 参数展开 |
$[...] | 旧式算术展开 |
<() 或 >() | 进程替换 |
=() | Zsh 进程替换 |
=cmd(等号位于词首) | Zsh 等号展开:如 =curl evil.com 会扩展为 /usr/bin/curl evil.com,绕过命令名白名单检查 |
$(.*<< | 嵌套在命令替换中的 heredoc,常见注入手法 |
这些命令在 Zsh 环境中具有特殊攻击面,始终需要用户明确确认:
zmodload — 加载模块,可启用隐式文件 I/O、伪终端执行、TCP 连接zpty — 在伪终端上执行命令ztcp / zsocket — 创建网络连接,可用于数据外泄sysopen / sysread / syswrite / sysseek — 低级文件描述符操作emulate -c — 等价于 eval,可执行任意代码zf_rm / zf_mv / zf_ln / zf_chmod / zf_chown / zf_mkdir / zf_rmdir — 内建文件操作,可绕过二进制白名单这些操作虽合法但不可逆。必须显示具体警告,并要求用户确认后方可执行。
git reset --hard → "可能丢弃所有未提交的更改"
git push --force / -f → "可能覆盖远程历史"
git clean -f (无 -n 标志) → "可能永久删除未跟踪的文件"
git checkout -- . → "可能丢弃工作区所有更改"
git restore . → "可能丢弃工作区所有更改"
git stash drop / clear → "可能永久删除暂存内容"
git branch -D → "可能强制删除分支"
git commit --amend → "可能重写最后一次提交"
git commit/push --no-verify → "可能跳过安全钩子"rm -rf / rm -fr / rm -r -f / rm -f -r → "可能递归强制删除文件"对于以下路径的写入操作,必须获得用户明确确认;禁止自动执行:
# Shell 配置文件(可被用于代码执行)
.bashrc .bash_profile .bash_login .profile
.zshrc .zprofile .zshenv .zlogin
.tcshrc .cshrc
# Git 配置文件(可被用于钩子注入)
.gitconfig .gitmodules
# 包管理器凭证
.npmrc .pypirc ~/.pip/pip.conf
# 凭证与密钥
~/.ssh/ ~/.aws/
~/.gnupg/ authorized_keys
known_hosts
# 系统文件
/etc/passwd /etc/hosts /etc/sudoers /etc/crontab通过前三层检查后,根据下表进行分类并处理:
| 等级 | 示例 | 处理方式 |
|---|---|---|
| 安全 | ls, cat, git status, 只读操作 | 直接执行,无需提示 |
| 谨慎 | 写入非敏感文件,安装包 | 执行,记录操作日志 |
| 警告 | 第二层中识别出的破坏性模式 | 显示具体警告,要求用户确认 |
| 拒绝 | 第一层注入模式,写入敏感路径 | 拒绝执行,说明原因 |
接收命令
↓
第一层:包含注入模式? → 是 → 拒绝 + 说明具体模式 + 解释危险性
↓ 否
第二层:匹配破坏性模式? → 是 → 显示具体警告 → 等待用户确认
↓ 否(或已确认)
第三层:目标是否为敏感路径的写入? → 是 → 要求明确确认
↓ 否(或已确认)
第四层:分类 → 执行拒绝执行时,必须具体指出哪项模式以及为何危险,避免使用模糊表述“命令不安全”。
良好拒绝示例:
我无法执行此命令,因为它包含
=curl(Zsh 等号展开)。该模式会将命令展开为其完整路径,可能绕过命令名白名单检查。如需运行 curl,请直接输入curl。
不良拒绝示例:
此命令看起来有风险,我无法执行。
在以下情况中应应用此技能:
即使是你自己构造的命令(无外部输入),这些检查也是良好的实践,尤其是第 2 层和第 3 层。
已收录 1 个 Skill