Перейти до вмісту
↑↓Навігація ↵Відкрити escЗакрити

Безпека

OpenChamber дає доступ до вашої машини та вашого коду, тож заблокуйте його, перш ніж до нього зможе дістатися хтось, окрім вас. Ця сторінка охоплює пароль UI, ключі доступу (passkeys) і те, що треба знати перед тим, як відкривати OpenChamber у мережі.

Установлення пароля UI

Запустіть OpenChamber із паролем, і браузерний UI запитуватиме його:

Terminal window
openchamber --ui-password be-creative-here

Ви також можете задати його через змінну середовища OPENCHAMBER_UI_PASSWORD замість того, щоб писати його в командному рядку. Після входу OpenChamber на деякий час запам’ятовує пристрій, тож вас не питатимуть щоразу.

Завжди задавайте пароль, якщо інстанс доступний комусь іще — особливо через тунель чи публічний інтернет.

Ключі доступу (passkeys)

Щойно задано пароль, ви можете додати ключі доступу (Face ID, Touch ID, апаратний ключ безпеки) для швидшого входу. Додайте їх у Settings → OpenChamber → Passkeys.

Ключі доступу прив’язані до поточного пароля. Якщо ви зміните чи приберете пароль, збережені ключі доступу очищаються, і вам доведеться додати їх знову.

Токени пристроїв

Пристрої, зв’язані через Підключення пристрою, автентифікуються власними токенами для кожного пристрою, а не паролем UI. Посилання для зв’язування одноразові й спливають, якщо не використані; кожен зв’язаний пристрій показано в Settings → Remote Instances → Підключення до цього сервера, де будь-який можна відкликати в будь-який момент. Підключення поза домом ідуть через Private Relay, який наскрізно зашифрований і не може прочитати ваш трафік.

Перш ніж відкривати доступ

  • За замовчуванням OpenChamber слухає лише вашу власну машину (127.0.0.1). Щоб слухати ширше, потрібна свідома зміна, і спершу вам слід задати пароль.
  • Для власних пристроїв надавайте перевагу зв’язуванню з Private Relay — назовні взагалі нічого не відкривається.
  • Якщо потрібен публічний URL, надавайте перевагу тунелю чи приватній мережі (як-от VPN) перед відкриттям порту в інтернет.
  • Якщо ви ставите OpenChamber за власним HTTPS-сервером, див. Зворотний проксі.

Корпоративний режим

Якщо ваша команда може надсилати вміст розмов лише тим провайдерам моделей, яких ви налаштували в OpenCode, увімкніть корпоративний режим. Для цього є два способи, і будь-якого з них достатньо.

Файл політики на машині

Цей спосіб для ноутбуків, якими ви керуєте. Покладіть файл policy.json у теку, куди може писати лише адміністратор:

СистемаШлях
macOS/Library/Application Support/OpenChamber/policy.json
WindowsC:\ProgramData\OpenChamber\policy.json
Linux/etc/openchamber/policy.json

Шлях не залежить від того, як встановлено OpenChamber. Десктопний застосунок, вебсервер, запущений із npm, CLI і розширення VS Code читають той самий файл. Розгорнути його можна через систему керування пристроями (Jamf, Intune тощо). Для сервера в Docker змонтуйте файл за шляхом для Linux.

{
"enterpriseMode": true,
"organization": "Acme",
"relayUrl": "wss://relay.acme.com/ws",
"allowNetworkAccess": false,
"allowedExtensions": ["https://github.com/acme/"],
"jev": {
"url": "https://llm.acme.com/v1/systemone",
"model": "acme-classifier",
"apiKey": "..."
}
}

Обов’язкове лише enterpriseMode. organization показується в Налаштуваннях як “Керує Acme”, щоб люди знали, хто ухвалив це рішення. relayUrl і jev закріплюють ваш власний relay і ваш власний endpoint Jev, allowNetworkAccess дає іншим пристроям доступ до OpenChamber через мережу, а allowedExtensions перелічує репозиторії розширень, яким ви довіряєте. Про всі них нижче.

  • Ніщо, що задає користувач, ні в Налаштуваннях, ні в середовищі, не вимикає того, що вмикає файл.
  • Коли файл вмикає корпоративний режим, вирішує лише файл. Змінні середовища для relay, Jev і мережевого доступу, описані нижче, ігноруються, бо користувач може задати їх сам.
  • Якщо файл є, але його не вдається прочитати або це не коректний JSON, корпоративний режим лишається увімкненим і нічого не закріплюється. Налаштування повідомляють, що політику не вдалося прочитати. Зламаний файл ніколи тихо не знімає захист.
  • Зміни застосовуються без перезапуску.
  • OpenChamber працює від імені користувача, тож користувач може прочитати файл. Пам’ятайте про це, перш ніж класти туди API-ключ.

Змінна середовища

На сервері чи в контейнері, де середовище контролюєте ви, достатньо цього:

Terminal window
OPENCHAMBER_ENTERPRISE_MODE=1

На ноутбуці це слабший замок: десктопний застосунок читає змінну з профілю login shell (наприклад, ~/.zshrc), а його користувач може редагувати. Там використовуйте файл політики.

Зі змінною relay, Jev, мережевий доступ і дозволені розширення теж беруться з власних змінних: OPENCHAMBER_RELAY_URL, OPENCHAMBER_JEV_URL, OPENCHAMBER_ALLOW_NETWORK_ACCESS=1, OPENCHAMBER_ALLOWED_EXTENSIONS (URL репозиторіїв через кому) і OPENCHAMBER_ALLOW_LOCAL_EXTENSIONS=1. У Docker вам знадобиться та, що для мережевого доступу, бо сервер має слухати за межами контейнера.

Закріпити OpenCode CLI

Якщо на ваших машинах OpenCode уже встановлено і OpenChamber має працювати саме з ним, впишіть його шлях у файл політики. Це працює і з режимом enterprise, і без нього.

{
"opencodeBinary": "/usr/local/bin/opencode"
}
  • OpenChamber запускає OpenCode тільки з цього шляху. Шлях із Налаштувань, OPENCODE_BINARY і копію, що йде з десктопним застосунком, він ігнорує; та копія лишається на диску без діла.
  • Якщо за цим шляхом немає нічого запускного, OpenChamber не перемикається на іншу копію. Він зупиняється з помилкою, де названо шлях.
  • Налаштування показують шлях лише для читання, з приміткою, що його задав адміністратор.
  • OpenChamber не встановлює й не оновлює закріплений OpenCode і не повідомляє про нові версії. Оновлення приходять з вашим розгортанням.
  • CLI має бути OpenCode 2.x, не старішим за версію, яку просить OpenChamber. Зі старішою OpenChamber зупиниться на екрані «оновіть OpenCode».
  • Можна вказати й теку, якщо в ній лежить opencode (opencode.exe на Windows). Змінної середовища для цього немає, бо користувач може задати її сам.

Сховати вбудовані каталоги скілів

OpenChamber постачається з кількома публічними каталогами скілів (Anthropic, OpenAI, Cursor, Matt Pocock). Якщо у вашої організації є власний, додайте його як власний каталог і сховайте вбудовані у файлі політики. Це працює як з корпоративним режимом, так і без нього.

{
"hideBuiltinSkillCatalogs": true
}

Тоді налаштування пропонують лише каталоги, які люди додали самі, а OpenChamber не завантажить вбудований навіть на прямий запит. Змінної середовища для цього немає, бо користувач може задати її сам.

Приклади

Щоб покласти файл політики на Mac, виконайте в Terminal від імені адміністратора:

Terminal window
sudo mkdir -p "/Library/Application Support/OpenChamber"
sudo tee "/Library/Application Support/OpenChamber/policy.json" > /dev/null <<'JSON'
{
"enterpriseMode": true,
"organization": "Acme"
}
JSON

У Linux так само, лише папка /etc/openchamber.

У Windows запустіть PowerShell від імені адміністратора. Останній рядок залишає право запису в папку лише адміністраторам і системі:

Terminal window
New-Item -ItemType Directory -Force "C:\ProgramData\OpenChamber" | Out-Null
@'
{
"enterpriseMode": true,
"organization": "Acme"
}
'@ | Set-Content -Encoding UTF8 "C:\ProgramData\OpenChamber\policy.json"
icacls "C:\ProgramData\OpenChamber" /inheritance:r /grant:r "Administrators:(OI)(CI)F" "SYSTEM:(OI)(CI)F" "Users:(OI)(CI)RX"

Для сервера в Docker додайте це в environment у docker-compose.yml. Контейнер слухає за своїми межами, тож йому потрібен дозволений мережевий доступ:

environment:
OPENCHAMBER_UI_PASSWORD: ${OPENCHAMBER_UI_PASSWORD}
OPENCHAMBER_ENTERPRISE_MODE: "1"
OPENCHAMBER_ALLOW_NETWORK_ACCESS: "1"
# Optional:
OPENCHAMBER_RELAY_URL: wss://relay.acme.com/ws
OPENCHAMBER_JEV_URL: https://llm.acme.com/v1/systemone
OPENCHAMBER_JEV_MODEL: acme-classifier
OPENCHAMBER_JEV_API_KEY: ${ACME_JEV_KEY}
OPENCHAMBER_ALLOWED_EXTENSIONS: https://github.com/acme/

Щоб перевірити, що все спрацювало, відкрийте Налаштування → Провайдери: угорі з’явиться повідомлення про корпоративний режим із назвою вашої організації.

Що змінюється

  • Провайдери моделей беруться лише з вашої конфігурації OpenCode. Підключити провайдера, увійти в нього, додати ключ чи створити власного провайдера в OpenChamber не можна; видаляти чи перемикати вже наявні облікові записи можна й далі. Це закриває лише шлях через застосунок; сам замок — це політика OpenCode, описана нижче. Увійти в MCP-сервер із вашої конфігурації OpenCode можна й далі, бо це з’єднує з тим сервером, а не з провайдером моделей.
  • Постачальники класифікації (Jev) лишаються вимкненими, зокрема й власний endpoint, який хтось вводить у Налаштуваннях. Запобіжник і Auto не пропонуються, а сесії в роботі не отримують підказки «схоже, готово». Щоб користуватися Jev через власну інфраструктуру, закріпіть endpoint через jev у файлі політики або через OPENCHAMBER_JEV_URL (плюс OPENCHAMBER_JEV_MODEL і, якщо потрібно, OPENCHAMBER_JEV_API_KEY). Він стає типовим, його все одно можна вимкнути, а нічого іншого вибрати не можна.
  • Зачитування вголос через OpenAI вимкнене. Власний сервер синтезу чи розпізнавання мовлення має працювати на тій самій машині. Локальні голоси й локальні моделі диктування працюють і далі.
  • Push-сповіщення на телефони й у браузери містять лише загальний заголовок на кшталт “Agent response is ready”, без тексту повідомлення чи назви сесії. Сповіщення на десктопі лишаються на вашій машині й містять повний текст.
  • Перевірка оновлень працює й далі, тож виправлення безпеки до вас доходять, але вона ніколи не звітує про використання, навіть анонімним ідентифікатором встановлення.
  • Зовнішні тунелі (Cloudflare, ngrok) вимкнені. Сервіс тунелю розшифровує трафік на своєму боці й бачить кожен запит відкритим текстом.
  • Діаграми .drawio відкриваються як XML-текст. Редактор діаграм — це сторінка diagrams.net, і відкрита там діаграма передається цій сторінці.
  • Шрифти інтерфейсу й коду, що завантажуються з публічного CDN, замінюються системними. Ваш вибір зберігається на випадок, коли режим вимкнуть.
  • Private Relay працює лише через ваш власний relay. Запустіть self-hosted relay і вкажіть його OpenChamber через relayUrl у файлі політики або через OPENCHAMBER_RELAY_URL=wss://relay.example.com/ws. Спільний relay теж не може прочитати ваш трафік, бо він наскрізно зашифрований, але власний тримає метадані з’єднань і шлях до цієї машини всередині вашої мережі. Без власного relay зв’язати пристрої взагалі не вийде.
  • OpenChamber слухає лише на машині, де він запущений. Десктопне налаштування, яке дає іншим пристроям у локальній мережі відкривати застосунок, вимкнене, а сервер відмовляється запускатися на мережевій адресі, хоч через CLI (--host, --lan), хоч через середовище. Якщо файл політики з’являється, поки застосунок працює, з’єднання з інших машин обриваються до наступного запуску. Дозвольте мережевий доступ через "allowNetworkAccess": true у файлі політики або через OPENCHAMBER_ALLOW_NETWORK_ACCESS=1 там, де корпоративний режим вмикає середовище. Пам’ятайте, що з’єднання йде звичайним HTTP, тож у спільній мережі його може прочитати будь-хто; сервер, до якого підключаються інші, ставте за власний HTTPS.
  • Розширення, які можуть надсилати дані за межі машини (звертаються до зовнішнього API, завантажують щось із зовнішніх адрес або запускають фоновий сервіс), встановлюються лише з Git-репозиторію, указаного в allowedExtensions. Розширення, які нічого з цього не роблять, встановлюються як завжди. Встановлене розширення з будь-якого іншого місця лишається вимкненим, і Налаштування пояснюють чому. У списку зазначають URL репозиторіїв, бо назву розширення обирає собі саме; запис, що закінчується на /, як-от https://github.com/acme/, дозволяє всі репозиторії під ним. На машинах тих, хто розробляє розширення, "allowLocalExtensions": true також дозволяє встановлення з локальної папки. ZIP лишається закритим у будь-якому разі.
  • Змінні середовища з Налаштування → Загальні і з opencode service set env не доходять до OpenCode, бо в одній із них може бути ключ провайдера. Git, термінал і дії проєкту й далі їх отримують.
  • У розширенні VS Code підключення провайдерів вимкнене, а перевірка оновлень не звітує про використання. Jev, relay, тунелів, push-сповіщень і хмарного мовлення в ньому й так немає.

Задачі малої моделі (назви сесій, рекапи, повідомлення комітів, розбір змін) не потребують жодного спеціального режиму. Вони завжди працюють на малій моделі, яку ви вибрали в Налаштуваннях, або на малій моделі провайдера, з яким ви працюєте, або на моделі за замовчуванням із вашої конфігурації OpenCode. Вони ніколи не перемикаються на якогось іншого провайдера, який у вас просто підключений.

Яких провайдерів моделей узагалі можна використовувати, вирішує OpenCode, а не OpenChamber. Зафіксуйте це політиками OpenCode: забороніть усіх провайдерів, а тоді дозвольте схвалених.

{
"experimental": {
"policies": [
{ "action": "provider.use", "resource": "*", "effect": "deny" },
{ "action": "provider.use", "resource": "anthropic", "effect": "allow" }
]
}
}

Заборонений провайдер зникає, навіть якщо хтось додасть для нього ключ. Покладіть політики в глобальний ~/.config/opencode/opencode.jsonc, де проєкт не може їх зняти, або роздавайте їх із робочого простору OpenCode Console, за яким останнє слово. Корпоративний режим поверх цього охоплює те, що надсилає сам OpenChamber.

Вебпошук і завантаження сторінок агентом теж ідуть через OpenCode: до пошукового сервісу й до самих сторінок. Якщо вони не мають виходити за межі вашої мережі, забороніть їх такою самою політикою:

{ "action": "permission", "resource": "websearch:*", "effect": "deny" },
{ "action": "permission", "resource": "webfetch:*", "effect": "deny" }

Пов’язане