# Аутентификация и безопасность Доступ к CodeNomad позволяет выполнять работу на серверном хосте через OpenCode. Считайте пароли сервера, браузерные сессии и сопряжённые устройства мощными учётными данными. CodeNomad — не многопользовательская песочница выполнения. ## Выбор аутентификации сервера {#authentication} | Способ | Время жизни и область | | --- | --- | | `--password` или `CODENOMAD_SERVER_PASSWORD` | Переопределение, переданное при запуске процесса серверной части. Нужно снова при каждом запуске; не сохраняется. Имеет приоритет над управляемым файлом пароля. | | Пароль в настройках | Сохраняет хэш scrypt с солью в `auth.json` рядом с активной конфигурацией YAML. Используется при следующих запусках, если при запуске не передан другой пароль. | | `--generate-token` | Включает локальную одноразовую начальную настройку; напечатанный токен действует 60 секунд. Это не повторно используемый API-токен и не ссылка удалённого управления. | | Сопряжение удалённого управления | Отдельная аутентификация cookie устройства, управляемая с хоста; см. [удалённое управление](remote-control.md). | Имя пользователя по умолчанию — `codenomad`. Сохранённый файл аутентификации сохраняет имя; изменение только `--username` не переименовывает эту идентичность. Без настроенного пароля, режима начальной настройки или явно пропущенной аутентификации сервер отказывается запускаться. Предпочитайте защищённое окружение/секрет службы встраиванию пароля в аргументы команд или историю оболочки. Любой, кто может изучить окружение процесса или каталог конфигурации, всё равно может скомпрометировать развёртывание. ## Начальная настройка постоянного пароля {#bootstrap} 1. Запустите локально, не передавая пароль при запуске. Для настройки через loopback без предварительного сертификата используйте `codenomad --host 127.0.0.1 --https=false --http=true --generate-token --launch`. 2. На компьютере серверной части откройте `/auth/token` по напечатанному **Local Connection URL** и отправьте значение после `CODENOMAD_BOOTSTRAP_TOKEN:`. Не делитесь этим выводом. 3. Откройте **Настройки → Удалённый доступ → Прямой доступ (локальная сеть, для опытных) → Пароль сервера**. 4. Выберите **Установить пароль**, заполните **Новый пароль** и **Подтвердите пароль** минимум восемью символами, затем **Сохранить пароль**. 5. При следующем запуске уберите `--generate-token` и используйте сохранённый пароль для прямых подключений. Перед включением удалённого доступа настройте [доверенный HTTPS](remote-access.md); команда настройки loopback HTTP не предназначена для удалённого развёртывания. Начальная настройка принимается только с собственного loopback-слушателя хоста, не от LAN-клиента или входа удалённого управления. Оставьте стандартную loopback-привязку для настройки. Истёкший или использованный токен требует нового запуска начальной настройки. Если постоянный пароль уже есть, сессия настройки позволяет выбрать **Изменить пароль**. `auth.json` управляется приложением; не правьте хэш вручную и не публикуйте файл. Если пароль пришёл из CLI/окружения, настройки отказываются заменять его: перезапустите без переопределения для существующего управляемого пароля или задайте его локальной начальной настройкой. Нечитаемый/незаписываемый файл требует исправления прав ОС/пути, не отключения аутентификации. ## Браузерные сессии и отзыв {#sessions} Прямой вход создаёт непрозрачную сессию в памяти серверной части и cookie `codenomad_session` (или настроенное имя). Cookie имеют `HttpOnly`, `SameSite=Lax`, область `/` и `Secure` при выдаче через HTTPS. Это сессионные cookies браузера; перезапуск серверной части делает сессии в памяти недействительными. При запросе войдите заново на месте, а не повторяйте неудачные изменения. Изменение пароля меняет последующие проверки данных; **не** аннулирует уже выданные прямые сессии или устройства удалённого управления. При подозрении на компрометацию: 1. Ограничьте сетевую доступность и задайте новый пароль на хосте либо измените пароль, передаваемый при запуске, и перезапустите. 2. Перезапустите серверную часть для аннулирования существующих прямых сессий. 3. В **Удалённое управление → Сопряжённые устройства** отдельно используйте **Отозвать** для неизвестных устройств. Остановите удалённое управление, если нужно немедленно перекрыть весь его путь доступа. 4. Проверьте затронутые файлы, аккаунты провайдеров и нативную активность OpenCode. Остановка доступа не откатывает уже допущенную работу. Отдельный срок 30 дней бездействия и пятиминутные ссылки описаны в [удалённом управлении](remote-control.md). Смена пароля не отзывает устройство, а остановка туннеля не удаляет устройство. ## Защита транспорта и доступности слушателей {#transport} Используйте доверенный HTTPS для прямого удалённого доступа. Обычный HTTP раскрывает пароли, сессионные cookies и рабочий контент любому наблюдателю этого сетевого участка. Если TLS завершается на обратном прокси, оставьте участок до серверной части на loopback или другой защищённой сети; TLS прокси не шифрует открытое HTTP-соединение к серверной части. `--dangerously-skip-auth` / `CODENOMAD_SKIP_AUTH` отключает вход прямых слушателей CodeNomad и считает запросы аутентифицированными. Это **не** делает сервер безопасным для публикации. Слушатель без защищающего периметра предоставляет доступ любому, кто может до него добраться; одно VPN-подключение не различает доверенных и недоверенных пользователей VPN. Оставьте аутентификацию включённой, если не спроектировали и не проверили независимо каждый путь доступа. Удалённому управлению всё равно нужно сопряжённое устройство даже с этим флагом. Проверьте [матрицу привязок и процедуры TLS](remote-access.md), особенно отдельный режим только HTTP: он учитывает `--host` и может раскрыть незашифрованный трафик вне loopback. Никогда не решайте ошибки сертификата отключением проверки. **`CODENOMAD_SKIP_AUTH=false` сохраняет аутентификацию включённой, если не передан `--dangerously-skip-auth`.** `1`, `true`, `yes` или `on` включают обход аутентификации, без учёта регистра и пробельных символов по краям; `0`, `false`, `no`, `off`, пустое значение или значение только из пробельных символов, а также отсутствие переменной оставляют обход выключенным. Любое другое значение запрещает запуск сервера, даже с флагом CLI. Флаг имеет приоритет над допустимым выключающим значением; см. [справочник CLI](server.md#cli-reference). ## Граница хоста {#host-boundary} `--workspace-root` ограничивает открываемые рабочие пространства, а `--unrestricted-root` расширяет просмотр. Ни один не является изоляцией ОС, контейнером, песочницей файловой системы или ограничением полномочий авторизованного нативного инструмента. Агенты, команды оболочки, плагины и MCP-инструменты действуют с правами хоста выполнения и собственными настроенными учётными данными. [SideCars](browser-sidecars.md) — доверенные дополнения. CodeNomad не передаёт службе SideCar свои cookies входа и сопряжённых устройств, но страница SideCar загружается в том же источнике (origin), что и CodeNomad, и её скрипты могут действовать с вашей сессией входа. Регистрируйте только службы, которым доверяете так же, как самому CodeNomad. Для реальной изоляции используйте учётные записи ОС, контейнеры/ВМ и настройки разрешений upstream. Не давайте устройству доступ лишь потому, что ожидаете показ одной вкладки. Конфигурация сервера и общая служба OpenCode могут влиять на другие разговоры/проекты; их отдельные границы описаны в [настройке OpenCode](opencode.md), [разрешениях](permissions.md) и [расширениях](extensions.md). ## Конфиденциальность учётных данных и диагностики {#privacy} OpenCode владеет подключениями провайдеров и глобальным хранилищем разговоров. CodeNomad читает метаданные подключений и выбранные учётные данные на серверной стороне для поддерживаемых интеграций использования; браузерные API не возвращают секреты провайдеров. Обновление чужого входа OAuth принадлежит его владельцу; CodeNomad не обменивает эти токены обновления. См. [провайдеры](providers.md). | Материал | Обращение | | --- | --- | | Пароли, токены начальной настройки, ссылки сопряжения, cookies | Никогда не вставляйте в задачи, снимки экрана, записи оболочки или общие логи. | | `auth.json`, закрытые ключи TLS, идентичность туннеля, секреты конфигурации | Защищайте правами ОС и шифрованными резервными копиями; не загружайте целые каталоги для поддержки. | | Текст разговоров, вложения, пути рабочего пространства и удалённые адреса | Проверяйте/скрывайте перед передачей; могут идентифицировать людей, проекты или инфраструктуру. | | Ключи провайдеров и речи | Вводите только у нужного владельца настроек/данных; проверяйте получателя данных. См. [голос](voice.md). | | Логи debug/trace и сетевые захваты | Собирайте только необходимое, проверяйте локально и очищайте перед отчётом. Не предполагайте отсутствие секретов в выводе каждого нижележащего инструмента. | **Настройки → Информация → Сообщить об ошибке** готовит ограниченную диагностику без подстановки слушателей, адресов, путей, учётных данных или контента разговора. Проверьте собственные дополнения перед отправкой. См. [поддержку](support.md).