# Безопасность

> Учётные данные, HTTPS, вход в систему и сетевая доступность установки PentAGI.

## [Изменение настроек по умолчанию](https://pentagi.com/ru/docs/configuration/security/#change-the-defaults)

При новой установке создаётся локальный администратор `admin@pentagi.com` с паролем `admin`, который необходимо изменить при первом входе. Если пароль утерян, его можно сбросить через меню обслуживания установщика, пока для учётной записи используется адрес `admin@pentagi.com`.

Укажите эти значения в `.env` перед первым запуском; установщик генерирует для вас соль и пароли. PostgreSQL и Neo4j принимают учётные данные только при создании томов данных, поэтому их последующее изменение нарушит подключение:

| Переменная                                           | Назначение                                                                                                  |
| ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| `COOKIE_SIGNING_SALT`                                | Подпись сессионных cookie и API-токенов — задайте случайное значение                                        |
| `PENTAGI_POSTGRES_USER`, `PENTAGI_POSTGRES_PASSWORD` | Учётные данные PostgreSQL                                                                                   |
| `NEO4J_PASSWORD`                                     | Пароль Neo4j для [knowledge graph](https://pentagi.com/ru/docs/glossary/#knowledge-graph); `NEO4J_USER` должен оставаться `neo4j` |
| `PUBLIC_URL`                                         | URL, по которому пользователи открывают систему, например `https://pentagi.example.com`                     |

На работающей установке сначала измените пароль базы данных внутри PostgreSQL или Neo4j, а затем в `.env`.

## [HTTPS](https://pentagi.com/ru/docs/configuration/security/#https)

PentAGI предоставляет HTTPS на порту 8443 с самоподписанным сертификатом. Чтобы использовать собственный сертификат, задайте `SERVER_SSL_CRT` и `SERVER_SSL_KEY` и смонтируйте файлы в `docker-compose.yml`.

## [Пользователи и аутентификация](https://pentagi.com/ru/docs/configuration/security/#users-and-sign-in)

Форма самостоятельной регистрации отсутствует. Администраторы управляют локальными пользователями через Users API (`/api/v1/users/`) из авторизованной сессии браузера — API-токен там получает ошибку 403, — а роли ограничивают доступ каждого пользователя к просмотру и изменению данных. Локальные пользователи могут изменить свой адрес электронной почты и пароль в разделе **Settings → Account**.

При настроенной аутентификации через GitHub или Google вход с адресом электронной почты, подтверждённым провайдером и совпадающим с существующей учётной записью (включая локальные), выполняется в эту учётную запись с её ролью; любой другой вход создаёт новую учётную запись с ролью пользователя по умолчанию. Каждая установка начинается с администратора `admin@pentagi.com`, поэтому перед включением аутентификации перенесите её на адрес, который вы контролируете, в разделе **Settings → Account**, и включайте эту возможность только там, где создание новых учётных записей допустимо, например при использовании приложения Google Workspace, ограниченного вашим доменом.

Аутентификация через GitHub и Google доступна по протоколу OAuth. Зарегистрируйте приложение с callback-адресом `${PUBLIC_URL}/api/v1/auth/login-callback` и добавьте его учётные данные:

```bash
PUBLIC_URL=https://pentagi.example.com
OAUTH_GITHUB_CLIENT_ID=your_github_client_id
OAUTH_GITHUB_CLIENT_SECRET=your_github_client_secret
```

## [Сетевая экспозиция](https://pentagi.com/ru/docs/configuration/security/#network-exposure)

По умолчанию веб-интерфейс PentAGI прослушивает только `127.0.0.1`. Чтобы получить к нему доступ с других машин:

```bash
PENTAGI_LISTEN_IP=0.0.0.0
PENTAGI_LISTEN_PORT=8443
PUBLIC_URL=https://192.168.1.100:8443
CORS_ORIGINS=https://localhost:8443,https://192.168.1.100:8443
```

В `PUBLIC_URL` и `CORS_ORIGINS` указывайте реальный адрес, никогда не используйте `0.0.0.0`. Пересоздайте контейнеры командой `docker compose up -d --force-recreate` и откройте порт 8443 в межсетевом экране.

За обратным прокси-сервером установите `TRUSTED_PROXIES` в адрес или CIDR прокси-сервера, разделив значения запятыми. В противном случае каждый запрос будет выглядеть так, как будто он исходит от прокси-сервера, и лимит попыток входа на один адрес — 30 неудачных попыток за пять минут, после чего следует блокировка на 15 минут — будет общим для всех пользователей.

Контейнер [sandbox](https://pentagi.com/ru/docs/glossary/#sandbox) каждого [flow](https://pentagi.com/ru/docs/glossary/#flow) также открывает два порта для обратных вызовов вне канала, таких как reverse shells. Они берутся из 2000 портов, начиная с `DOCKER_PORTS_BASE` (по умолчанию `28000`), и привязываются к `DOCKER_PUBLIC_IP` — адресу, который [agents](https://pentagi.com/ru/docs/glossary/#agent) также предоставляют целям для обратного вызова.

По умолчанию `DOCKER_PUBLIC_IP` имеет значение `0.0.0.0`: порты прослушиваются на всех интерфейсах хоста Docker, и agents самостоятельно определяют свой публичный адрес. Указывайте конкретный адрес только в том случае, если он принадлежит хосту и цели тестирования могут его достичь; за NAT оставьте значение по умолчанию. Порты, публикуемые Docker, обходят правила ufw и firewalld на хосте, поэтому ограничьте диапазон с помощью межсетевого экрана перед хостом, например группы безопасности облачного провайдера, или с помощью правил в цепочке `DOCKER-USER` Docker.

`PROXY_URL` направляет вызовы бэкенда к провайдерам моделей, провайдеру эмбеддингов, API поиска и проверку обновлений через прокси, что помогает изолировать установку от внешних сетей. Саморазвёрнутые конечные точки, такие как Ollama, vLLM или SearXNG, также проходят через него, поскольку исключений для `NO_PROXY` нет, поэтому прокси должен иметь возможность достигать их. Sandbox-контейнеры flow, в которых agents выполняют свои команды, скрапер, открывающий веб-страницы для инструмента браузера, и сервис Graphiti не используют его, поэтому ограничьте их исходящий трафик на сетевом уровне. Вход через GitHub или Google и вызовы к конечным точкам Langfuse или OpenTelemetry за пределами поставляемых стеков также не используют его, а демон Docker загружает образы с использованием собственных настроек прокси.

## [Проверка обновлений](https://pentagi.com/ru/docs/configuration/security/#update-check)

В течение двух минут после запуска и затем каждые три часа сервер спрашивает `update.pentagi.com`, доступна ли более новая сборка. Запрос содержит идентификатор установки, ключ лицензии (если он задан), версию и платформу, а также сводку по установке: настроенные provider и типы входа, несколько переключателей функций, количество пользователей, flows, [tasks](https://pentagi.com/ru/docs/glossary/#task), контейнеров, промптов, токенов API и [tool calls](https://pentagi.com/ru/docs/glossary/#tool-call), а также общие суммы токенов и затрат по каждому типу provider — без имён, адресов, промптов или содержимого flow. `UPDATE_CHECK_INTERVAL=0` отключает эту функцию. При каждом запуске установщика и после каждого выполняемого им действия, такого как Apply Changes, Update, Start или Stop, он отправляет установленные образы и состояние каждого стека, а также ту же сводку, пока PentAGI работает; `UPDATE_CHECK_INTERVAL` на это не влияет.

> [!WARNING]
> Контейнер `pentagi` работает от имени root, поскольку управляет контейнерами через сокет Docker. Для более строгой изоляции запустите [tools](https://pentagi.com/ru/docs/glossary/#tool) на отдельном [worker node](https://pentagi.com/ru/docs/deployment/worker-node/).