Расскажи подробнее про настройку безопасности и прав доступа агента

Вот полное руководство по настройке безопасности и прав доступа агента 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 accessDM policies, group policies, allowlists — могут ли посторонние запустить бота? openclaw
Tool blast radiusElevated tools + открытые комнаты — может ли prompt injection привести к shell/файлам/сети? openclaw
Network exposureGateway bind/auth, Tailscale, слабые токены openclaw
Browser controlRemote nodes, relay ports, remote CDP endpoints openclaw
Permissionsstate/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 openclawsu openclaw providers
2Доступ к мессенджерам ограниченdmPolicy: "allowlist" + Telegram ID providers
3API-ключи через SecretRef${SecretRef.anthropic_key} providers
4Подключены только нужные навыкиopenclaw skill list → отключить лишние providers
5Логирование включено, алерты настроеныlogging.enabled: true + Slack providers
6WebSocket origin validation проверенwebsocket.allowedOrigins: [...] providers
7Бэкапы конфигурации настроеныcron: "0 3 * * *" → tar backup providers
8Tool permissions настроеныallowed_tools, denied_tools, scope truetech
9Human-in-the-loop для критических действийapproval.requireApproval: [...] sostav
10Security 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-аудит)?

Previous Post Да, расскажи подробнее про настройку Clawmetry для WordPress
Next Post Анализ сайта - Сканирует страницы, складывает контент-стратегию, рекомендует SEO-улучшения wpcraft

Ваша корзина

Корзина пуста
Updating Cart!