AI Agent 安全最佳实践:保护你的 OpenClaw 不被滥用
AI Agent 安全最佳实践:保护你的 OpenClaw 不被滥用
上周五下午,我看到团队里一位同学在本地测试一个简单的文件清理 Agent,随手写了句 rm -rf /tmp/logs/*——结果他忘了加引号,命令被拼接成 [危险命令已移除]
权限边界:给 Agent 一个“牢笼”
Agent 最危险的地方在于它能“做事情”,而不仅仅是“说事情”。一旦它被授权执行命令或访问资源,错误的指令就可能造成真实损失。所以第一道防线,是最小权限原则。
在 OpenClaw 中,我们可以通过环境变量或配置文件显式限制 Agent 的能力范围。比如:
# config/agent_limits.yaml
agent:
name: "data-cleaner"
permissions:
allow_commands:
- "ls"
- "grep"
- "find"
- "tar"
deny_paths:
- "/etc/*"
- "/var/run/secrets/*"
- "/.env"
max_execution_time: 30 # 单位:秒
require_approval:
- "rm"
- "chmod"
- "chown"
然后在启动 Agent 时加载配置:
export OPENCLAW_CONFIG_PATH=./config/agent_limits.yaml
python -m openclaw.agent --task "清理 /tmp 下超过 7 天的临时文件"
注意 require_approval 字段——它让高危操作必须人工确认。这看起来增加了步骤,但省下的排查时间远超等待批准的几分钟。
防注入:别让 Agent“想多了”
很多安全问题来自输入解析。比如用户说:“请删掉所有以 ; [危险命令已移除]
OpenClaw 默认对命令构建做了两层防护:
- 命令参数必须是数组形式,不能是拼接字符串
- 所有输入先做白名单校验,再传给执行器
实际代码示例:
# ✅ 正确做法:参数分离
cmd = ["find", "/tmp", "-mtime", "+7", "-delete"]
# ❌ 错误做法:字符串拼接(OpenClaw 会主动拦截)
# cmd = f"find /tmp -mtime +7 && [危险命令已移除]
如果你需要自定义校验逻辑,可以实现一个轻量级的预处理器:
from openclaw import Agent, Task
class SafeInputFilter:
@staticmethod
def sanitize(user_input: str) -> str:
# 禁止分号、反引号、$()、管道符等
dangerous = [";", "`", "$(", "|", "&&", "||"]
for d in dangerous:
if d in user_input:
raise ValueError(f"检测到危险字符:{d}")
return user_input.strip()
# 注册到 Agent
agent = Agent(name="file-manager", input_filter=SafeInputFilter)
task = Task("查找 /tmp 下最近修改的文件")
result = agent.run(task)
这种过滤不是 100% 安全,但能挡住 90% 的意外输入。
敏感数据:别让 Agent 看到不该看的
Agent 的“记忆”能力是一把双刃剑。它能记住你的偏好,也可能记住你的 API Key。我见过不少团队把 .env 文件挂载进 Agent 容器,然后 Agent 在分析日志时,顺手把 DB_PASSWORD 也写进了日志尾部——虽然人眼没注意,但模型后端可能把它当训练数据存了。
建议做法:
- 用挂载卷替代环境变量传密钥,并在 Agent 配置中排除敏感路径
- 启用日志脱敏,对常见密钥模式自动打码
OpenClaw 提供了一个简单的日志过滤器配置:
// config/logging.json
{
"mask_patterns": [
"API_KEY",
"SECRET_",
"PASSWORD",
"ACCESS_TOKEN"
],
"log_output": "/var/log/openclaw/agent.log",
"sanitize": true
}
运行时启用:
openclaw agent run --config ./config/logging.json --task "分析上个月用户反馈"
这样,即使 Agent 在日志里提到了敏感字段,输出也会显示为 [REDACTED]。
总结
AI Agent 的威力越大,责任也越重。安全不是加一层防火墙就完事,它体现在权限设计、输入校验、数据脱敏的每一个细节里。OpenClaw 提供了基础能力,但真正要跑稳,还得靠你主动划清边界。
说实话,写完这篇文章我才去检查了自家的 Agent 配置——发现有个测试用 Agent 还开着 allow_commands: ["*"]。立刻改了,还加了个 require_approval: true。
ClawBrain 是专为龙虾(OpenClaw)打造的智能决策引擎,具备任务闭环、自主规划、错误自愈能力,让龙虾真正能独立做事。它知道什么时候该停、什么时候该问、什么时候该自己补救——但前提是,你得先给它一个安全的运行环境。