---
title: "Безопасность и лицензирование"
id: "1314"
type: "page"
slug: "licensing"
published_at: "2026-08-15T21:48:59+00:00"
modified_at: "2026-11-06T09:29:17+00:00"
url: "https://pastukhov.com/agents/multiagent/docs/licensing/"
markdown_url: "https://pastukhov.com/agents/multiagent/docs/licensing.md"
excerpt: "MultiAgent хранит чувствительные данные всей инфраструктуры: SSH-ключи серверов, пароли агентов, токены реестров и API-ключи. Эта…"
---

# Безопасность и лицензирование

[https://pastukhov.com/agents/multiagent/docs/licensing/.md](https://pastukhov.com/agents/multiagent/docs/licensing/.md)

MultiAgent хранит чувствительные данные всей инфраструктуры: SSH-ключи серверов, пароли агентов, токены реестров и API-ключи. Эта страница — о том, как всё это защищено, как настроено резервное копирование и как устроены лицензии.

## Шифрование секретов

Все секреты шифруются на хранении симметричным шифрованием AES-256-GCM. 32-байтный ключ лежит в `/data/keys/management-secret.key` — внутри volume MultiAgent, вне базы данных. Что защищено:

- SSH-пароли и приватные ключи серверов (включая учётные данные proxy jump);
- пароли Postgres и Forgejo на фабриках;
- токены реестров образов (Registry Auth);
- пароли менеджеров агентов и переменные-секреты моделей и инструментов;
- ключи программного интерфейса и пароли служб фабрики (Postgres, Forgejo, центральный вход, резервное копирование).

Подключение к машине — адрес, порт, логин, пароль или ключ, промежуточный хост — хранится на записи **сервера**, а не на каждой фабрике: несколько фабрик на одной машине пользуются одним подключением. Поправили адрес или пароль — это сразу действует на все фабрики этой машины. Секреты только записываются: ответы содержат лишь пометку «задан» или «не задан», а сам пароль или ключ обратно не выдаётся.

Проверка входа пользователей — JWT-токены со сроком 90 дней, подписанные отдельным ключом из `/data/keys`. Все действия API требуют проверки ключа; анонимна только страница входа, а программный интерфейс `/api/agent/*` открывается отдельным ключом `X-API-Key`.

## Agent API — программный интерфейс

Программный интерфейс `/api/agent/*` предназначен для автоматических вызовов — например, из агентов и внешних систем. Каждый запрос проверяется заголовком `X-API-Key`: в переменной окружения `MULTIAGENT_HASH` хранится только «отпечаток» ключа (SHA-256), а сам ключ задаётся один раз при установке. Без переменной интерфейс отвечает 503 и не работает вовсе.

Особенности безопасности: `GET /api/agent` возвращает каталог всех операций с описаниями; секреты можно только записать — назад они не выдаются, только приметы «есть значение»; удалённого выполнения кода нет — только заранее определённые операции; долгие операции запускаются по схеме «запустил — проверяй» по адресу `operations/{id}`. Подробнее — [Agent API](/agents/multiagent/docs/agent-api)
.

## Публичность портов

Агенты, приложения и инструменты по умолчанию не видны из интернета: их порты публикуются только на самом сервере (на адресе `127.0.0.1`) и доступны его приложениям и nginx. Наружу порт открывается по желанию — переключателем **«Публичный порт»** у нужной привязки. Он есть и в мастере создания, и позже на вкладке **«Порты»** у агента или приложения: у каждой привязки свой переключатель, а новые строки появляются закрытыми. Изменение вступает в силу при следующем пересоздании, а смена основного порта сразу обновляет маршрут. Так фабрики на одной машине не видят друг друга: чужой контейнер до закрытого порта не достучится.

Публичными всегда остаются только сам nginx (входная дверь) и служба резервного копирования — они и должны быть доступны снаружи. Всё остальное закрыто, а управление закрытыми портами идёт через защищённый туннель, поэтому закрытый порт не мешает MultiAgent проверять состояние агента и управлять им.

## Резервное копирование

На каждой фабрике MultiAgent поднимает службу резервного копирования — rsync с семью разделами, доступными только на чтение: папки docker, домашней страницы, данных, проектов и инструментов, а также две папки дампов (Postgres и Forgejo). Ваши машины-бэкаперы забирают данные по расписанию — типичной ночной задачей:

```
# nightly backup of all server data
rsync -avz rsync://backup@server-host:873/data/    /backups/server-host/data/
rsync -avz rsync://backup@server-host:873/projects/ /backups/server-host/projects/
```

Сам MultiAgent бэкапится вместе с volume `/data`: база, ключи шифрования и лицензия лежат там же. Подробнее о структуре данных — в документации.

Проверка **«Проверить связь»** смотрит на всё сразу: запущен ли контейнер, отдаёт ли он все семь модулей (чего не хватает — названо), совпадает ли опубликованный порт с сохранённым и принимает ли порт подключение снаружи. Всё найденное перечисляется одним списком — так «зелёная» проверка не скроет порт, до которого снаружи не достучаться. Рядом стоит кнопка **«Переустановить rsync»**: она заново разворачивает приём копий и публикует сохранённый порт, если развёртывание устарело.

Готовые клиенты выдаёт и страница **«Резервное копирование»** в разделе «Активы»: она собирает такой же клиент сразу на все фабрики выбранного в шапке флота — каждая попадает в свою папку, а фабрику без адреса сервера страница называет пропущенной. Подробнее о трёх клиентах — на странице [Фабрики](/agents/multiagent/docs/factories)
.

## Лицензии агентов

Раздел «Лицензии» — центральное хранилище лицензионных ключей Pastukhov Agent. Ключ проверяется при добавлении, шифруется на хранении и никогда не возвращается из API — интерфейс показывает только распарсенные метаданные (тип, владелец, срок, покрытые продукты) и никогда сам ключ. На странице лицензий и в диалоге деталей показывается поле **«Продукты»**: перечень продуктов из ключа, а у универсального ключа — «Универсальная». Ключ, подписанный верно, но не покрывающий нужный продукт, выдаёт ошибку покрытия вместо срока действия — статус говорит, что именно не так. Один ключ назначается любому числу агентов и автоматически попадает в их переменную `AGENT_LICENSE` при развёртывании. Лицензия, назначенная хотя бы одному агенту или выбранная лицензией по умолчанию на фабрике, не удалится, пока её не отсоединить.

Ключ можно не только вставить, но и выпустить прямо в интерфейсе: если на узле лежит закрытый ключ подписи, в диалоге лицензии появляется пункт «Сгенерировать лицензию». В нём заполняются тип, кому выдана, email, описание и срок; готовый ключ сразу уходит в зашифрованное хранилище и становится лицензией фабрики по умолчанию — наружу сам ключ не показывается, как и у вставленного. Без ключа подписи на узле этот пункт не появляется, и ничего не меняется.

Видно и куда лицензия выдана: в диалоге её деталей перечислены фабрики и агенты, которые её используют, — по именам и со ссылками, а не только числом. Так можно отсоединить лицензию перед удалением, не обходя вручную все фабрики. Лицензия выбирается на вкладке **«Общее»** фабрики — она становится лицензией по умолчанию для всех новых агентов на ней.

У лицензии есть действие **«Продлить»**, и оно открывается из того же диалога, что и список назначений, — отдельного окна для продления нет. Указывается срок в днях (по умолчанию 31) и дата окончания: поля связаны, изменили одно — пересчиталось другое. Ключ пересобирается с новой датой, а его владелец, тип, покрытые продукты и все назначения остаются прежними: выпускать новый ключ и заново назначать его агентам не нужно. Переименование и перевыпуск остались на шаг глубже — отдельной кнопкой внутри диалога.

Продлевать вручную не обязательно: у каждой лицензии со сроком есть переключатель **«Автопродление»**, и у новой лицензии он сразу включён (у тех, что заведены раньше, читается как включённый). Пока он включён, проверка раз в шесть часов смотрит на срок: как только до конца остаётся меньше интервала проверки — или срок уже прошёл, — ключ пересобирается ещё на 31 день. Истёкшая лицензия считается от сегодняшнего дня, а не уходит в прошлое. В самом ключе не меняется ничего, кроме даты: владелец, тип, продукты и назначения остаются на месте, а сам ключ нигде не показывается.

После продления все агенты и приложения, которые держат эту лицензию — напрямую или как лицензию фабрики по умолчанию, — получают обычное плавное обновление: занятый чатом агент дождётся тишины, свободный пересоздастся сразу, а уже остановленный получит новый ключ при следующем запуске. Действующий чат не прерывается никогда. Переключатель есть у каждой лицензии со сроком — на её строке в списке, в форме добавления и в диалоге свойств; ручное продление его не сбрасывает. У бессрочной лицензии даты окончания нет, поэтому и переключателя на ней нет.

## Лицензирование MultiAgent

Сам MultiAgent распространяется с 30-дневным пробным периодом, уже включённым в продукт. Лицензия — самодостаточная подписанная строка: загружается через переменную `AGENT_LICENSE` (ту же, что читают все продукты семейства) или файлом активации в папке данных и проверяется офлайн по встроенному ключу. Универсальный ключ (без списка продуктов) покрывает все продукты; действующая лицензия блокирует только создание новых сущностей и отправку сообщений. Лицензия входит в подписку [«Фабрика агентов»](/agents/factory)
.

Статус лицензии подгружается сразу после входа: строка лицензии в интерфейсе показывает состояние, как только вы вошли, — в том числе при первом открытии панели в новом браузере, где вход происходит уже после загрузки страницы. Обновлять страницу вручную не нужно.

## Язык интерфейса и часовой пояс

Язык интерфейса выбирает сам пользователь в окне «Внешний вид»: английский или русский. Русский — только значение по умолчанию русской сборки; на английской сборке интерфейс открывается на английском, но каждый может переключить его себе, и выбор сохраняется за учётной записью. Даты и числа при этом остаются в формате сборки.

Там же, под языком, выбирается **часовой пояс** — один на всю систему. Все даты, графики и отчёты показываются в нём, чтобы время в панели совпадало с вашим. На хранении всё остаётся по всемирному времени, поэтому смена пояса ничего не сдвигает и не портит данные — меняется только то, как они показываются.

## Сеансы входа

Вход в панель запоминается на **90 дней** — речь о входе в саму панель управления, а не в агентов. За это время ничего подтверждать заново не нужно: обычное обновление профиля сеанс не обрывает. Устройства, которые уже вошли, продолжают работать и тогда, когда ссылка для входа отозвана: отзыв закрывает вход новым, но уже вошедших не выкидывает. Если же нужно вывести всех сразу, на вкладке **«Авторизация»** есть кнопка **«Применить конфигурацию»** — она завершает все сеансы центрального входа, и войти заново придётся с текущим паролем.

[← Оглавление документации](/agents/multiagent/docs)
