Gateway
Безпека
Спочатку обсяг: модель безпеки персонального асистента
Настанови з безпеки OpenClaw передбачають розгортання персонального асистента: одна довірена межа оператора, потенційно багато агентів.
- Підтримувана позиція безпеки: один користувач/межа довіри на gateway (бажано один користувач ОС/хост/VPS на межу).
- Не підтримувана межа безпеки: один спільний gateway/агент, який використовують взаємно недовірені або змагальні користувачі.
- Якщо потрібна ізоляція змагальних користувачів, розділіть за межею довіри (окремий gateway + облікові дані, а в ідеалі окремі користувачі ОС/хости).
- Якщо кілька недовірених користувачів можуть писати одному агенту з доступом до інструментів, вважайте, що вони спільно використовують ті самі делеговані повноваження інструментів для цього агента.
На цій сторінці пояснюється посилення безпеки в межах цієї моделі. Вона не заявляє про ворожу багатокористувацьку ізоляцію на одному спільному gateway.
Швидка перевірка: openclaw security audit
Див. також: Формальна верифікація (моделі безпеки)
Запускайте це регулярно (особливо після зміни конфігурації або відкриття мережевих поверхонь):
openclaw security audit
openclaw security audit --deep
openclaw security audit --fix
openclaw security audit --json
security audit --fix навмисно лишається вузьким: він перемикає поширені відкриті політики груп
на списки дозволів, відновлює logging.redactSensitive: "tools", посилює
дозволи для стану/конфігурації/include-файлів і використовує скидання Windows ACL замість
POSIX chmod під час запуску на Windows.
Він позначає поширені пастки (відкритість автентифікації Gateway, відкритість керування браузером, розширені списки дозволів, дозволи файлової системи, надто дозвільні схвалення exec і відкритий доступ інструментів у каналах).
OpenClaw є і продуктом, і експериментом: ви під’єднуєте поведінку передових моделей до реальних поверхонь обміну повідомленнями та реальних інструментів. Не існує "ідеально безпечного" налаштування. Мета полягає в тому, щоб свідомо визначити:
- хто може говорити з вашим ботом
- де боту дозволено діяти
- чого бот може торкатися
Почніть із найменшого доступу, якого все ще достатньо, а потім розширюйте його, коли здобудете впевненість.
Розгортання та довіра до хоста
OpenClaw передбачає, що межа хоста й конфігурації є довіреною:
- Якщо хтось може змінювати стан/конфігурацію хоста Gateway (
~/.openclaw, зокремаopenclaw.json), вважайте цю особу довіреним оператором. - Запуск одного Gateway для кількох взаємно недовірених/змагальних операторів не є рекомендованим налаштуванням.
- Для команд зі змішаною довірою розділяйте межі довіри окремими gateway (або щонайменше окремими користувачами ОС/хостами).
- Рекомендоване типове налаштування: один користувач на машину/хост (або VPS), один gateway для цього користувача та один або більше агентів у цьому gateway.
- Усередині одного екземпляра Gateway автентифікований доступ оператора є довіреною роллю площини керування, а не роллю орендаря на рівні користувача.
- Ідентифікатори сеансів (
sessionKey, ідентифікатори сеансів, мітки) є селекторами маршрутизації, а не токенами авторизації. - Якщо кілька людей можуть писати одному агенту з доступом до інструментів, кожна з них може керувати тим самим набором дозволів. Ізоляція сеансів/пам’яті на рівні користувача допомагає приватності, але не перетворює спільного агента на авторизацію хоста на рівні користувача.
Безпечні файлові операції
OpenClaw використовує @openclaw/fs-safe для доступу до файлів у межах кореня, атомарних записів, видобування архівів, тимчасових робочих просторів і допоміжних засобів для секретних файлів. OpenClaw типово вимикає необов’язковий POSIX Python-помічник fs-safe; встановлюйте OPENCLAW_FS_SAFE_PYTHON_MODE=auto або require лише тоді, коли вам потрібне додаткове посилення fd-відносних мутацій і ви можете підтримувати середовище виконання Python.
Докладніше: Безпечні файлові операції.
Спільний робочий простір Slack: реальний ризик
Якщо "усі в Slack можуть писати боту", основний ризик — делеговані повноваження інструментів:
- будь-який дозволений відправник може спричиняти виклики інструментів (
exec, браузер, мережеві/файлові інструменти) у межах політики агента; - ін’єкція підказок/контенту від одного відправника може спричинити дії, що впливають на спільний стан, пристрої або виводи;
- якщо один спільний агент має чутливі облікові дані/файли, будь-який дозволений відправник потенційно може керувати ексфільтрацією через використання інструментів.
Використовуйте окремих агентів/gateway з мінімальними інструментами для командних робочих процесів; агентів із персональними даними тримайте приватними.
Спільний агент компанії: прийнятний шаблон
Це прийнятно, коли всі, хто використовує цього агента, перебувають в одній межі довіри (наприклад, одна команда компанії), а агент суворо обмежений бізнес-завданнями.
- запускайте його на виділеній машині/VM/контейнері;
- використовуйте виділеного користувача ОС + виділений браузер/профіль/облікові записи для цього середовища виконання;
- не входьте в цьому середовищі виконання в персональні облікові записи Apple/Google або персональні профілі менеджера паролів/браузера.
Якщо ви змішуєте персональні й корпоративні ідентичності в одному середовищі виконання, ви руйнуєте розділення й підвищуєте ризик розкриття персональних даних.
Концепція довіри до Gateway і Node
Сприймайте Gateway і node як один домен довіри оператора з різними ролями:
- Gateway — це площина керування та поверхня політики (
gateway.auth, політика інструментів, маршрутизація). - Node — це поверхня віддаленого виконання, спарена з цим Gateway (команди, дії пристрою, локальні можливості хоста).
- Викликача, автентифікованого в Gateway, довірено в межах Gateway. Після спарювання дії node є довіреними діями оператора на цьому node.
- Рівні області оператора та перевірки під час схвалення підсумовано в Областях оператора.
- Прямі loopback-клієнти бекенду, автентифіковані за допомогою спільного gateway токена/пароля, можуть виконувати внутрішні RPC площини керування без представлення користувацької ідентичності пристрою. Це не обхід віддаленого або браузерного спарювання: мережеві клієнти, клієнти node, клієнти з device-token і явні ідентичності пристроїв усе ще проходять спарювання та примусове підвищення області.
sessionKey— це вибір маршрутизації/контексту, а не автентифікація на рівні користувача.- Схвалення exec (список дозволів + запит) — це запобіжники для наміру оператора, а не ворожа багатокористувацька ізоляція.
- Типове налаштування продукту OpenClaw для довірених установок з одним оператором полягає в тому, що host exec на
gateway/nodeдозволено без запитів на схвалення (security="full",ask="off", якщо ви це не посилите). Це типове значення є свідомим UX-рішенням, а не вразливістю саме по собі. - Схвалення exec прив’язують точний контекст запиту та best-effort прямі локальні файлові операнди; вони не моделюють семантично кожен шлях завантажувача середовища виконання/інтерпретатора. Для сильних меж використовуйте пісочниці та ізоляцію хоста.
Якщо вам потрібна ізоляція ворожих користувачів, розділіть межі довіри за користувачем ОС/хостом і запускайте окремі gateway.
Матриця меж довіри
Використовуйте це як швидку модель під час тріажу ризику:
| Межа або контроль | Що це означає | Поширене хибне тлумачення |
|---|---|---|
gateway.auth (token/password/trusted-proxy/device auth) |
Автентифікує викликачів до API gateway | "Для безпеки потрібні підписи кожного повідомлення в кожному кадрі" |
sessionKey |
Ключ маршрутизації для вибору контексту/сеансу | "Ключ сеансу є межею автентифікації користувача" |
| Запобіжники підказок/контенту | Зменшують ризик зловживання моделлю | "Сама лише ін’єкція підказки доводить обхід автентифікації" |
canvas.eval / browser evaluate |
Навмисна можливість оператора, коли ввімкнено | "Будь-який примітив JS eval автоматично є вразливістю в цій моделі довіри" |
Локальна оболонка TUI ! |
Явне локальне виконання, ініційоване оператором | "Зручна команда локальної оболонки є віддаленою ін’єкцією" |
| Спарювання Node і команди node | Віддалене виконання рівня оператора на спарених пристроях | "Керування віддаленим пристроєм типово слід трактувати як доступ недовіреного користувача" |
gateway.nodes.pairing.autoApproveCidrs |
Opt-in політика реєстрації node в довіреній мережі | "Вимкнений за замовчуванням список дозволів є автоматичною вразливістю спарювання" |
Межі кількох агентів і під-агентів
OpenClaw може запускати багато агентів усередині одного Gateway, але ці агенти все одно перебувають у межах тієї самої довіреної операторської межі, якщо ви не розділите розгортання за Gateway, користувачем ОС, хостом або пісочницею. Сприймайте делегування під-агентам як рішення щодо політики інструментів і пісочниці, а не як ворожий багатокористувацький шар авторизації.
Очікувана поведінка всередині одного довіреного Gateway:
- Автентифікований оператор може маршрутизувати роботу до сеансів і агентів, які йому дозволено використовувати конфігурацією.
sessionKey, ідентифікатор сеансу, мітки та ключі сеансів під-агентів вибирають контекст розмови. Вони не є bearer credentials і не є межами авторизації на рівні користувача.- Під-агенти типово мають окремі сеанси. Нативний
sessions_spawnвикористовує ізольований контекст, якщо викликач явно не проситьcontext: "fork"; потоково прив’язані подальші сеанси використовують розгалужений контекст, бо продовжують гілку розмови. - Розгалужений під-агент може бачити контекст транскрипту, який йому навмисно надали. Це очікувано. Це стає проблемою безпеки лише тоді, коли він отримує контекст, який політика заборонила йому отримувати.
- Доступ до інструментів походить від ефективного профілю, політики каналу/групи/провайдера, політики пісочниці, політики на рівні агента та шару обмежень під-агента. Широкий профіль інструментів навмисно надає широкі можливості.
- Профілі автентифікації під-агентів визначаються за цільовим ідентифікатором агента. Автентифікація основного агента може бути доступна як резервна, якщо ви не розділите облікові дані/розгортання; не покладайтеся лише на ідентичність під-агента для сильної ізоляції секретів.
Що вважається реальним обходом межі:
sessions_spawnпрацює, хоча ефективна політика інструментів його заборонила.- Дочірній процес працює без пісочниці, хоча запитувач перебуває в пісочниці або виклик
вимагав
sandbox: "require". - Дочірній процес отримує інструменти сеансу, системні інструменти або доступ до цільового агента, які визначена конфігурація заборонила.
- Листовий під-агент керує, завершує, спрямовує або надсилає повідомлення до sibling-сеансів, які він не породжував.
- Під-агент бачить транскрипт, пам’ять, облікові дані або файли, які були виключені явною політикою або межею пісочниці.
- Викликач Gateway/API без потрібної автентифікації Gateway або trusted-proxy/device identity може запускати виконання агента або інструмента.
Параметри посилення:
- Тримайте
sessions_spawnзабороненим, якщо агенту справді не потрібне делегування. - Віддавайте перевагу
tools.profile: "messaging"або іншому вузькому профілю для агентів, які спілкуються із зовнішніми каналами. - Встановіть
agents.list[].subagents.requireAgentId: trueдля агентів, які можуть породжувати роботу, щоб вибір цілі був явним. - Тримайте
agents.defaults.subagents.allowAgentsіagents.list[].subagents.allowAgentsвузькими; уникайте["*"]для агентів, які отримують недовірений ввід. - Використовуйте
tools.subagents.tools.allow, щоб зробити інструменти під-агента дозволеними лише явно замість успадкування широкого батьківського профілю. - Для робочих процесів, які мають лишатися в пісочниці, використовуйте
sessions_spawnзsandbox: "require". - Використовуйте окремі gateway, користувачів ОС, хости, профілі браузера й облікові дані, коли агенти або користувачі є взаємно недовіреними.
Не вразливості за задумом
Поширені знахідки, що не входять до обсягу
Про ці шаблони повідомляють часто, і зазвичай їх закривають без дій, якщо не продемонстровано реальний обхід межі:
- Ланцюжки лише з prompt injection без обходу політики, автентифікації або sandbox.
- Твердження, що припускають ворожу багатоорендну роботу на одному спільному хості або конфігурації.
- Твердження, що класифікують звичайний доступ оператора шляхом читання (наприклад
sessions.list/sessions.preview/chat.history) як IDOR у спільному налаштуванні Gateway. - Твердження, що трактують очікуване успадкування стенограми
context: "fork"як обхід межі, коли запитувач явно розгалузив цей контекст. - Твердження, що трактують широкий доступ інструментів sub-agent як обхід, коли налаштований профіль або allowlist навмисно надали ці інструменти.
- Знахідки для розгортань лише на localhost (наприклад HSTS на gateway, доступному лише через loopback).
- Знахідки щодо підпису вхідного Webhook Discord для вхідних шляхів, яких немає в цьому репозиторії.
- Звіти, що трактують метадані сполучення node як прихований другий шар
затвердження для кожної команди
system.run, коли реальною межею виконання все ще є глобальна політика команд node у gateway плюс власні затвердження exec цього node. - Звіти, що трактують налаштований
gateway.nodes.pairing.autoApproveCidrsяк вразливість сам по собі. Цей параметр вимкнений за замовчуванням, потребує явних записів CIDR/IP, застосовується лише до першого сполученняrole: nodeбез запитаних scope і не авто-затверджує operator/browser/Control UI, WebChat, підвищення ролі, розширення scope, зміни метаданих, зміни публічного ключа або шляхи заголовків trusted-proxy через loopback на тому самому хості, якщо автентифікацію trusted-proxy через loopback не було явно ввімкнено. - Знахідки "Відсутня авторизація для кожного користувача", що трактують
sessionKeyяк токен автентифікації.
Посилена базова конфігурація за 60 секунд
Спочатку використайте цю базову конфігурацію, а потім вибірково знову вмикайте інструменти для кожного довіреного агента:
{
gateway: {
mode: "local",
bind: "loopback",
auth: { mode: "token", token: "replace-with-long-random-token" },
},
session: {
dmScope: "per-channel-peer",
},
tools: {
profile: "messaging",
deny: ["group:automation", "group:runtime", "group:fs", "sessions_spawn", "sessions_send"],
fs: { workspaceOnly: true },
exec: { security: "deny", ask: "always" },
elevated: { enabled: false },
},
channels: {
whatsapp: { dmPolicy: "pairing", groups: { "*": { requireMention: true } } },
},
}
Це залишає Gateway доступним лише локально, ізолює DM і типово вимикає інструменти площини керування та runtime.
Швидке правило для спільної скриньки
Якщо вашому боту можуть писати DM більше ніж одна людина:
- Установіть
session.dmScope: "per-channel-peer"(або"per-account-channel-peer"для каналів із кількома обліковими записами). - Залишайте
dmPolicy: "pairing"або суворі allowlist. - Ніколи не поєднуйте спільні DM із широким доступом до інструментів.
- Це посилює спільні/кооперативні скриньки, але не призначено для ізоляції від ворожих співорендарів, коли користувачі мають спільний доступ на запис до хоста/конфігурації.
Модель видимості контексту
OpenClaw розділяє два поняття:
- Авторизація запуску: хто може запускати агента (
dmPolicy,groupPolicy, allowlist, шлюзи згадок). - Видимість контексту: який додатковий контекст інʼєктується у вхідні дані моделі (тіло відповіді, цитований текст, історія гілки, переслані метадані).
Allowlist контролюють запуск і авторизацію команд. Параметр contextVisibility керує тим, як фільтрується додатковий контекст (цитовані відповіді, корені гілок, отримана історія):
contextVisibility: "all"(за замовчуванням) зберігає додатковий контекст у отриманому вигляді.contextVisibility: "allowlist"фільтрує додатковий контекст до відправників, дозволених активними перевірками allowlist.contextVisibility: "allowlist_quote"поводиться якallowlist, але все одно зберігає одну явно процитовану відповідь.
Установлюйте contextVisibility для кожного каналу або для кожної кімнати/розмови. Див. Групові чати для деталей налаштування.
Настанови з тріажу advisory:
- Твердження, які лише показують, що "модель може бачити цитований або історичний текст від відправників не з allowlist", є знахідками з посилення, які можна усунути через
contextVisibility, а не обходами меж автентифікації або sandbox самі по собі. - Щоб мати вплив на безпеку, звіти все ще мають продемонструвати обхід межі довіри (автентифікації, політики, sandbox, затвердження або іншої задокументованої межі).
Що перевіряє аудит (загальний рівень)
- Вхідний доступ (політики DM, групові політики, allowlist): чи можуть незнайомці запускати бота?
- Радіус ураження інструментів (підвищені інструменти + відкриті кімнати): чи може prompt injection перетворитися на дії shell/файлів/мережі?
- Дрейф затвердження exec (
security=full,autoAllowSkills, allowlist інтерпретаторів безstrictInlineEval): чи guardrail-и host-exec все ще роблять те, що ви очікуєте?security="full"є широким попередженням про позицію, а не доказом бага. Це вибране значення за замовчуванням для довірених налаштувань персонального асистента; посилюйте його лише тоді, коли ваша модель загроз потребує guardrail-ів затвердження або allowlist.
- Мережева експозиція (bind/auth Gateway, Tailscale Serve/Funnel, слабкі/короткі токени автентифікації).
- Експозиція керування браузером (віддалені node, relay-порти, віддалені CDP-ендпоінти).
- Гігієна локального диска (дозволи, symlink, include-и конфігурації, шляхи "синхронізованої теки").
- Plugins (plugins завантажуються без явного allowlist).
- Дрейф політик/помилкова конфігурація (налаштовані параметри sandbox docker, але режим sandbox вимкнений; неефективні шаблони
gateway.nodes.denyCommands, бо зіставлення відбувається лише за точною назвою команди (наприкладsystem.run) і не перевіряє текст shell; небезпечні записиgateway.nodes.allowCommands; глобальнийtools.profile="minimal"перевизначений профілями для окремих агентів; інструменти, що належать plugin, доступні за дозвільної політики інструментів). - Дрейф очікувань runtime (наприклад припущення, що неявний exec усе ще означає
sandbox, колиtools.exec.hostтепер за замовчуванням маєauto, або явне встановленняtools.exec.host="sandbox", коли режим sandbox вимкнений). - Гігієна моделі (попереджати, коли налаштовані моделі виглядають застарілими; це не жорсткий блок).
Якщо запустити --deep, OpenClaw також намагається виконати best-effort live-зонд Gateway.
Мапа зберігання облікових даних
Використовуйте це під час аудиту доступу або вирішення, що резервно копіювати:
- WhatsApp:
~/.openclaw/credentials/whatsapp/<accountId>/creds.json - Токен бота Telegram: config/env або
channels.telegram.tokenFile(лише звичайний файл; symlink відхиляються) - Токен бота Discord: config/env або SecretRef (провайдери env/file/exec)
- Токени Slack: config/env (
channels.slack.*) - Allowlist сполучення:
~/.openclaw/credentials/<channel>-allowFrom.json(обліковий запис за замовчуванням)~/.openclaw/credentials/<channel>-<accountId>-allowFrom.json(облікові записи не за замовчуванням)
- Профілі автентифікації моделі:
~/.openclaw/agents/<agentId>/agent/auth-profiles.json - Стан runtime Codex:
~/.openclaw/agents/<agentId>/agent/codex-home/ - Payload секретів із файловим бекендом (необовʼязково):
~/.openclaw/secrets.json - Імпорт застарілого OAuth:
~/.openclaw/credentials/oauth.json
Чекліст аудиту безпеки
Коли аудит друкує знахідки, розглядайте це як порядок пріоритетів:
- Будь-що "open" + інструменти ввімкнено: спочатку заблокуйте DM/групи (pairing/allowlist), потім посильте політику інструментів/sandboxing.
- Публічна мережева експозиція (LAN bind, Funnel, відсутня автентифікація): виправте негайно.
- Віддалена експозиція керування браузером: трактуйте її як операторський доступ (лише tailnet, сполучайте node навмисно, уникайте публічної експозиції).
- Дозволи: переконайтеся, що state/config/credentials/auth не доступні для читання групі/всім.
- Plugins: завантажуйте лише те, чому явно довіряєте.
- Вибір моделі: віддавайте перевагу сучасним моделям, посиленим щодо інструкцій, для будь-якого бота з інструментами.
Глосарій аудиту безпеки
Кожна знахідка аудиту має ключ у вигляді структурованого checkId (наприклад
gateway.bind_no_auth або tools.exec.security_full_configured). Поширені
класи критичної серйозності:
fs.*- дозволи файлової системи на state, config, credentials, auth profiles.gateway.*- режим bind, auth, Tailscale, Control UI, налаштування trusted-proxy.hooks.*,browser.*,sandbox.*,tools.exec.*- посилення за окремими поверхнями.plugins.*,skills.*- ланцюг постачання plugin/skill і знахідки сканування.security.exposure.*- наскрізні перевірки, де політика доступу перетинається з радіусом ураження інструментів.
Див. повний каталог із рівнями серйозності, ключами виправлень і підтримкою авто-виправлень у Перевірки аудиту безпеки.
Control UI через HTTP
Control UI потребує захищеного контексту (HTTPS або localhost), щоб згенерувати ідентичність
пристрою. gateway.controlUi.allowInsecureAuth є локальним перемикачем сумісності:
- На localhost він дозволяє автентифікацію Control UI без ідентичності пристрою, коли сторінку завантажено через незахищений HTTP.
- Він не обходить перевірки сполучення.
- Він не послаблює вимоги до ідентичності віддалених (не localhost) пристроїв.
Надавайте перевагу HTTPS (Tailscale Serve) або відкривайте UI на 127.0.0.1.
Лише для аварійних сценаріїв gateway.controlUi.dangerouslyDisableDeviceAuth
повністю вимикає перевірки ідентичності пристрою. Це серйозне зниження безпеки;
залишайте його вимкненим, якщо ви не виконуєте активне налагодження і не можете швидко відкотити зміну.
Окремо від цих небезпечних прапорів, успішний gateway.auth.mode: "trusted-proxy"
може допускати operator сесії Control UI без ідентичності пристрою. Це
навмисна поведінка режиму автентифікації, а не скорочений шлях allowInsecureAuth, і вона все ще
не поширюється на сесії Control UI з роллю node.
openclaw security audit попереджає, коли цей параметр увімкнено.
Підсумок небезпечних або незахищених прапорів
openclaw security audit піднімає config.insecure_or_dangerous_flags, коли
відомі незахищені/небезпечні debug-перемикачі ввімкнені. Не встановлюйте їх у
production.
Flags tracked by the audit today
gateway.controlUi.allowInsecureAuth=truegateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=truegateway.controlUi.dangerouslyDisableDeviceAuth=truehooks.gmail.allowUnsafeExternalContent=truehooks.mappings[<index>].allowUnsafeExternalContent=truetools.exec.applyPatch.workspaceOnly=falseplugins.entries.acpx.config.permissionMode=approve-all
All `dangerous*` / `dangerously*` keys in the config schema
Control UI і браузер:
gateway.controlUi.dangerouslyAllowHostHeaderOriginFallbackgateway.controlUi.dangerouslyDisableDeviceAuthbrowser.ssrfPolicy.dangerouslyAllowPrivateNetwork
Зіставлення назв каналів (вбудовані та plugin-канали; також доступно для кожного
accounts.<accountId>, де застосовно):
channels.discord.dangerouslyAllowNameMatchingchannels.slack.dangerouslyAllowNameMatchingchannels.googlechat.dangerouslyAllowNameMatchingchannels.msteams.dangerouslyAllowNameMatchingchannels.synology-chat.dangerouslyAllowNameMatching(plugin-канал)channels.synology-chat.dangerouslyAllowInheritedWebhookPath(plugin-канал)channels.zalouser.dangerouslyAllowNameMatching(plugin-канал)channels.irc.dangerouslyAllowNameMatching(plugin-канал)channels.mattermost.dangerouslyAllowNameMatching(plugin-канал)
Мережева експозиція:
channels.telegram.network.dangerouslyAllowPrivateNetwork(також для кожного облікового запису)
Sandbox Docker (значення за замовчуванням + для кожного агента):
agents.defaults.sandbox.docker.dangerouslyAllowReservedContainerTargetsagents.defaults.sandbox.docker.dangerouslyAllowExternalBindSourcesagents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin
Конфігурація reverse proxy
Якщо ви запускаєте Gateway за reverse proxy (nginx, Caddy, Traefik тощо), налаштуйте
gateway.trustedProxies для коректної обробки forwarded-client IP.
Коли Gateway виявляє proxy-заголовки з адреси, якої немає в trustedProxies, він не трактуватиме зʼєднання як локальних клієнтів. Якщо автентифікацію gateway вимкнено, такі зʼєднання відхиляються. Це запобігає обходу автентифікації, коли проксійовані зʼєднання інакше здавалися б такими, що надходять із localhost, і отримували б автоматичну довіру.
gateway.trustedProxies також живить gateway.auth.mode: "trusted-proxy", але цей режим автентифікації суворіший:
- автентифікація trusted-proxy за замовчуванням закривається з відмовою для проксі з джерелом local loopback
- зворотні проксі local loopback на тому самому хості можуть використовувати
gateway.trustedProxiesдля виявлення локальних клієнтів і обробки перенаправленої IP-адреси - зворотні проксі local loopback на тому самому хості можуть задовольнити
gateway.auth.mode: "trusted-proxy"лише колиgateway.auth.trustedProxy.allowLoopback = true; інакше використовуйте автентифікацію токеном/паролем
gateway:
trustedProxies:
- "10.0.0.1" # reverse proxy IP
# Optional. Default false.
# Only enable if your proxy cannot provide X-Forwarded-For.
allowRealIpFallback: false
auth:
mode: password
password: ${OPENCLAW_GATEWAY_PASSWORD}
Коли налаштовано trustedProxies, Gateway використовує X-Forwarded-For, щоб визначити IP-адресу клієнта. X-Real-IP за замовчуванням ігнорується, якщо явно не задано gateway.allowRealIpFallback: true.
Заголовки довіреного проксі не роблять спарення пристрою Node автоматично довіреним.
gateway.nodes.pairing.autoApproveCidrs — це окрема політика оператора, вимкнена за замовчуванням.
Навіть коли її ввімкнено, шляхи заголовків trusted-proxy із джерелом local loopback
виключаються з автоматичного схвалення Node, бо локальні викликачі можуть підробляти ці
заголовки, зокрема коли автентифікацію trusted-proxy через local loopback явно ввімкнено.
Правильна поведінка зворотного проксі (перезаписувати вхідні заголовки перенаправлення):
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
Неправильна поведінка зворотного проксі (додавати/зберігати недовірені заголовки перенаправлення):
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
Примітки щодо HSTS і походження
- Gateway OpenClaw передусім локальний/через local loopback. Якщо ви завершуєте TLS на зворотному проксі, встановіть HSTS там, на HTTPS-домені, зверненому до проксі.
- Якщо сам Gateway завершує HTTPS, можна встановити
gateway.http.securityHeaders.strictTransportSecurity, щоб OpenClaw додавав заголовок HSTS у відповіді. - Докладні вказівки щодо розгортання наведено в Автентифікації через довірений проксі.
- Для розгортань Control UI не через local loopback,
gateway.controlUi.allowedOriginsза замовчуванням обов’язковий. gateway.controlUi.allowedOrigins: ["*"]— це явна політика дозволу всіх браузерних origin, а не захищене значення за замовчуванням. Уникайте її поза суворо контрольованим локальним тестуванням.- Збої автентифікації браузерного origin на local loopback усе одно обмежуються за частотою, навіть коли
загальний виняток для local loopback увімкнено, але ключ блокування обмежується окремим
нормалізованим значенням
Origin, а не одним спільним кошиком localhost. gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=trueвмикає режим fallback для origin із Host-заголовка; ставтеся до нього як до небезпечної політики, яку вибирає оператор.- Розглядайте DNS rebinding і поведінку заголовка proxy-host як питання посилення безпеки розгортання; тримайте
trustedProxiesвузькими й уникайте прямого відкриття Gateway у публічний інтернет.
Локальні журнали сесій зберігаються на диску
OpenClaw зберігає транскрипти сесій на диску в ~/.openclaw/agents/<agentId>/sessions/*.jsonl.
Це потрібно для безперервності сесій і, за бажанням, індексації пам’яті сесій, але це також означає, що
будь-який процес/користувач із доступом до файлової системи може читати ці журнали. Розглядайте доступ до диска як межу довіри
й обмежте дозволи на ~/.openclaw (див. розділ аудиту нижче). Якщо потрібна
сильніша ізоляція між агентами, запускайте їх під окремими користувачами ОС або на окремих хостах.
Виконання Node (system.run)
Якщо macOS Node спарено, Gateway може викликати system.run на цьому Node. Це віддалене виконання коду на Mac:
- Потребує спарення Node (схвалення + токен).
- Спарення Gateway Node не є поверхнею схвалення для кожної команди. Воно встановлює ідентичність/довіру Node і видачу токена.
- Gateway застосовує грубу глобальну політику команд Node через
gateway.nodes.allowCommands/denyCommands. - Керується на Mac через Settings → Exec approvals (security + ask + allowlist).
- Політика
system.runдля окремого Node — це власний файл схвалень виконання Node (exec.approvals.node.*), який може бути суворішим або м’якшим за глобальну політику Gateway щодо ідентифікаторів команд. - Node, що працює з
security="full"іask="off", дотримується стандартної моделі довіреного оператора. Вважайте це очікуваною поведінкою, якщо ваше розгортання явно не потребує суворішої позиції щодо схвалення або allowlist. - Режим схвалення прив’язує точний контекст запиту й, коли можливо, один конкретний операнд локального сценарію/файлу. Якщо OpenClaw не може точно визначити один прямий локальний файл для команди інтерпретатора/середовища виконання, виконання на основі схвалення відхиляється, а не обіцяє повне семантичне покриття.
- Для
host=nodeвиконання на основі схвалення також зберігає канонічний підготовленийsystemRunPlan; подальші схвалені пересилання повторно використовують цей збережений план, а Gateway відхиляє зміни викликача до команди/cwd/контексту сесії після створення запиту на схвалення. - Якщо ви не хочете віддаленого виконання, установіть безпеку на deny і видаліть спарення Node для цього Mac.
Ця відмінність важлива для тріажу:
- Повторно підключений спарений Node, який оголошує інший список команд, сам по собі не є вразливістю, якщо глобальна політика Gateway і локальні схвалення виконання Node все ще забезпечують фактичну межу виконання.
- Звіти, які трактують метадані спарення Node як другий прихований рівень схвалення для кожної команди, зазвичай є плутаниною політики/UX, а не обходом межі безпеки.
Динамічні Skills (спостерігач / віддалені Node)
OpenClaw може оновлювати список Skills у середині сесії:
- Спостерігач Skills: зміни в
SKILL.mdможуть оновити знімок Skills на наступному ході агента. - Віддалені Node: підключення macOS Node може зробити доступними Skills лише для macOS (на основі зондування bin).
Розглядайте папки Skills як довірений код і обмежте коло тих, хто може їх змінювати.
Модель загроз
Ваш AI-асистент може:
- Виконувати довільні команди shell
- Читати/записувати файли
- Доступатися до мережевих сервісів
- Надсилати повідомлення будь-кому (якщо ви надасте йому доступ до WhatsApp)
Люди, які вам пишуть, можуть:
- Намагатися обманом змусити ваш AI робити шкідливі речі
- Соціально інженерити доступ до ваших даних
- Зондувати деталі інфраструктури
Ключова концепція: контроль доступу перед інтелектом
Більшість збоїв тут — не складні експлойти, а ситуації типу «хтось написав боту, і бот зробив те, що його попросили».
Позиція OpenClaw:
- Спершу ідентичність: визначте, хто може говорити з ботом (спарення DM / allowlist / явне "open").
- Потім область дії: визначте, де боту дозволено діяти (allowlist груп + шлюзування згадок, інструменти, sandboxing, дозволи пристроїв).
- Модель наприкінці: вважайте, що моделлю можна маніпулювати; проєктуйте так, щоб маніпуляція мала обмежений радіус впливу.
Модель авторизації команд
Slash-команди й директиви виконуються лише для авторизованих відправників. Авторизація походить від
allowlist/спарення каналу плюс commands.useAccessGroups (див. Конфігурацію
і Slash-команди). Якщо allowlist каналу порожній або містить "*",
команди фактично відкриті для цього каналу.
/exec — це зручність лише в межах сесії для авторизованих операторів. Вона не записує конфігурацію й
не змінює інші сесії.
Ризик інструментів площини керування
Два вбудовані інструменти можуть робити сталі зміни площини керування:
gatewayможе перевіряти конфігурацію за допомогоюconfig.schema.lookup/config.getі робити сталі зміни черезconfig.apply,config.patchіupdate.run.cronможе створювати заплановані завдання, які продовжують працювати після завершення початкового чату/завдання.
Runtime-інструмент gateway, доступний лише власнику, усе ще відмовляється переписувати
tools.exec.ask або tools.exec.security; застарілі псевдоніми tools.bash.*
нормалізуються до тих самих захищених шляхів exec перед записом.
Зміни gateway config.apply і gateway config.patch, керовані агентом,
за замовчуванням закриваються з відмовою: агент може налаштовувати лише вузький набір шляхів
prompt, моделі та шлюзування згадок. Тому нові чутливі дерева конфігурації захищені,
якщо їх навмисно не додано до allowlist.
Для будь-якого агента/поверхні, що обробляє недовірений вміст, за замовчуванням забороніть це:
{
tools: {
deny: ["gateway", "cron", "sessions_spawn", "sessions_send"],
},
}
commands.restart=false блокує лише дії перезапуску. Це не вимикає дії gateway з конфігурацією/оновленням.
Plugins
Plugins працюють у процесі разом із Gateway. Розглядайте їх як довірений код:
- Установлюйте Plugins лише з джерел, яким довіряєте.
- Надавайте перевагу явним allowlist
plugins.allow. - Переглядайте конфігурацію Plugin перед увімкненням.
- Перезапускайте Gateway після змін Plugin.
- Якщо ви встановлюєте або оновлюєте Plugins (
openclaw plugins install <package>,openclaw plugins update <id>), ставтеся до цього як до запуску недовіреного коду:- Шлях установлення — це каталог окремого Plugin під активним коренем установлення Plugin.
- OpenClaw запускає вбудоване сканування небезпечного коду перед установленням/оновленням. Знахідки
criticalблокують за замовчуванням. - Встановлення npm і git Plugin запускають зближення залежностей менеджера пакетів лише під час явного процесу встановлення/оновлення. Локальні шляхи й архіви розглядаються як самодостатні пакети Plugin; OpenClaw копіює/посилається на них без запуску
npm install. - Надавайте перевагу закріпленим точним версіям (
@scope/[email protected]) і перевіряйте розпакований код на диску перед увімкненням. --dangerously-force-unsafe-install— це аварійний обхід лише для хибних спрацювань вбудованого сканування в потоках встановлення/оновлення Plugin. Він не обходить блокування політики хуків Pluginbefore_installі не обходить збої сканування.- Встановлення залежностей Skills через Gateway дотримується того самого поділу на небезпечне/підозріле: вбудовані знахідки
criticalблокують, якщо викликач явно не встановитьdangerouslyForceUnsafeInstall, тоді як підозрілі знахідки все ще лише попереджають.openclaw skills installзалишається окремим потоком завантаження/встановлення Skills із ClawHub.
Докладніше: Plugins
Модель доступу DM: спарення, allowlist, відкрито, вимкнено
Усі поточні канали, здатні до DM, підтримують політику DM (dmPolicy або *.dm.policy), яка шлюзує вхідні DM до обробки повідомлення:
pairing(за замовчуванням): невідомі відправники отримують короткий код спарення, і бот ігнорує їхнє повідомлення, доки його не схвалено. Коди спливають через 1 годину; повторні DM не надішлють код повторно, доки не буде створено новий запит. Очікувані запити за замовчуванням обмежено до 3 на канал.allowlist: невідомі відправники блокуються (без рукостискання спарення).open: дозволити будь-кому надсилати DM (публічно). Потребує, щоб allowlist каналу містив"*"(явне ввімкнення).disabled: повністю ігнорувати вхідні DM.
Схвалення через CLI:
openclaw pairing list <channel>
openclaw pairing approve <channel> <code>
Докладніше + файли на диску: Спарення
Ізоляція сесій DM (багатокористувацький режим)
За замовчуванням OpenClaw спрямовує усі DM в основну сесію, щоб ваш асистент мав безперервність між пристроями й каналами. Якщо кілька людей можуть надсилати DM боту (відкриті DM або allowlist із кількома людьми), розгляньте ізоляцію сесій DM:
{
session: { dmScope: "per-channel-peer" },
}
Це запобігає витоку контексту між користувачами, зберігаючи групові чати ізольованими.
Це межа контексту повідомлень, а не межа адміністратора хоста. Якщо користувачі взаємно недружні й спільно використовують той самий хост/конфігурацію Gateway, натомість запускайте окремі Gateway для кожної межі довіри.
Захищений режим DM (рекомендовано)
Розглядайте наведений вище фрагмент як захищений режим DM:
- За замовчуванням:
session.dmScope: "main"(усі DM спільно використовують одну сесію для безперервності). - Стандарт локального CLI-онбордингу: записує
session.dmScope: "per-channel-peer", коли не задано (зберігає наявні явні значення). - Захищений режим DM:
session.dmScope: "per-channel-peer"(кожна пара канал+відправник отримує ізольований контекст DM). - Ізоляція peer між каналами:
session.dmScope: "per-peer"(кожен відправник отримує одну сесію в усіх каналах того самого типу).
Якщо ви запускаєте кілька облікових записів на одному каналі, натомість використовуйте per-account-channel-peer. Якщо та сама людина контактує з вами через кілька каналів, використовуйте session.identityLinks, щоб звести ці DM-сеанси до однієї канонічної ідентичності. Див. Керування сеансами і Конфігурація.
Списки дозволених для DM і груп
OpenClaw має два окремі рівні "хто може мене активувати?":
- Список дозволених для DM (
allowFrom/channels.discord.allowFrom/channels.slack.allowFrom; застаріле:channels.discord.dm.allowFrom,channels.slack.dm.allowFrom): кому дозволено спілкуватися з ботом у прямих повідомленнях.- Коли
dmPolicy="pairing", схвалення записуються до сховища списку дозволених для сполучення в межах облікового запису в~/.openclaw/credentials/(<channel>-allowFrom.jsonдля стандартного облікового запису,<channel>-<accountId>-allowFrom.jsonдля нестандартних облікових записів) і об’єднуються зі списками дозволених із конфігурації.
- Коли
- Список дозволених для груп (залежить від каналу): від яких груп/каналів/гільдій бот взагалі прийматиме повідомлення.
- Поширені шаблони:
channels.whatsapp.groups,channels.telegram.groups,channels.imessage.groups: стандартні налаштування для окремих груп, як-отrequireMention; коли задано, це також діє як список дозволених для груп (додайте"*", щоб зберегти поведінку "дозволити всім").groupPolicy="allowlist"+groupAllowFrom: обмежує, хто може активувати бота всередині групового сеансу (WhatsApp/Telegram/Signal/iMessage/Microsoft Teams).channels.discord.guilds/channels.slack.channels: списки дозволених для окремих поверхонь + стандартні налаштування згадок.
- Перевірки груп виконуються в такому порядку: спершу
groupPolicy/списки дозволених для груп, потім активація згадкою/відповіддю. - Відповідь на повідомлення бота (неявна згадка) не обходить списки дозволених відправників, як-от
groupAllowFrom. - Примітка щодо безпеки: розглядайте
dmPolicy="open"іgroupPolicy="open"як налаштування останнього засобу. Їх варто використовувати вкрай рідко; віддавайте перевагу сполученню + спискам дозволених, якщо ви не повністю довіряєте кожному учаснику кімнати.
- Поширені шаблони:
Докладніше: Конфігурація і Групи
Prompt injection (що це і чому це важливо)
Prompt injection — це коли зловмисник створює повідомлення, яке змушує модель зробити щось небезпечне ("ігноруй свої інструкції", "виведи свою файлову систему", "перейди за цим посиланням і виконай команди" тощо).
Навіть із сильними системними промптами prompt injection не розв’язано. Захисні обмеження системного промпта — це лише м’які вказівки; жорстке примусове застосування забезпечують політика інструментів, схвалення виконання, пісочниця та списки дозволених каналів (і оператори можуть навмисно вимкнути ці механізми). Що допомагає на практиці:
- Тримайте вхідні DM закритими (сполучення/списки дозволених).
- Віддавайте перевагу шлюзу за згадками в групах; уникайте ботів, які "завжди ввімкнені" у публічних кімнатах.
- За замовчуванням розглядайте посилання, вкладення та вставлені інструкції як ворожі.
- Виконуйте чутливі інструменти в пісочниці; тримайте секрети поза файловою системою, доступною агенту.
- Примітка: пісочниця вмикається явно. Якщо режим пісочниці вимкнено, неявний
host=autoвизначається як хост Gateway. Явнийhost=sandboxусе одно відмовляє закрито, бо середовище виконання пісочниці недоступне. Встановітьhost=gateway, якщо хочете зробити таку поведінку явною в конфігурації. - Обмежте високоризикові інструменти (
exec,browser,web_fetch,web_search) довіреними агентами або явними списками дозволених. - Якщо ви додаєте інтерпретатори до списку дозволених (
python,node,ruby,perl,php,lua,osascript), увімкнітьtools.exec.strictInlineEval, щоб форми вбудованого eval усе одно потребували явного схвалення. - Аналіз схвалення shell також відхиляє форми розгортання параметрів POSIX (
$VAR,$?,$$,$1,$@,${…}) всередині heredoc без лапок, тому тіло heredoc зі списку дозволених не може непомітно провести shell-розгортання повз перевірку списку дозволених як звичайний текст. Візьміть термінатор heredoc у лапки (наприклад,<<'EOF'), щоб явно ввімкнути семантику буквального тіла; heredoc без лапок, які розгорнули б змінні, відхиляються. - Вибір моделі має значення: старіші/менші/застарілі моделі значно менш стійкі до prompt injection і неправильного використання інструментів. Для агентів з інструментами використовуйте найсильнішу доступну модель останнього покоління, посилену для дотримання інструкцій.
Ознаки небезпеки, які слід вважати недовіреними:
- "Прочитай цей файл/URL і зроби точно те, що там сказано."
- "Ігноруй свій системний промпт або правила безпеки."
- "Розкрий свої приховані інструкції або виводи інструментів."
- "Встав повний вміст ~/.openclaw або свої журнали."
Очищення спеціальних токенів у зовнішньому вмісті
OpenClaw вилучає поширені літерали спеціальних токенів шаблонів чату self-hosted LLM із загорнутого зовнішнього вмісту та метаданих до того, як вони потрапляють до моделі. Охоплені сімейства маркерів включають Qwen/ChatML, Llama, Gemma, Mistral, Phi та рольові/покрокові токени GPT-OSS.
Чому:
- OpenAI-сумісні бекенди, що стоять перед self-hosted моделями, іноді зберігають спеціальні токени, які з’являються в тексті користувача, замість того щоб маскувати їх. Зловмисник, який може записати щось у вхідний зовнішній вміст (отриману сторінку, тіло електронного листа, вивід інструмента вмісту файлу), інакше міг би інжектувати синтетичну межу ролі
assistantабоsystemі вийти за межі захисних обмежень загорнутого вмісту. - Очищення відбувається на рівні загортання зовнішнього вмісту, тому застосовується однаково до інструментів fetch/read і вхідного вмісту каналів, а не окремо для кожного провайдера.
- Вихідні відповіді моделі вже мають окремий санітайзер, який вилучає витоки
<tool_call>,<function_calls>,<system-reminder>,<previous_response>і подібні внутрішні службові конструкції середовища виконання з видимих користувачу відповідей на фінальній межі доставки в канал. Санітайзер зовнішнього вмісту є вхідним відповідником.
Це не замінює інші засоби посилення захисту на цій сторінці - dmPolicy, списки дозволених, схвалення exec, пісочницю та contextVisibility усе ще виконують основну роботу. Це закриває один конкретний обхід на рівні токенізатора проти self-hosted стеків, які передають текст користувача зі спеціальними токенами без змін.
Небезпечні прапорці обходу зовнішнього вмісту
OpenClaw містить явні прапорці обходу, які вимикають безпечне загортання зовнішнього вмісту:
hooks.mappings[].allowUnsafeExternalContenthooks.gmail.allowUnsafeExternalContent- Поле payload Cron
allowUnsafeExternalContent
Рекомендації:
- Тримайте їх незаданими/false у production.
- Вмикайте лише тимчасово для вузько обмеженого налагодження.
- Якщо ввімкнено, ізолюйте цього агента (пісочниця + мінімальні інструменти + окремий простір імен сеансів).
Примітка про ризики hooks:
- Payload hooks — це недовірений вміст, навіть коли доставка надходить із систем, які ви контролюєте (пошта/документи/вебвміст можуть переносити prompt injection).
- Слабкі рівні моделей збільшують цей ризик. Для автоматизації на основі hooks віддавайте перевагу сильним сучасним рівням моделей і тримайте політику інструментів суворою (
tools.profile: "messaging"або суворішою), а також використовуйте пісочницю, де можливо.
Prompt injection не потребує публічних DM
Навіть якщо лише ви можете писати боту, prompt injection усе одно може статися через будь-який недовірений вміст, який читає бот (результати вебпошуку/отримання, сторінки браузера, електронні листи, документи, вкладення, вставлені журнали/код). Іншими словами: відправник не є єдиною поверхнею загроз; сам вміст може нести ворожі інструкції.
Коли інструменти ввімкнені, типовий ризик — ексфільтрація контексту або запуск викликів інструментів. Зменшуйте радіус ураження так:
- Використовуйте агента-читача лише для читання або без інструментів, щоб підсумовувати недовірений вміст, а потім передавайте підсумок основному агенту.
- Тримайте
web_search/web_fetch/browserвимкненими для агентів з інструментами, якщо вони не потрібні. - Для URL-входів OpenResponses (
input_file/input_image) задайте суворіgateway.http.endpoints.responses.files.urlAllowlistіgateway.http.endpoints.responses.images.urlAllowlist, аmaxUrlPartsтримайте низьким. Порожні списки дозволених вважаються незаданими; використовуйтеfiles.allowUrl: false/images.allowUrl: false, якщо хочете повністю вимкнути отримання URL. - Для файлових входів OpenResponses декодований текст
input_fileусе одно інжектується як недовірений зовнішній вміст. Не покладайтеся на те, що текст файлу довірений лише тому, що Gateway декодував його локально. Інжектований блок усе одно містить явні межові маркери<<<EXTERNAL_UNTRUSTED_CONTENT ...>>>і метаданіSource: External, хоча цей шлях опускає довший банерSECURITY NOTICE:. - Таке саме загортання на основі маркерів застосовується, коли медіарозуміння витягує текст із прикріплених документів перед додаванням цього тексту до медіапромпта.
- Вмикайте пісочницю та суворі списки дозволених інструментів для будь-якого агента, що торкається недовіреного вводу.
- Тримайте секрети поза промптами; натомість передавайте їх через env/config на хості Gateway.
Self-hosted бекенди LLM
OpenAI-сумісні self-hosted бекенди, як-от vLLM, SGLang, TGI, LM Studio,
або власні стеки токенізаторів Hugging Face, можуть відрізнятися від hosted провайдерів тим, як
обробляються спеціальні токени шаблонів чату. Якщо бекенд токенізує буквальні рядки
на кшталт <|im_start|>, <|start_header_id|> або <start_of_turn> як
структурні токени шаблону чату всередині вмісту користувача, недовірений текст може спробувати
підробити межі ролей на рівні токенізатора.
OpenClaw вилучає поширені літерали спеціальних токенів сімейств моделей із загорнутого зовнішнього вмісту перед надсиланням його до моделі. Тримайте загортання зовнішнього вмісту ввімкненим і віддавайте перевагу налаштуванням бекенда, які розділяють або екранують спеціальні токени у вмісті, наданому користувачем, коли це доступно. Hosted провайдери, як-от OpenAI і Anthropic, уже застосовують власне очищення на боці запиту.
Сила моделі (примітка щодо безпеки)
Стійкість до prompt injection не є однаковою на всіх рівнях моделей. Менші/дешевші моделі загалом більш схильні до неправильного використання інструментів і захоплення інструкцій, особливо під ворожими промптами.
Рекомендації:
- Використовуйте модель останнього покоління найкращого рівня для будь-якого бота, який може запускати інструменти або торкатися файлів/мереж.
- Не використовуйте старіші/слабші/менші рівні для агентів з інструментами або недовірених вхідних скриньок; ризик prompt injection надто високий.
- Якщо вам доводиться використовувати меншу модель, зменште радіус ураження (інструменти лише для читання, сильна пісочниця, мінімальний доступ до файлової системи, суворі списки дозволених).
- Під час запуску малих моделей вмикайте пісочницю для всіх сеансів і вимикайте web_search/web_fetch/browser, якщо входи не контролюються жорстко.
- Для особистих асистентів лише з чатом, довіреним вводом і без інструментів менші моделі зазвичай прийнятні.
Reasoning і докладний вивід у групах
/reasoning, /verbose і /trace можуть розкривати внутрішнє reasoning, вивід інструментів
або діагностику plugin, які
не призначалися для публічного каналу. У групових налаштуваннях розглядайте їх як лише для налагодження
і тримайте вимкненими, якщо вони вам явно не потрібні.
Рекомендації:
- Тримайте
/reasoning,/verboseі/traceвимкненими в публічних кімнатах. - Якщо вмикаєте їх, робіть це лише в довірених DM або кімнатах із жорстким контролем.
- Пам’ятайте: докладний і trace-вивід може включати аргументи інструментів, URL, діагностику plugin і дані, які бачила модель.
Приклади посилення конфігурації
Права доступу до файлів
Тримайте config + state приватними на хості Gateway:
~/.openclaw/openclaw.json:600(лише читання/запис користувача)~/.openclaw:700(лише користувач)
openclaw doctor може попередити й запропонувати посилити ці права доступу.
Мережеве відкриття (bind, port, firewall)
Gateway мультиплексує WebSocket + HTTP на одному port:
- За замовчуванням:
18789 - Config/flags/env:
gateway.port,--port,OPENCLAW_GATEWAY_PORT
Ця HTTP-поверхня включає Control UI і хост canvas:
- Control UI (SPA-ресурси) (стандартний базовий шлях
/) - Хост canvas:
/__openclaw__/canvas/і/__openclaw__/a2ui/(довільний HTML/JS; розглядайте як недовірений вміст)
Якщо ви завантажуєте вміст canvas у звичайному браузері, розглядайте його як будь-яку іншу недовірену вебсторінку:
- Не відкривайте хост canvas для недовірених мереж/користувачів.
- Не змушуйте вміст canvas спільно використовувати той самий origin із привілейованими вебповерхнями, якщо ви не повністю розумієте наслідки.
Режим bind керує тим, де Gateway слухає:
gateway.bind: "loopback"(типово): підключатися можуть лише локальні клієнти.- Прив’язки не до loopback (
"lan","tailnet","custom") розширюють поверхню атаки. Використовуйте їх лише з автентифікацією Gateway (спільний токен/пароль або правильно налаштований довірений проксі) і справжнім брандмауером.
Практичні правила:
- Надавайте перевагу Tailscale Serve замість прив’язок LAN (Serve залишає Gateway на loopback, а Tailscale керує доступом).
- Якщо потрібно прив’язатися до LAN, обмежте порт брандмауером до суворого allowlist вихідних IP-адрес; не відкривайте port-forwarding широко.
- Ніколи не відкривайте неавтентифікований Gateway на
0.0.0.0.
Публікація Docker-портів з UFW
Якщо ви запускаєте OpenClaw з Docker на VPS, пам’ятайте, що опубліковані порти контейнера
(-p HOST:CONTAINER або Compose ports:) маршрутизуються через ланцюги forwarding Docker,
а не лише через правила host INPUT.
Щоб трафік Docker відповідав вашій політиці брандмауера, застосовуйте правила в
DOCKER-USER (цей ланцюг обробляється до власних правил accept Docker).
У багатьох сучасних дистрибутивах iptables/ip6tables використовують frontend iptables-nft
і все одно застосовують ці правила до backend nftables.
Мінімальний приклад allowlist (IPv4):
# /etc/ufw/after.rules (append as its own *filter section)
*filter
:DOCKER-USER - [0:0]
-A DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j RETURN
-A DOCKER-USER -s 127.0.0.0/8 -j RETURN
-A DOCKER-USER -s 10.0.0.0/8 -j RETURN
-A DOCKER-USER -s 172.16.0.0/12 -j RETURN
-A DOCKER-USER -s 192.168.0.0/16 -j RETURN
-A DOCKER-USER -s 100.64.0.0/10 -j RETURN
-A DOCKER-USER -p tcp --dport 80 -j RETURN
-A DOCKER-USER -p tcp --dport 443 -j RETURN
-A DOCKER-USER -m conntrack --ctstate NEW -j DROP
-A DOCKER-USER -j RETURN
COMMIT
IPv6 має окремі таблиці. Додайте відповідну політику в /etc/ufw/after6.rules, якщо
Docker IPv6 увімкнено.
Уникайте жорсткого прописування назв інтерфейсів на кшталт eth0 у фрагментах документації. Назви інтерфейсів
відрізняються між образами VPS (ens3, enp* тощо), а невідповідності можуть випадково
оминути ваше правило deny.
Швидка перевірка після перезавантаження:
ufw reload
iptables -S DOCKER-USER
ip6tables -S DOCKER-USER
nmap -sT -p 1-65535 <public-ip> --open
Очікуваними зовнішніми портами мають бути лише ті, які ви навмисно відкриваєте (для більшості налаштувань: SSH + порти вашого reverse proxy).
Виявлення mDNS/Bonjour
Коли вбудований Plugin bonjour увімкнено, Gateway транслює свою присутність через mDNS (_openclaw-gw._tcp на порту 5353) для виявлення локальних пристроїв. У повному режимі це включає TXT-записи, які можуть розкривати операційні деталі:
cliPath: повний шлях файлової системи до бінарного файлу CLI (розкриває ім’я користувача та місце встановлення)sshPort: оголошує доступність SSH на хостіdisplayName,lanHost: інформація про hostname
Міркування операційної безпеки: Трансляція деталей інфраструктури спрощує розвідку для будь-кого в локальній мережі. Навіть "нешкідлива" інформація, як-от шляхи файлової системи та доступність SSH, допомагає зловмисникам скласти карту вашого середовища.
Рекомендації:
-
Залишайте Bonjour вимкненим, якщо виявлення LAN не потрібне. Bonjour автоматично запускається на хостах macOS і є opt-in в інших середовищах; прямі URL Gateway, Tailnet, SSH або wide-area DNS-SD уникають локального multicast.
-
Мінімальний режим (типово, коли Bonjour увімкнено, рекомендовано для відкритих Gateway): пропускайте чутливі поля з mDNS-трансляцій:
{ discovery: { mdns: { mode: "minimal" }, }, } -
Вимкніть режим mDNS, якщо хочете залишити Plugin увімкненим, але придушити виявлення локальних пристроїв:
{ discovery: { mdns: { mode: "off" }, }, } -
Повний режим (opt-in): включайте
cliPath+sshPortу TXT-записи:{ discovery: { mdns: { mode: "full" }, }, } -
Змінна середовища (альтернатива): установіть
OPENCLAW_DISABLE_BONJOUR=1, щоб вимкнути mDNS без змін конфігурації.
Коли Bonjour увімкнено в мінімальному режимі, Gateway транслює достатньо для виявлення пристроїв (role, gatewayPort, transport), але пропускає cliPath і sshPort. Застосунки, яким потрібна інформація про шлях CLI, можуть натомість отримати її через автентифіковане WebSocket-з’єднання.
Заблокуйте WebSocket Gateway (локальна автентифікація)
Автентифікація Gateway обов’язкова за замовчуванням. Якщо не налаштовано жодного дійсного шляху автентифікації gateway, Gateway відхиляє WebSocket-з’єднання (fail-closed).
Onboarding типово генерує токен (навіть для loopback), тому локальні клієнти мають автентифікуватися.
Установіть токен, щоб усі WS-клієнти мали автентифікуватися:
{
gateway: {
auth: { mode: "token", token: "your-token" },
},
}
Doctor може згенерувати його для вас: openclaw doctor --generate-gateway-token.
Необов’язково: закріпіть remote TLS за допомогою gateway.remote.tlsFingerprint, коли використовуєте wss://.
Plaintext ws:// типово дозволено лише для loopback. Для довірених шляхів приватної мережі
встановіть OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 у клієнтському процесі як
break-glass. Це навмисно лише середовище процесу, а не ключ конфігурації
openclaw.json.
Mobile pairing та ручні або відскановані маршрути gateway на Android суворіші:
cleartext приймається для loopback, але private-LAN, link-local, .local і
dotless hostnames мають використовувати TLS, якщо ви явно не ввімкнули довірений
private-network cleartext path.
Pairing локального пристрою:
- Pairing пристрою автоматично схвалюється для прямих підключень local loopback, щоб same-host клієнти працювали плавно.
- OpenClaw також має вузький backend/container-local self-connect path для довірених helper flows зі спільним секретом.
- Підключення Tailnet і LAN, включно з same-host tailnet binds, вважаються remote для pairing і все одно потребують схвалення.
- Доказ forwarded-header у loopback-запиті дискваліфікує loopback locality. Metadata-upgrade auto-approval має вузьку область дії. Див. Gateway pairing для обох правил.
Режими автентифікації:
gateway.auth.mode: "token": спільний bearer token (рекомендовано для більшості налаштувань).gateway.auth.mode: "password": автентифікація паролем (краще задавати через env:OPENCLAW_GATEWAY_PASSWORD).gateway.auth.mode: "trusted-proxy": довіряйте identity-aware reverse proxy автентифікувати користувачів і передавати identity через headers (див. Trusted Proxy Auth).
Контрольний список ротації (token/password):
- Згенеруйте/установіть новий секрет (
gateway.auth.tokenабоOPENCLAW_GATEWAY_PASSWORD). - Перезапустіть Gateway (або перезапустіть застосунок macOS, якщо він supervise Gateway).
- Оновіть усі remote clients (
gateway.remote.token/.passwordна машинах, які викликають Gateway). - Перевірте, що більше не можете підключитися зі старими обліковими даними.
Identity headers Tailscale Serve
Коли gateway.auth.allowTailscale дорівнює true (типово для Serve), OpenClaw
приймає identity headers Tailscale Serve (tailscale-user-login) для автентифікації Control
UI/WebSocket. OpenClaw перевіряє identity, розв’язуючи адресу
x-forwarded-for через локальний daemon Tailscale (tailscale whois)
і зіставляючи її з header. Це спрацьовує лише для запитів, які потрапляють на loopback
і містять x-forwarded-for, x-forwarded-proto та x-forwarded-host, як
їх вставляє Tailscale.
Для цього async identity check path невдалі спроби для того самого {scope, ip}
серіалізуються до того, як limiter запише failure. Тому одночасні погані retries
від одного Serve client можуть негайно заблокувати другу спробу
замість того, щоб пройти як дві звичайні mismatches.
HTTP API endpoints (наприклад /v1/*, /tools/invoke і /api/channels/*)
не використовують автентифікацію Tailscale identity-header. Вони все одно дотримуються
налаштованого режиму HTTP auth gateway.
Важлива примітка щодо межі:
- Gateway HTTP bearer auth фактично надає операторський доступ за принципом all-or-nothing.
- Вважайте облікові дані, які можуть викликати
/v1/chat/completions,/v1/responsesабо/api/channels/*, секретами оператора з повним доступом для цього gateway. - На OpenAI-compatible HTTP surface автентифікація shared-secret bearer відновлює повний набір типових operator scopes (
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write) і owner semantics для agent turns; вужчі значенняx-openclaw-scopesне зменшують цей shared-secret path. - Семантика per-request scope в HTTP застосовується лише тоді, коли запит надходить із identity-bearing mode, як-от trusted proxy auth або
gateway.auth.mode="none"на private ingress. - У цих identity-bearing modes відсутність
x-openclaw-scopesповертається до звичайного набору operator default scope; надсилайте header явно, коли потрібен вужчий scope set. /tools/invokeдотримується того самого shared-secret rule: token/password bearer auth також трактується там як повний operator access, тоді як identity-bearing modes усе одно враховують оголошені scopes.- Не діліться цими обліковими даними з недовіреними callers; надавайте перевагу окремим gateways для кожної trust boundary.
Припущення довіри: tokenless Serve auth припускає, що gateway host є довіреним.
Не вважайте це захистом від ворожих same-host processes. Якщо недовірений
локальний код може запускатися на gateway host, вимкніть gateway.auth.allowTailscale
і вимагайте явну shared-secret auth з gateway.auth.mode: "token" або
"password".
Правило безпеки: не пересилайте ці headers зі свого reverse proxy. Якщо
ви завершуєте TLS або proxy перед gateway, вимкніть
gateway.auth.allowTailscale і використовуйте shared-secret auth (gateway.auth.mode: "token" або "password") чи Trusted Proxy Auth
натомість.
Довірені проксі:
- Якщо ви завершуєте TLS перед Gateway, задайте
gateway.trustedProxiesяк IP-адреси вашого проксі. - OpenClaw довірятиме
x-forwarded-for(абоx-real-ip) від цих IP, щоб визначити IP клієнта для локальних pairing checks і HTTP auth/local checks. - Переконайтеся, що ваш proxy перезаписує
x-forwarded-forі блокує прямий доступ до порту Gateway.
Керування браузером через node host (рекомендовано)
Якщо ваш Gateway remote, але браузер працює на іншій машині, запустіть node host на машині браузера й дозвольте Gateway проксувати дії браузера (див. Browser tool). Ставтеся до node pairing як до admin access.
Рекомендований шаблон:
- Тримайте Gateway і node host в одному tailnet (Tailscale).
- Навмисно pair node; вимкніть browser proxy routing, якщо він вам не потрібен.
Уникайте:
- Відкривати relay/control ports через LAN або публічний Internet.
- Tailscale Funnel для browser control endpoints (публічне відкриття).
Секрети на диску
Припускайте, що все в ~/.openclaw/ (або $OPENCLAW_STATE_DIR/) може містити секрети або приватні дані:
openclaw.json: конфігурація може містити токени (gateway, remote gateway), provider settings і allowlists.credentials/**: channel credentials (приклад: облікові дані WhatsApp), pairing allowlists, legacy OAuth imports.agents/<agentId>/agent/auth-profiles.json: API keys, token profiles, OAuth tokens і необов’язковіkeyRef/tokenRef.agents/<agentId>/agent/codex-home/**: per-agent Codex app-server account, config, skills, plugins, native thread state і diagnostics.secrets.json(необов’язково): file-backed secret payload, який використовуютьfileSecretRef providers (secrets.providers).agents/<agentId>/agent/auth.json: legacy compatibility file. Staticapi_keyentries scrubbed when discovered.agents/<agentId>/sessions/**: session transcripts (*.jsonl) + routing metadata (sessions.json), які можуть містити private messages і tool output.- bundled plugin packages: installed plugins (плюс їхні
node_modules/). sandboxes/**: tool sandbox workspaces; можуть накопичувати копії файлів, які ви читаєте/пишете всередині sandbox.
Поради з посилення захисту:
- Тримайте дозволи суворими (
700для каталогів,600для файлів). - Використовуйте повнодискове шифрування на хості gateway.
- Надавайте перевагу окремому обліковому запису користувача ОС для Gateway, якщо хост спільний.
Файли .env робочого простору
OpenClaw завантажує локальні для робочого простору файли .env для агентів і інструментів, але ніколи не дозволяє цим файлам непомітно перевизначати керування середовищем виконання Gateway.
- Будь-який ключ, що починається з
OPENCLAW_*, блокується з недовірених файлів.envробочого простору. - Налаштування кінцевих точок каналів для Matrix, Mattermost, IRC і Synology Chat також блокуються від перевизначень через
.envробочого простору, тож клоновані робочі простори не можуть перенаправляти трафік вбудованих конекторів через локальну конфігурацію кінцевих точок. Ключі env для кінцевих точок (як-отMATRIX_HOMESERVER,MATTERMOST_URL,IRC_HOST,SYNOLOGY_CHAT_INCOMING_URL) мають надходити із середовища процесу gateway абоenv.shellEnv, а не з.env, завантаженого з робочого простору. - Блокування є fail-closed: нова змінна керування середовищем виконання, додана в майбутньому випуску, не може бути успадкована з доданого до репозиторію або наданого зловмисником
.env; ключ ігнорується, а gateway зберігає власне значення. - Довірені змінні середовища процесу/ОС (власна оболонка gateway, launchd/systemd unit, app bundle) усе ще застосовуються - це обмежує лише завантаження файлів
.env.
Чому: файли .env робочого простору часто лежать поруч із кодом агента, випадково комітяться або записуються інструментами. Блокування всього префікса OPENCLAW_* означає, що додавання нового прапорця OPENCLAW_* пізніше ніколи не призведе до регресії у вигляді непомітного успадкування зі стану робочого простору.
Журнали й транскрипти (редагування та зберігання)
Журнали й транскрипти можуть витікати чутливу інформацію навіть тоді, коли контроль доступу налаштовано правильно:
- Журнали Gateway можуть містити зведення інструментів, помилки та URL.
- Транскрипти сеансів можуть містити вставлені секрети, вміст файлів, вивід команд і посилання.
Рекомендації:
- Тримайте редагування журналів і транскриптів увімкненим (
logging.redactSensitive: "tools"; за замовчуванням). - Додайте власні шаблони для свого середовища через
logging.redactPatterns(токени, імена хостів, внутрішні URL). - Під час поширення діагностики надавайте перевагу
openclaw status --all(зручно вставляти, секрети відредаговано), а не сирим журналам. - Очищайте старі транскрипти сеансів і файли журналів, якщо вам не потрібне тривале зберігання.
Докладніше: Журналювання
Приватні повідомлення: сполучення за замовчуванням
{
channels: { whatsapp: { dmPolicy: "pairing" } },
}
Групи: вимагайте згадку всюди
{
"channels": {
"whatsapp": {
"groups": {
"*": { "requireMention": true }
}
}
},
"agents": {
"list": [
{
"id": "main",
"groupChat": { "mentionPatterns": ["@openclaw", "@mybot"] }
}
]
}
}
У групових чатах відповідайте лише за явної згадки.
Окремі номери (WhatsApp, Signal, Telegram)
Для каналів на основі телефонних номерів розгляньте запуск свого ШІ на окремому телефонному номері, відмінному від особистого:
- Особистий номер: ваші розмови залишаються приватними
- Номер бота: ШІ обробляє ці розмови з відповідними межами
Режим лише для читання (через пісочницю та інструменти)
Можна створити профіль лише для читання, поєднавши:
agents.defaults.sandbox.workspaceAccess: "ro"(або"none"без доступу до робочого простору)- списки дозволу/заборони інструментів, які блокують
write,edit,apply_patch,exec,processтощо.
Додаткові параметри посилення захисту:
tools.exec.applyPatch.workspaceOnly: true(за замовчуванням): гарантує, щоapply_patchне може записувати/видаляти за межами каталогу робочого простору навіть тоді, коли пісочницю вимкнено. Установлюйтеfalseлише якщо ви навмисно хочете, щобapply_patchторкався файлів поза робочим простором.tools.fs.workspaceOnly: true(необов’язково): обмежує шляхиread/write/edit/apply_patchі шляхи автозавантаження зображень нативного prompt каталогом робочого простору (корисно, якщо сьогодні ви дозволяєте абсолютні шляхи й хочете мати єдиний запобіжник).- Тримайте корені файлової системи вузькими: уникайте широких коренів, як-от домашній каталог, для робочих просторів агентів/робочих просторів пісочниці. Широкі корені можуть відкрити інструментам файлової системи доступ до чутливих локальних файлів (наприклад, стану/конфігурації в
~/.openclaw).
Безпечний базовий варіант (скопіюйте/вставте)
Одна конфігурація з «безпечними типовими значеннями», яка залишає Gateway приватним, вимагає сполучення для приватних повідомлень і уникає постійно ввімкнених групових ботів:
{
gateway: {
mode: "local",
bind: "loopback",
port: 18789,
auth: { mode: "token", token: "your-long-random-token" },
},
channels: {
whatsapp: {
dmPolicy: "pairing",
groups: { "*": { requireMention: true } },
},
},
}
Якщо вам також потрібне «безпечніше за замовчуванням» виконання інструментів, додайте пісочницю та забороніть небезпечні інструменти для будь-якого агента, що не є власником (приклад нижче в розділі «Профілі доступу для кожного агента»).
Вбудований базовий варіант для агентських ходів, керованих чатом: відправники, що не є власниками, не можуть використовувати інструменти cron або gateway.
Пісочниця (рекомендовано)
Окремий документ: Пісочниця
Два взаємодоповнювальні підходи:
- Запустіть увесь Gateway у Docker (межа контейнера): Docker
- Пісочниця для інструментів (
agents.defaults.sandbox, gateway на хості + інструменти, ізольовані пісочницею; Docker є стандартним бекендом): Пісочниця
Також врахуйте доступ агента до робочого простору всередині пісочниці:
agents.defaults.sandbox.workspaceAccess: "none"(за замовчуванням) залишає робочий простір агента недоступним; інструменти працюють із робочим простором пісочниці в~/.openclaw/sandboxesagents.defaults.sandbox.workspaceAccess: "ro"монтує робочий простір агента лише для читання в/agent(вимикаєwrite/edit/apply_patch)agents.defaults.sandbox.workspaceAccess: "rw"монтує робочий простір агента для читання/запису в/workspace- Додаткові
sandbox.docker.bindsперевіряються щодо нормалізованих і канонікалізованих вихідних шляхів. Трюки з батьківськими symlink і канонічні псевдоніми домашнього каталогу все одно fail closed, якщо вони розв’язуються в заблоковані корені, як-от/etc,/var/run, або каталоги облікових даних у домашньому каталозі ОС.
Запобіжник делегування субагентам
Якщо ви дозволяєте інструменти сеансу, розглядайте делеговані запуски субагентів як ще одне рішення щодо межі:
- Забороніть
sessions_spawn, якщо агенту справді не потрібне делегування. - Тримайте
agents.defaults.subagents.allowAgentsі будь-які перевизначення для окремих агентівagents.list[].subagents.allowAgentsобмеженими відомими безпечними цільовими агентами. - Для будь-якого робочого процесу, який має залишатися в пісочниці, викликайте
sessions_spawnізsandbox: "require"(за замовчуваннямinherit). sandbox: "require"швидко завершується помилкою, коли цільове дочірнє середовище виконання не ізольоване пісочницею.
Ризики керування браузером
Увімкнення керування браузером дає моделі змогу керувати справжнім браузером. Якщо цей профіль браузера вже містить сеанси з виконаним входом, модель може отримати доступ до цих облікових записів і даних. Розглядайте профілі браузера як чутливий стан:
- Надавайте перевагу окремому профілю для агента (стандартний профіль
openclaw). - Уникайте спрямування агента на ваш особистий повсякденний профіль.
- Тримайте керування браузером хоста вимкненим для агентів у пісочниці, якщо ви їм не довіряєте.
- Автономний API керування браузером через local loopback враховує лише автентифікацію зі спільним секретом (gateway token bearer auth або gateway password). Він не використовує trusted-proxy або заголовки ідентичності Tailscale Serve.
- Розглядайте завантаження браузера як недовірені вхідні дані; надавайте перевагу ізольованому каталогу завантажень.
- Якщо можливо, вимкніть синхронізацію браузера/менеджери паролів у профілі агента (зменшує радіус ураження).
- Для віддалених gateway припускайте, що «керування браузером» еквівалентне «доступу оператора» до всього, чого може досягти цей профіль.
- Тримайте хости Gateway і node доступними лише через tailnet; уникайте відкривання портів керування браузером у LAN або публічний інтернет.
- Вимикайте маршрутизацію через браузерний проксі, коли вона вам не потрібна (
gateway.nodes.browser.mode="off"). - Режим наявного сеансу Chrome MCP не є «безпечнішим»; він може діяти від вашого імені в усьому, чого може досягти цей профіль Chrome на цьому хості.
Політика SSRF браузера (сувора за замовчуванням)
Політика навігації браузера OpenClaw сувора за замовчуванням: приватні/внутрішні призначення залишаються заблокованими, якщо ви явно не ввімкнете їх.
- За замовчуванням:
browser.ssrfPolicy.dangerouslyAllowPrivateNetworkне задано, тож навігація браузера тримає приватні/внутрішні/спеціального використання призначення заблокованими. - Застарілий псевдонім:
browser.ssrfPolicy.allowPrivateNetworkусе ще приймається для сумісності. - Режим явного ввімкнення: задайте
browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: true, щоб дозволити приватні/внутрішні/спеціального використання призначення. - У суворому режимі використовуйте
hostnameAllowlist(шаблони на кшталт*.example.com) іallowedHostnames(точні винятки хостів, включно із заблокованими іменами на кшталтlocalhost) для явних винятків. - Навігація перевіряється перед запитом і, за найкращою спробою, повторно перевіряється на фінальному URL
http(s)після навігації, щоб зменшити перенаправлення на основі редиректів.
Приклад суворої політики:
{
browser: {
ssrfPolicy: {
dangerouslyAllowPrivateNetwork: false,
hostnameAllowlist: ["*.example.com", "example.com"],
allowedHostnames: ["localhost"],
},
},
}
Профілі доступу для кожного агента (мультиагентний режим)
За мультиагентної маршрутизації кожен агент може мати власну пісочницю та політику інструментів: використовуйте це, щоб надати повний доступ, лише читання або без доступу для кожного агента. Див. Мультиагентна пісочниця та інструменти для повних деталей і правил пріоритетності.
Типові сценарії використання:
- Особистий агент: повний доступ, без пісочниці
- Сімейний/робочий агент: у пісочниці + інструменти лише для читання
- Публічний агент: у пісочниці + без інструментів файлової системи/оболонки
Приклад: повний доступ (без пісочниці)
{
agents: {
list: [
{
id: "personal",
workspace: "~/.openclaw/workspace-personal",
sandbox: { mode: "off" },
},
],
},
}
Приклад: інструменти лише для читання + робочий простір лише для читання
{
agents: {
list: [
{
id: "family",
workspace: "~/.openclaw/workspace-family",
sandbox: {
mode: "all",
scope: "agent",
workspaceAccess: "ro",
},
tools: {
allow: ["read"],
deny: ["write", "edit", "apply_patch", "exec", "process", "browser"],
},
},
],
},
}
Приклад: без доступу до файлової системи/оболонки (обмін повідомленнями провайдера дозволено)
{
agents: {
list: [
{
id: "public",
workspace: "~/.openclaw/workspace-public",
sandbox: {
mode: "all",
scope: "agent",
workspaceAccess: "none",
},
// Session tools can reveal sensitive data from transcripts. By default OpenClaw limits these tools
// to the current session + spawned subagent sessions, but you can clamp further if needed.
// See `tools.sessions.visibility` in the configuration reference.
tools: {
sessions: { visibility: "tree" }, // self | tree | agent | all
allow: [
"sessions_list",
"sessions_history",
"sessions_send",
"sessions_spawn",
"session_status",
"whatsapp",
"telegram",
"slack",
"discord",
],
deny: [
"read",
"write",
"edit",
"apply_patch",
"exec",
"process",
"browser",
"canvas",
"nodes",
"cron",
"gateway",
"image",
],
},
},
],
},
}
Реагування на інциденти
Якщо ваш ШІ зробив щось погане:
Локалізуйте
- Зупиніть це: зупиніть застосунок macOS (якщо він наглядає за Gateway) або завершіть ваш процес
openclaw gateway. - Закрийте доступ назовні: установіть
gateway.bind: "loopback"(або вимкніть Tailscale Funnel/Serve), доки не зрозумієте, що сталося. - Заморозьте доступ: перемкніть ризиковані особисті повідомлення/групи на
dmPolicy: "disabled"/ вимагайте згадок і вилучіть записи з дозволом для всіх"*", якщо вони у вас були.
Ротація (припускайте компрометацію, якщо секрети витекли)
- Ротуйте автентифікацію Gateway (
gateway.auth.token/OPENCLAW_GATEWAY_PASSWORD) і перезапустіть. - Ротуйте секрети віддалених клієнтів (
gateway.remote.token/.password) на кожній машині, яка може звертатися до Gateway. - Ротуйте облікові дані провайдерів/API (облікові дані WhatsApp, токени Slack/Discord, ключі моделей/API у
auth-profiles.jsonі значення зашифрованих секретних payload, якщо вони використовуються).
Аудит
- Перевірте журнали Gateway:
/tmp/openclaw/openclaw-YYYY-MM-DD.log(абоlogging.file). - Перегляньте відповідні транскрипти:
~/.openclaw/agents/<agentId>/sessions/*.jsonl. - Перегляньте нещодавні зміни конфігурації (усе, що могло розширити доступ:
gateway.bind,gateway.auth, політики DM/груп,tools.elevated, зміни Plugin). - Повторно запустіть
openclaw security audit --deepі підтвердьте, що критичні знахідки усунено.
Збір даних для звіту
- Позначка часу, ОС хоста Gateway + версія OpenClaw
- Транскрипти сеансів + короткий хвіст журналу (після редагування)
- Що надіслав зловмисник + що зробив агент
- Чи був Gateway відкритий за межі loopback (LAN/Tailscale Funnel/Serve)
Сканування секретів
CI запускає pre-commit-хук detect-private-key для репозиторію. Якщо він
завершується невдало, вилучіть або ротуйте закомічений ключовий матеріал, а потім відтворіть локально:
pre-commit run --all-files detect-private-key
Повідомлення про проблеми безпеки
Знайшли вразливість в OpenClaw? Будь ласка, повідомте відповідально:
- Email: [email protected]
- Не публікуйте публічно, доки це не буде виправлено
- Ми зазначимо вас як автора знахідки (якщо ви не віддаєте перевагу анонімності)