Przejdź do głównej zawartości
↑↓Nawigacja ↵Otwórz escZamknij

Bezpieczeństwo

OpenChamber daje dostęp do Twojej maszyny i Twojego kodu, więc zabezpiecz go, zanim ktokolwiek poza Tobą będzie mógł do niego dotrzeć. Ta strona omawia hasło UI, klucze dostępu (passkeys) oraz to, co warto wiedzieć przed udostępnieniem OpenChamber w sieci.

Ustaw hasło UI

Uruchom OpenChamber z hasłem, a interfejs webowy poprosi o nie:

Okno terminala
openchamber --ui-password be-creative-here

Możesz też ustawić je za pomocą zmiennej środowiskowej OPENCHAMBER_UI_PASSWORD, zamiast podawać je w wierszu poleceń. Po zalogowaniu OpenChamber zapamiętuje urządzenie na pewien czas, więc nie pyta za każdym razem.

Zawsze ustawiaj hasło, jeśli instancja jest dostępna dla kogokolwiek innego — zwłaszcza przez tunel lub publiczny internet.

Klucze dostępu (passkeys)

Po ustawieniu hasła możesz dodać klucze dostępu (Face ID, Touch ID, klucz bezpieczeństwa) dla szybszego logowania. Dodaj je w Settings → OpenChamber → Passkeys.

Klucze dostępu są powiązane z bieżącym hasłem. Jeśli zmienisz lub usuniesz hasło, zapisane klucze dostępu zostaną wyczyszczone i będziesz je dodawać ponownie.

Tokeny urządzeń

Urządzenia sparowane przez Połącz urządzenie uwierzytelniają się własnymi tokenami per urządzenie, a nie hasłem UI. Linki parowania są jednorazowe i wygasają, jeśli nie zostaną użyte; każde sparowane urządzenie jest widoczne w Settings → Remote Instances → Połącz z tym serwerem, gdzie w każdej chwili możesz unieważnić dowolne z nich. Połączenia spoza domu przechodzą przez Private Relay, który jest szyfrowany end-to-end i nie może odczytać Twojego ruchu.

Zanim ją udostępnisz

  • Domyślnie OpenChamber nasłuchuje tylko na Twojej własnej maszynie (127.0.0.1). Nasłuchiwanie szerzej wymaga celowej zmiany i najpierw powinieneś ustawić hasło.
  • Dla własnych urządzeń preferuj parowanie z Private Relay — nic nie jest wtedy wystawione publicznie.
  • Jeśli potrzebujesz publicznego adresu URL, preferuj tunel lub sieć prywatną (jak VPN) zamiast otwierania portu do internetu.
  • Jeśli umieszczasz OpenChamber za własnym serwerem HTTPS, zobacz Reverse Proxy.

Tryb enterprise

Jeśli Twój zespół może wysyłać treść rozmów tylko do dostawców modeli skonfigurowanych w OpenCode, włącz tryb enterprise. Są na to dwa sposoby i wystarczy jeden z nich.

Plik polityki na maszynie

Tego sposobu używaj na laptopach, którymi zarządzasz. Umieść plik o nazwie policy.json w folderze, do którego może zapisywać tylko administrator:

SystemŚcieżka
macOS/Library/Application Support/OpenChamber/policy.json
WindowsC:\ProgramData\OpenChamber\policy.json
Linux/etc/openchamber/policy.json

Ścieżka nie zależy od tego, jak zainstalowano OpenChamber. Aplikacja desktopowa, serwer webowy uruchomiony z npm, CLI i rozszerzenie VS Code czytają ten sam plik. Możesz go rozesłać narzędziem do zarządzania urządzeniami (Jamf, Intune i podobne). Dla serwera w Dockerze zamontuj plik pod ścieżką z Linuksa.

{
"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": "..."
}
}

Wymagane jest tylko enterpriseMode. organization pojawia się w Ustawieniach jako “Zarządzane przez Acme”, żeby wszyscy wiedzieli, kto o tym zdecydował. relayUrl i jev przypinają Twój własny relay i Twój własny endpoint Jev, allowNetworkAccess pozwala innym urządzeniom łączyć się z OpenChamber przez sieć, a allowedExtensions wymienia repozytoria rozszerzeń, którym ufasz. Wszystkie są opisane niżej.

  • Nic, co ustawi użytkownik, ani w Ustawieniach, ani w środowisku, nie wyłączy tego, co włącza plik.
  • Gdy plik włącza tryb enterprise, decyduje tylko plik. Opisane niżej zmienne środowiskowe dla relaya, Jev i dostępu sieciowego są ignorowane, bo użytkownik może je ustawić sam.
  • Jeśli plik istnieje, ale nie da się go odczytać albo nie jest poprawnym JSON-em, tryb enterprise zostaje włączony i nic nie jest przypięte. Ustawienia pokazują, że nie udało się odczytać polityki. Uszkodzony plik nigdy po cichu nie zdejmuje ochrony.
  • Zmiany działają bez restartu.
  • OpenChamber działa jako użytkownik, więc użytkownik może odczytać plik. Pamiętaj o tym, zanim wpiszesz do niego klucz API.

Zmienna środowiskowa

Na serwerze albo w kontenerze, gdzie to Ty kontrolujesz środowisko, wystarczy to:

Okno terminala
OPENCHAMBER_ENTERPRISE_MODE=1

Na laptopie to słabsza blokada: aplikacja desktopowa odczytuje zmienną z profilu powłoki logowania (na przykład ~/.zshrc), a ten użytkownik może edytować. Tam użyj pliku polityki.

Przy zmiennej relay, Jev, dostęp sieciowy i dozwolone rozszerzenia też pochodzą z własnych zmiennych: OPENCHAMBER_RELAY_URL, OPENCHAMBER_JEV_URL, OPENCHAMBER_ALLOW_NETWORK_ACCESS=1, OPENCHAMBER_ALLOWED_EXTENSIONS (adresy URL repozytoriów rozdzielone przecinkami) i OPENCHAMBER_ALLOW_LOCAL_EXTENSIONS=1. W Dockerze będziesz potrzebować tej od dostępu sieciowego, bo serwer musi nasłuchiwać poza kontenerem.

Przypięcie CLI OpenCode

Jeśli na Twoich maszynach OpenCode jest już zainstalowany i OpenChamber ma używać właśnie tej instalacji, wpisz jej ścieżkę w pliku polityki. Działa to z trybem enterprise i bez niego.

{
"opencodeBinary": "/usr/local/bin/opencode"
}
  • OpenChamber uruchamia OpenCode tylko z tej ścieżki. Pomija ścieżkę z Ustawień, OPENCODE_BINARY i kopię dołączoną do aplikacji desktopowej, która zostaje na dysku nieużywana.
  • Jeśli pod tą ścieżką nie ma nic, co da się uruchomić, OpenChamber nie sięga po inną kopię. Zatrzymuje się z błędem, który podaje ścieżkę.
  • Ustawienia pokazują ścieżkę tylko do odczytu, z informacją, że ustawił ją administrator.
  • OpenChamber nie instaluje ani nie aktualizuje przypiętego OpenCode i nie ogłasza nowych wersji. Aktualizacje przychodzą razem z Twoim wdrożeniem.
  • CLI musi być OpenCode 2.x, co najmniej w wersji, której wymaga OpenChamber. Przy starszej OpenChamber zatrzyma się na ekranie „zaktualizuj OpenCode”.
  • Można też podać folder, jeśli zawiera opencode (opencode.exe w Windows). Nie ma do tego zmiennej środowiskowej, bo użytkownik może ustawić ją sam.

Ukryj wbudowane katalogi skilli

OpenChamber ma kilka publicznych katalogów skilli (Anthropic, OpenAI, Cursor, Matt Pocock). Jeśli Twoja organizacja prowadzi własny, dodaj go jako katalog niestandardowy i ukryj wbudowane w pliku zasad. Działa to z trybem enterprise i bez niego.

{
"hideBuiltinSkillCatalogs": true
}

Ustawienia pokażą wtedy tylko katalogi dodane przez użytkowników, a OpenChamber nie wczyta wbudowanego nawet na bezpośrednie żądanie. Nie ma do tego zmiennej środowiskowej, bo użytkownik może je ustawić sam.

Przykłady

Aby umieścić plik polityki na Macu, uruchom w Terminalu jako administrator:

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

Na Linuksie wygląda to tak samo, z /etc/openchamber jako folderem.

Na Windowsie uruchom PowerShell jako administrator. Ostatnia linia sprawia, że do folderu mogą pisać tylko administratorzy i system:

Okno terminala
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"

Serwer w Dockerze: dopisz to do environment w docker-compose.yml. Kontener nasłuchuje poza sobą, więc potrzebuje dozwolonego dostępu sieciowego:

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/

Żeby sprawdzić, czy zadziałało, otwórz Ustawienia → Dostawcy: na górze pojawi się informacja o trybie enterprise z nazwą Twojej organizacji.

Co się zmienia

  • Dostawcy modeli pochodzą wyłącznie z Twojej konfiguracji OpenCode. Podłączanie dostawcy, logowanie się do niego, dodawanie klucza i tworzenie własnego dostawcy są w OpenChamber wyłączone; usuwanie i przełączanie istniejących kont działa dalej. To zamyka tylko drogę przez aplikację; właściwą blokadą jest polityka OpenCode opisana niżej. Logowanie do serwera MCP z Twojej konfiguracji OpenCode działa dalej, bo łączy z tym serwerem, a nie z dostawcą modeli.
  • Dostawcy klasyfikacji (Jev) pozostają wyłączeni, łącznie z własnym endpointem wpisanym przez kogoś w Ustawieniach. Siatka bezpieczeństwa i Auto nie są oferowane, a sesje w toku nie dostają wskazówki „wygląda na skończoną”. Aby korzystać z Jev przez własną infrastrukturę, przypnij endpoint kluczem jev w pliku polityki albo zmienną OPENCHAMBER_JEV_URL (plus OPENCHAMBER_JEV_MODEL i, jeśli jest potrzebny, OPENCHAMBER_JEV_API_KEY). Staje się on domyślny, nadal można go wyłączyć, a niczego innego nie da się wybrać.
  • Odczytywanie na głos przez OpenAI jest wyłączone. Własny serwer syntezy mowy lub transkrypcji musi działać na tej samej maszynie. Lokalne głosy i lokalne modele dyktowania działają dalej.
  • Powiadomienia push na telefony i do przeglądarek niosą tylko ogólny tytuł, taki jak “Agent response is ready”, bez treści wiadomości i nazwy sesji. Powiadomienia na desktopie zostają na Twojej maszynie i zachowują pełny tekst.
  • Sprawdzanie aktualizacji działa dalej, więc poprawki bezpieczeństwa nadal do Ciebie trafiają, ale nigdy nie raportuje użycia, nawet anonimowego identyfikatora instalacji.
  • Zewnętrzne tunele (Cloudflare, ngrok) są wyłączone. Dostawca tunelu odszyfrowuje ruch na swoim brzegu sieci i widzi każde żądanie otwartym tekstem.
  • Diagramy .drawio otwierają się jako tekst XML. Edytor diagramów to strona diagrams.net, a otwarcie w nim diagramu przekazuje jej plik.
  • Czcionki interfejsu i kodu ładowane z publicznego CDN są zastępowane czcionkami systemowymi. Twój wybór zostaje zachowany na czas, gdy tryb będzie wyłączony.
  • Private Relay działa tylko przez Twój własny relay. Uruchom self-hosted relay i wskaż go OpenChamber przez relayUrl w pliku polityki albo OPENCHAMBER_RELAY_URL=wss://relay.example.com/ws. Wspólny relay też nie może odczytać Twojego ruchu, bo jest szyfrowany end-to-end, ale własny trzyma metadane połączeń i drogę do tej maszyny wewnątrz Twojej sieci. Bez własnego relaya w ogóle nie da się sparować urządzeń.
  • OpenChamber nasłuchuje tylko na maszynie, na której działa. Ustawienie desktopowe, które pozwala innym urządzeniom w sieci lokalnej otwierać aplikację, jest wyłączone, a serwer odmawia startu na adresie sieciowym, czy to przez CLI (--host, --lan), czy przez środowisko. Jeśli plik polityki pojawi się w trakcie działania aplikacji, połączenia z innych maszyn są zrywane do następnego uruchomienia. Dostęp sieciowy włączysz przez "allowNetworkAccess": true w pliku polityki albo OPENCHAMBER_ALLOW_NETWORK_ACCESS=1 tam, gdzie tryb enterprise włącza środowisko. Pamiętaj, że połączenie to zwykłe HTTP, więc we współdzielonej sieci każdy może je odczytać; serwer, do którego łączą się inni, postaw za własnym HTTPS.
  • Rozszerzenia, które mogą wysyłać dane poza maszynę (rozmawiają z zewnętrznym API, ładują coś z zewnętrznych adresów albo uruchamiają usługę w tle), instalują się tylko z repozytorium Git wymienionego w allowedExtensions. Rozszerzenia, które nie robią nic z tych rzeczy, instalują się normalnie. Zainstalowane rozszerzenie z innego źródła pozostaje wyłączone, a Ustawienia mówią dlaczego. Lista zawiera adresy URL repozytoriów, bo rozszerzenie samo wybiera sobie nazwę; wpis zakończony na /, jak https://github.com/acme/, dopuszcza każde repozytorium pod tym adresem. Na maszynach osób, które tworzą rozszerzenia, "allowLocalExtensions": true pozwala też instalować z lokalnego folderu. ZIP pozostaje zablokowany w każdym przypadku.
  • Zmienne środowiskowe z Ustawienia → Ogólne i z opencode service set env nie trafiają do OpenCode, bo któraś z nich mogłaby zawierać klucz dostawcy. Git, terminal i akcje projektu nadal je dostają.
  • W rozszerzeniu VS Code podłączanie dostawców jest wyłączone, a sprawdzanie aktualizacji nie raportuje użycia. Jev, relaya, tuneli, powiadomień push ani mowy w chmurze i tak w nim nie ma.

Zadania małego modelu (tytuły sesji, podsumowania, wiadomości commitów, omówienie zmian) nie wymagają żadnego specjalnego trybu. Zawsze działają na małym modelu wybranym w Ustawieniach, na małym modelu dostawcy, z którym akurat pracujesz, albo na domyślnym modelu z Twojej konfiguracji OpenCode. Nigdy nie przełączają się na innego dostawcę tylko dlatego, że akurat jest podłączony.

O tym, z jakich dostawców modeli w ogóle można korzystać, decyduje OpenCode, nie OpenChamber. Zablokuj to politykami OpenCode: zabroń wszystkich dostawców, a potem zezwól na zatwierdzonych.

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

Zabroniony dostawca znika, nawet jeśli ktoś doda do niego klucz. Umieść polityki w globalnym ~/.config/opencode/opencode.jsonc, gdzie projekt nie może ich znieść, albo dostarczaj je z workspace’u OpenCode Console, który ma ostatnie słowo. Tryb enterprise obejmuje ponad to, co wysyła sam OpenChamber.

Wyszukiwania w sieci i pobieranie stron przez agenta też idą przez OpenCode, do usługi wyszukiwania i do samych stron. Jeśli nie powinny wychodzić poza Twoją sieć, zabroń ich tym samym rodzajem polityki:

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

Powiązane