OpenClaw 安全与访问控制:保护你的 AI 助手
安全是部署 AI 助手的首要考虑。本文深入讲解 OpenClaw 的安全机制,包括配对码系统、白名单配置、权限控制、审计日志等。无论你是个人用户还是企业管理员,都能找到适合的安全配置方案。
一、安全威胁模型
1.1 潜在风险
| 风险类型 | 说明 | 影响程度 |
|---|---|---|
| 未授权访问 |
| 高 | 数据泄露 | 敏感信息被 AI 记录或发送 | 高 | 权限滥用 | AI 执行危险操作 | 高 | 提示注入 |
| 恶意用户操控 AI 行为 | 中 | 资源耗尽 | 大量请求导致服务不可用 | 中 |
1.2 安全设计原则
1. 最小权限:只授予必要的访问权限
2. 默认拒绝:未明确允许的都应拒绝
3. 深度防御:多层安全措施
4. 审计追踪:记录所有操作日志
二、配对码系统
2.1 配对码工作原理
新用户发送消息
↓
Gateway 生成配对码(1 小时有效)
↓
发送配对码给新用户
↓
管理员审批(approve/reject)
↓
审批通过 → 添加到允许列表
审批拒绝 → 保持拒绝
2.2 配置配对码
{
channels: {
whatsapp: {
dmPolicy: "pairing", // 启用配对码
allowFrom: ["+8613800138000"] // 管理员号码
}
}
}
2.3 管理配对请求
查看待审批请求:
openclaw pairing list whatsapp
输出示例:
Pending pairing requests for whatsapp:
Code: ABC123 From: +8613900139000 Expires: 2026-03-23 15:30:00
Code: DEF456 From: +8614000140000 Expires: 2026-03-23 16:00:00
审批请求:
批准
openclaw pairing approve whatsapp ABC123
拒绝
openclaw pairing reject whatsapp DEF456
2.4 配对码配置选项
{
channels: {
whatsapp: {
pairing: {
expiryHours: 1, // 配对码有效期(小时)
maxPending: 3, // 最大待审批数量
autoApprove: false // 是否自动审批(不推荐)
}
}
}
}
三、白名单配置
3.1 通道白名单
WhatsApp:
{
channels: {
whatsapp: {
dmPolicy: "allowlist", // 只允许白名单
allowFrom: [
"+8613800138000", // 本人
"+8613900139000", // 家人
"+8614000140000" // 信任的同事
]
}
}
}
Telegram:
{
channels: {
telegram: {
dmPolicy: "allowlist",
allowFrom: [
"tg:123456789", // 用户 ID(推荐)
"@username" // 用户名
]
}
}
}
Discord:
{
channels: {
discord: {
dm: {
enabled: true,
policy: "allowlist",
allowFrom: [
"123456789012345678" // 用户 ID
]
}
}
}
}
3.2 群组白名单
允许特定群组:
{
channels: {
whatsapp: {
groupPolicy: "allowlist",
groupAllowFrom: [
"120363403215116621@g.us" // 群组 JID
]
},
telegram: {
groups: {
"-1001234567890": { allow: true }, // 群组 ID
"@public-group": { allow: false } // 拒绝特定群组
}
}
}
}
3.3 通配符配置
允许所有人(不推荐):
{
channels: {
whatsapp: {
dmPolicy: "open",
allowFrom: [""] // 允许所有用户
}
}
}
禁止所有群组:
{
channels: {
whatsapp: {
groupPolicy: "disabled" // 禁止所有群组
}
}
}
四、工具权限控制
4.1 工具权限级别
| 权限级别 | 允许的工具 | 适用场景 | 完全访问 |
| 只读访问
| 无文件系统
| 仅会话
4.2 配置工具权限
完全访问:
{
agents: {
list: [
{
id: "personal",
tools: {
allow: [""] // 允许所有工具
}
}
]
}
}
只读访问:
{
agents: {
list: [
{
id: "work",
tools: {
allow: [
"read",
"sessions_list",
"sessions_history",
"sessions_send",
"message",
"web_search",
"web_fetch"
],
deny: [
"write",
"edit",
"exec",
"process",
"browser"
]
}
}
]
}
}
无文件系统访问:
{
agents: {
list: [
{
id: "public",
sandbox: {
workspaceAccess: "none"
},
tools: {
allow: [
"sessions_list",
"message",
"web_search"
]
}
}
]
}
}
4.3 沙箱配置
沙箱模式:
{
agents: {
list: [
{
id: "sandboxed",
sandbox: {
mode: "all", // off | non-main | all
scope: "session", // session | agent | shared
workspaceAccess: "ro", // none | ro | rw
workspaceRoot: "~/.openclaw/sandbox"
}
}
]
}
}
五、命令安全
5.1 命令配置
{
commands: {
native: "auto", // 自动注册原生命令
text: true, // 解析文本命令
bash: false, // 禁止 shell 命令
config: false, // 禁止配置修改
debug: false, // 禁止调试命令
restart: false, // 禁止重启命令
allowFrom: {
"": ["123456789"] // 只允许特定用户执行命令
}
}
}
5.2 命令白名单
允许特定用户执行所有命令:
{
commands: {
allowFrom: {
"whatsapp": ["+8613800138000"],
"telegram": ["tg:123456789"],
"discord": ["123456789012345678"]
}
}
}
禁止特定命令:
{
commands: {
bash: false, // 禁止 shell 命令
config: false // 禁止配置修改
}
}
六、审计与监控
6.1 启用详细日志
{
logging: {
level: "debug", // info | debug | trace
redactSensitive: "tools", // off | tools
redactPatterns: [
"\\bTOKEN\\b\\s[=:]\\s([\"']?)([^\\s\"']+)\\1",
"/\\bsk-[A-Za-z0-9_-]{8,}\\b/gi"
]
}
}
6.2 查看日志
实时查看日志
openclaw logs --follow
查看特定级别
openclaw logs --level error
查看最近 N 行
openclaw logs --tail 100
6.3 审计关键操作
记录所有命令执行:
{
logging: {
auditCommands: true,
auditToolUse: true
}
}
查看审计日志:
grep "command executed" /tmp/openclaw/openclaw-.log
grep "tool used" /tmp/openclaw/openclaw-*.log
七、安全最佳实践
7.1 个人用户
1. ✅ 启用配对码系统
2. ✅ 配置白名单
3. ✅ 禁用 bash 命令
4. ✅ 定期审查日志
5. ✅ 备份配置文件
7.2 企业用户
1. ✅ 多代理隔离
2. ✅ 严格工具权限
3. ✅ 完整审计日志
4. ✅ 定期安全审查
5. ✅ 员工培训计划
7.3 公共部署
1. ✅ 只读访问
2. ✅ 无文件系统权限
3. ✅ 速率限制
4. ✅ 内容过滤
5. ✅ 监控告警
八、安全检查清单
- [ ] 启用配对码或白名单
- [ ] 限制工具权限
- [ ] 禁用危险命令
- [ ] 启用日志记录
- [ ] 配置敏感信息脱敏
- [ ] 定期备份配置
- [ ] 监控异常活动
- [ ] 更新到最新版本
九、总结
安全配置优先级:
1. 必须配置:配对码/白名单
2. 强烈推荐:工具权限限制
3. 推荐配置:命令限制、审计日志
4. 可选配置:沙箱、速率限制
关键要点:
- 默认拒绝,明确允许
- 最小权限原则
- 多层防御
- 持续监控
下一篇预告:《OpenClaw 记忆系统详解:让 AI 真正记住你》
/* 基础样式 */
.article-container {
max-width: 100%;
margin: 0 auto;
padding: 15px;
font-family: -apple-system, BlinkMacSystemFont, “Segoe UI”, “PingFang SC”, “Hiragino Sans GB”, “Microsoft YaHei”, sans-serif;
line-height: 1.8;
color: #333;
background: #fff;
}
/* 文章头部 */
.article-header {
border-bottom: 3px solid #4a90e2;
padding-bottom: 20px;
margin-bottom: 25px;
}
.main-title {
font-size: 1.8em;
color: #1a1a1a;
margin-bottom: 12px;
font-weight: 700;
line-height: 1.3;
}
.article-meta {
display: flex;
gap: 12px;
flex-wrap: wrap;
align-items: center;
}
.category-badge {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: #fff;
padding: 4px 12px;
border-radius: 16px;
font-size: 0.85em;
font-weight: 500;
}
.read-time {
color: #666;
font-size: 0.85em;
}
/* 导读框 */
.intro-box {
background: linear-gradient(135deg, #f0f4ff 0%, #e8f0fe 100%);
border-left: 4px solid #4a90e2;
padding: 18px;
margin: 20px 0;
border-radius: 0 8px 8px 0;
display: flex;
gap: 12px;
align-items: flex-start;
}
.intro-icon {
font-size: 1.8em;
flex-shrink: 0;
}
.intro-text {
margin: 0;
color: #444;
font-size: 1em;
line-height: 1.6;
}
/* 目录 */
.toc-container {
background: #f8f9fa;
border: 1px solid #e9ecef;
border-radius: 8px;
padding: 15px;
margin: 25px 0;
}
.toc-title {
font-size: 1.2em;
color: #333;
margin-bottom: 12px;
font-weight: 600;
}
.toc-list {
list-style: none;
padding: 0;
margin: 0;
}
.toc-list li {
margin: 6px 0;
}
.toc-list a {
color: #4a90e2;
text-decoration: none;
display: block;
padding: 6px 10px;
border-radius: 4px;
font-size: 0.95em;
transition: all 0.2s;
}
.toc-list a:hover {
background: #4a90e2;
color: #fff;
}
/* 文章内容 */
.article-content {
font-size: 1em;
}
.article-title {
font-size: 1.6em;
color: #1a1a1a;
margin: 35px 0 18px;
padding-bottom: 8px;
border-bottom: 2px solid #4a90e2;
}
.section-title {
font-size: 1.4em;
color: #2c3e50;
margin: 30px 0 12px;
padding-left: 12px;
border-left: 4px solid #4a90e2;
}
.subsection-title {
font-size: 1.2em;
color: #34495e;
margin: 22px 0 10px;
}
.subsubsection-title {
font-size: 1.05em;
color: #666;
margin: 18px 0 8px;
}
/* 代码块 – 支持横向滚动 */
.code-wrapper {
margin: 18px 0;
border-radius: 6px;
overflow: hidden;
}
.code-block {
background: #1e1e1e;
padding: 15px;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
margin: 0;
border-radius: 6px;
}
.code-block code {
color: #d4d4d4;
font-family: “Fira Code”, “Consolas”, “Monaco”, monospace;
font-size: 0.85em;
line-height: 1.6;
white-space: pre;
}
.inline-code {
background: #f5f5f5;
color: #e83e8c;
padding: 2px 6px;
border-radius: 3px;
font-family: “Fira Code”, “Consolas”, monospace;
font-size: 0.9em;
}
/* 表格 – 响应式滚动 */
.table-wrapper {
margin: 20px 0;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0,0,0,0.08);
}
.styled-table {
width: 100%;
border-collapse: collapse;
min-width: 600px;
font-size: 0.9em;
}
.styled-table thead {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: #fff;
}
.styled-table th {
padding: 12px 15px;
text-align: left;
font-weight: 600;
white-space: nowrap;
}
.styled-table td {
padding: 12px 15px;
border-bottom: 1px solid #e1e4e8;
vertical-align: top;
}
.styled-table tbody tr {
transition: background 0.2s;
}
.styled-table tbody tr:hover {
background: #f8f9fa;
}
.styled-table tbody tr:nth-child(even) {
background: #fafbfc;
}
.styled-table tbody tr:nth-child(odd) {
background: #fff;
}
/* 列表 */
.styled-list {
list-style: none;
padding: 0;
margin: 15px 0;
}
.list-item {
padding: 6px 0 6px 22px;
position: relative;
color: #333;
}
.list-item::before {
content: “•”;
position: absolute;
left: 0;
color: #4a90e2;
font-weight: bold;
font-size: 1.2em;
}
.checkbox-item {
padding: 6px 0 6px 32px;
position: relative;
color: #333;
}
.checkbox-item.checked {
color: #28a745;
}
/* 信息框 */
.info-box {
background: #e8f4fd;
border-left: 4px solid #4a90e2;
padding: 15px;
margin: 18px 0;
border-radius: 0 6px 6px 0;
color: #2c3e50;
}
/* 分隔线 */
.section-divider {
border: none;
height: 2px;
background: linear-gradient(to right, transparent, #4a90e2, transparent);
margin: 35px 0;
}
/* 文章尾部 */
.article-footer {
margin-top: 40px;
padding-top: 25px;
border-top: 2px solid #e9ecef;
}
.tags-section {
margin-bottom: 20px;
}
.tag-label {
font-weight: 600;
color: #666;
margin-right: 8px;
}
.tag {
display: inline-block;
background: #f0f4ff;
color: #4a90e2;
padding: 4px 10px;
border-radius: 12px;
margin: 3px;
font-size: 0.85em;
text-decoration: none;
transition: all 0.2s;
}
.tag:hover {
background: #4a90e2;
color: #fff;
}
.back-to-top {
text-align: center;
padding: 15px;
background: #f8f9fa;
border-radius: 6px;
}
.back-to-top a {
color: #4a90e2;
text-decoration: none;
font-weight: 500;
}
/* 移动端优化 */
@media (max-width: 768px) {
.article-container {
padding: 12px;
}
.main-title {
font-size: 1.4em;
}
.article-title {
font-size: 1.3em;
}
.section-title {
font-size: 1.2em;
}
.code-block {
padding: 12px;
font-size: 0.8em;
}
.styled-table {
font-size: 0.85em;
min-width: 500px;
}
.styled-table th,
.styled-table td {
padding: 10px 12px;
}
.intro-box {
padding: 15px;
}
.intro-icon {
font-size: 1.5em;
}
}
@media (max-width: 480px) {
.main-title {
font-size: 1.3em;
}
.article-meta {
flex-direction: column;
gap: 8px;
}
.category-badge,
.read-time {
font-size: 0.8em;
}
.code-block {
font-size: 0.75em;
padding: 10px;
}
.styled-table {
min-width: 450px;
font-size: 0.8em;
}
.styled-table th,
.styled-table td {
padding: 8px 10px;
}
}
// 移动端表格提示
document.addEventListener(‘DOMContentLoaded’, function() {
var tables = document.querySelectorAll(‘.table-wrapper’);
tables.forEach(function(table) {
if (!table.querySelector(‘.scroll-hint’)) {
var hint = document.createElement(‘div’);
hint.className = ‘scroll-hint’;
hint.innerHTML = ‘👈 左右滑动查看更多’;
hint.style.cssText = ‘text-align:center;padding:8px;background:#f8f9fa;color:#666;font-size:12px;border-radius:0 0 8px 8px;’;
table.parentNode.insertBefore(hint, table.nextSibling);
}
});
});