Вот полное руководство по настройке безопасности и прав доступа агента OpenClaw — от базовых настроек до enterprise-уровня:
🛡️ 3 уровня безопасности OpenClaw
| Уровень | Что защищает | Где настраивается |
|---|---|---|
| Уровень 1 | Системные политики | Docker/VM, Linux namespaces, seccomp, AppArmor truetech+1 |
| Уровень 2 | Политики OpenClaw | Ролевая модель: admin, operator, readonly, кастомные роли truetech+1 |
| Уровень 3 | Аудит и алерты | Логирование всех вызовов, SIEM, Slack-алерты truetech+1 |
🔐 Шаг 1: Создание непривилегированного пользователя
Агент НИКОГДА не должен работать от root
bash# 1. Создайте отдельного системного пользователя
sudo useradd -m -s /bin/bash openclaw
# 2. Дайте минимально необходимые права (только если нужно)
sudo usermod -aG sudo openclaw # Только если агенту нужен sudo
# 3. Запустите агента от этого пользователя
sudo su - openclaw
cd ~
openclaw onboard
Проверка:
bash# Проверьте текущего пользователя
whoami
# Должно быть: openclaw (НЕ root)
# Проверьте права
id
📋 Шаг 2: Tool Permissions (разграничение инструментов)
Базовая структура политики доступа
text# ~/.openclaw/agents/wordpress-agent/policy.yaml
agent_policies:
role: wordpress-operator
allowed_tools:
- read_file # Чтение файлов
- search_web # Поиск в интернете
- query_database # Запросы к БД
- browser_login # Вход в браузер
- wp_create_post # Создание постов
- wp_update_post # Обновление постов
- wp_publish_post # Публикация постов
- seo_analyzer # SEO-анализ
denied_tools:
- execute_shell # ❌ Запуск shell-команд
- write_file # ❌ Запись файлов (кроме WordPress)
- send_email # ❌ Отправка email
- delete_post # ❌ Удаление постов
- delete_user # ❌ Удаление пользователей
- install_plugin # ❌ Установка плагинов
- change_wp_config # ❌ Изменение wp-config.php
scope: # Ограничение области действия
file_paths:
- "/var/www/domtj.ru/*" # Только您的 сайт
- "!/var/www/domtj.ru/wp-config.php" # Исключение!
db_schemas:
- "wordpress_public" # Только публичные таблицы
- "!wordpress_users" # ❌ Запрет на таблицы пользователей
Применить политику
bash# Загрузить политику
openclaw agents policy apply wordpress-agent --file ~/.openclaw/agents/wordpress-agent/policy.yaml
# Проверить активную политику
openclaw agents policy show wordpress-agent
👥 Шаг 3: Ролевая модель (Least Privilege)
Готовые роли для WordPress
text# ~/.openclaw/roles.yaml
roles:
wordpress-reader:
allowed_tools:
- read_file
- search_web
denied_tools:
- write_file
- execute_shell
- delete_post
scope:
file_paths: ["/var/www/domtj.ru/wp-content/*"]
wordpress-editor:
allowed_tools:
- read_file
- wp_create_post
- wp_update_post
- wp_publish_post
denied_tools:
- delete_post
- execute_shell
- install_plugin
scope:
file_paths: ["/var/www/domtj.ru/wp-content/uploads/*"]
wordpress-admin:
allowed_tools:
- read_file
- write_file
- wp_create_post
- wp_update_post
- wp_publish_post
- wp_delete_post
- plugin_update
- seo_analyzer
denied_tools:
- execute_shell # Даже админ не должен!
- delete_user
- change_wp_config
scope:
file_paths:
- "/var/www/domtj.ru/*"
- "!/var/www/domtj.ru/wp-config.php"
wordpress-superadmin:
allowed_tools:
- "*" # Все инструменты
denied_tools: [] # Нет запретов
scope:
file_paths: ["*"]
Назначить роль агенту
bash# Назначить роль
openclaw agents set-role wordpress-agent wordpress-editor
# Проверить роль
openclaw agents show wordpress-agent
🔒 Шаг 4: Ограничение DM (Direct Messages)
Политики доступа к мессенджерам
bash# owner_only — только владелец (рекомендуется для продакшна)
openclaw config set channels.telegram.dmPolicy "owner_only"
# allowlist — только пользователи из списка
openclaw config set channels.telegram.dmPolicy "allowlist"
# pairing — новый пользователь получает pairing code (по умолчанию)
openclaw config set channels.telegram.dmPolicy "pairing"
# anyone — все могут использовать (❌ Опасно! Только для тестирования)
openclaw config set channels.telegram.dmPolicy "anyone"
Добавить пользователей в allowlist
bash# Получить ваш Telegram ID
# Отправьте /start боту @userinfobot в Telegram
# Добавить в allowlist
openclaw config set channels.telegram.allowlist "[123456789, 987654321]"
# Или через CLI
openclaw teams add-member --telegram-id 123456789
Конфигурация Telegram (ручная)
bash# Откройте конфигурацию
nano ~/.openclaw/openclaw.json
Добавьте:
json{
"channels": {
"telegram": {
"enabled": true,
"token": "ВАШ_ТОКЕН",
"dmPolicy": "allowlist",
"allowlist": [
"123456789", // Ваш Telegram ID
"987654321" // Коллега
]
}
}
}
🔑 Шаг 5: Хранение API-ключей (SecretRef)
НИКОГДА не храните ключи в открытом виде
bash# Плохо: ключ в конфигурации
openclaw config set model.apiKey "sk-ant-..." # ❌
# Хорошо: через SecretRef
export ANTHROPIC_API_KEY="sk-ant-..."
openclaw config set model.apiKey "${SecretRef.anthropic_key}"
Интеграция с HashiCorp Vault
text# ~/.openclaw/secrets.yaml
secrets:
anthropic_key:
provider: vault
path: "secret/data/openclaw/production/anthropic_key"
field: "key"
openai_key:
provider: vault
path: "secret/data/openclaw/production/openai_key"
field: "key"
wordpress_password:
provider: vault
path: "secret/data/openclaw/production/wordpress"
field: "app_password"
Получение секрета:
python# Агент получает токен через short-lived credentials
import hvac
vault_client = hvac.Client(url="https://vault.yoursite.com")
secret = vault_client.secrets.kv.read_secret_version(
path="openclaw/production/openai_key"
)
api_key = secret["data"]["data"]["key"]
📊 Шаг 6: Настройка аудита и логирования
Включить полное логирование
bash# Включить логирование
openclaw config set logging.enabled true
# Логировать все вызовы инструментов
openclaw config set logging.logTools true
# Не скрывать чувствительные данные в логах (для продакшна отключить!)
openclaw config set logging.redactSensitive "tools"
Конфигурация аудита
json// ~/.openclaw/openclaw.json
{
"audit": {
"enabled": true,
"logAllToolCalls": true,
"alertOnAnomalies": true,
"siem": {
"enabled": true,
"endpoint": "https://siem.yoursite.com:5514",
"apiKey": "${SecretRef.siem_key}"
},
"tools": {
"wordpress": {
"critical": [
"wp_config_changed",
"theme_updated",
"admin_user_created",
"plugin_installed",
"post_deleted"
],
"warning": [
"post_published",
"plugin_updated",
"user_role_changed"
],
"info": [
"post_created",
"seo_score_updated"
]
}
}
}
}
🌐 Шаг 7: Сетевая изоляция
Docker-контейнер с ограничениями
text# docker-compose.yml
version: '3.8'
services:
openclaw:
image: openclaw:latest
container_name: openclaw-secure
user: "1000:1000" # Не root!
networks:
- openclaw-network
security_opt:
- no-new-privileges:true
- seccomp:./seccomp.json
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
read_only: true
tmpfs:
- /tmp
volumes:
- ~/.openclaw:/home/openclaw/.openclaw:ro # Только чтение!
environment:
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
restart: unless-stopped
networks:
openclaw-network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
Seccomp-профиль
json// seccomp.json
{
"defaultAction": "SCMP_ACT_ERRNO",
"architectures": ["SCMP_ARCH_X86_64"],
"cases": [
{
"names": ["read", "write", "exit", "exit_group"],
"action": "SCMP_ACT_ALLOW"
}
]
}
🧪 Шаг 8: Human-in-the-loop (требование подтверждения)
Настроить утверждение критических действий
json// ~/.openclaw/openclaw.json
{
"approval": {
"enabled": true,
"requireApproval": [
"publish_post",
"delete_post",
"plugin_update",
"plugin_install",
"theme_update",
"user_created",
"user_deleted"
],
"autoApprove": [
"create_draft",
"seo_analysis",
"read_post"
],
"timeout": 3600 // 1 час до отмены
}
}
Как это работает:
textАгент: "Хочу опубликовать пост 'Туры в Таджикистан'. Одобрить? (yes/no)"
Вы: yes
Агент: "Опубликовал пост #791"
📋 Шаг 9: Security Audit (проверка безопасности)
Запустить аудит безопасности
bash# Быстрый аудит
openclaw security audit
# Глубокий аудит (включает live-проверку Gateway)
openclaw security audit --deep
# Автоматическое исправление распространённых проблем
openclaw security audit --fix
Что проверяет аудит
| Категория | Что проверяет |
|---|---|
| Inbound access | DM policies, group policies, allowlists — могут ли посторонние запустить бота? openclaw |
| Tool blast radius | Elevated tools + открытые комнаты — может ли prompt injection привести к shell/файлам/сети? openclaw |
| Network exposure | Gateway bind/auth, Tailscale, слабые токены openclaw |
| Browser control | Remote nodes, relay ports, remote CDP endpoints openclaw |
| Permissions | state/config/credentials/auth не group/world-readable openclaw |
| Plugins | Загружены ли только явно доверенные плагины openclaw |
Пример вывода аудита
text🔒 OpenClaw Security Audit
────────────────────────────────
✅ gateway.bind_no_auth: Gateway bound to localhost only
✅ dmPolicy_pairing: DMs require pairing for unknown senders
⚠️ tools.exec.security_full_configured: security="full" (требуется ручная проверка)
✅ fs.permissions: Config files are not world-readable
✅ plugins.allowlist: Only explicitly trusted plugins loaded
⚠️ browser.remote_exposure: Browser control exposed on port 9222 (recommended: restrict to tailnet)
Critical: 0
Warning: 2
Info: 0
Fix recommendations:
- Run: openclaw config set tools.exec.security "approve"
- Run: openclaw config set browser.ssrfPolicy "restrict"
📝 Итоговый чеклист безопасности
| № | Пункт | Команда/Настройка | Статус |
|---|---|---|---|
| 1 | Агент запущен от непривилегированного пользователя | useradd openclaw → su openclaw providers | ☐ |
| 2 | Доступ к мессенджерам ограничен | dmPolicy: "allowlist" + Telegram ID providers | ☐ |
| 3 | API-ключи через SecretRef | ${SecretRef.anthropic_key} providers | ☐ |
| 4 | Подключены только нужные навыки | openclaw skill list → отключить лишние providers | ☐ |
| 5 | Логирование включено, алерты настроены | logging.enabled: true + Slack providers | ☐ |
| 6 | WebSocket origin validation проверен | websocket.allowedOrigins: [...] providers | ☐ |
| 7 | Бэкапы конфигурации настроены | cron: "0 3 * * *" → tar backup providers | ☐ |
| 8 | Tool permissions настроены | allowed_tools, denied_tools, scope truetech | ☐ |
| 9 | Human-in-the-loop для критических действий | approval.requireApproval: [...] sostav | ☐ |
| 10 | Security Audit пройден | openclaw security audit --fix openclaw | ☐ |
💡 Ключевые принципы безопасности
1. Least Privilege (Минимальные права)
Начинайте с пустых прав, добавляйте только необходимое. Агент с read_file без ограничения scope может прочитать /etc/passwd.truetech+1
2. Defense in Depth (Многослойная защита)
Системные политики + политики OpenClaw + аудит. Не полагайтесь на один уровень.truetech+1
3. Identity First (Идентичность перед интеллектом)
Сначала решите, кто может говорить с ботом (pairing/allowlists), потом где он может действовать (tools/scope).openclaw
4. Audit Everything (Всё под аудитом)
Все вызовы инструментов логируются с контекстом: кто вызвал, с какими аргументами, результат.truetech+1
5. Human-in-the-Loop для критического
Публикация постов, удаление, установка плагинов — требуют подтверждения.sostav
Нужны детали по настройке конкретного уровня (Docker-изоляция, Vault-интеграция, SIEM-аудит)?