# 安全

> PentAGI 安装实例的凭据、HTTPS、登录及网络暴露面。

## [更改默认设置](https://pentagi.com/zh-cn/docs/configuration/security/#change-the-defaults)

全新安装会创建本地管理员 `admin@pentagi.com`，密码为 `admin`，您必须在首次登录时修改该密码。如果遗忘密码，只要该账户仍使用 `admin@pentagi.com` 地址，即可通过安装程序的维护菜单进行重置。

请在首次启动前设置 `.env` 中的这些值；安装程序会为您生成 salt 和密码。PostgreSQL 和 Neo4j 仅在创建数据卷时读取其凭据，因此后续更改会导致连接中断：

| 变量                                                  | 用途                                                                                       |
| --------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| `COOKIE_SIGNING_SALT`                               | 用于签署会话 Cookie 和 API 令牌 — 请设置为随机值                                                         |
| `PENTAGI_POSTGRES_USER`、`PENTAGI_POSTGRES_PASSWORD` | PostgreSQL 凭据                                                                            |
| `NEO4J_PASSWORD`                                    | [knowledge graph](https://pentagi.com/zh-cn/docs/glossary/#knowledge-graph) 的 Neo4j 密码；`NEO4J_USER` 必须保持为 `neo4j` |
| `PUBLIC_URL`                                        | 用户访问的 URL，例如 `https://pentagi.example.com`                                               |

在正在运行的安装中，请先在 PostgreSQL 或 Neo4j 内部更改数据库密码，然后在 `.env` 中进行更改。

## [HTTPS](https://pentagi.com/zh-cn/docs/configuration/security/#https)

PentAGI 在 8443 端口上提供 HTTPS 服务，并使用自签名证书。如需使用您自己的证书，请设置 `SERVER_SSL_CRT` 和 `SERVER_SSL_KEY`，并将文件挂载到 `docker-compose.yml` 中。

## [用户与登录](https://pentagi.com/zh-cn/docs/configuration/security/#users-and-sign-in)

系统不提供注册表单。管理员通过已登录的浏览器会话使用 Users API (`/api/v1/users/`) 管理本地用户 — API 令牌在此处会返回 403 — 角色用于限制每个用户可以查看和修改的内容。本地用户在 **Settings → Account** 下修改自己的邮箱和密码。

配置 GitHub 或 Google 登录后，如果登录时 provider 验证的电子邮件与现有账户（包括本地账户）匹配，则会以该账户及其角色登录；其他任何登录都将获得一个具有默认用户角色的新账户。每个安装都从管理员 `admin@pentagi.com` 开始，因此在启用登录之前，请通过 **Settings → Account** 将其移至您控制的地址，并且仅在可接受新账户的情况下启用此功能，例如使用仅限于您域名的 Google Workspace 应用。

GitHub 和 Google 登录通过 OAuth 实现。请注册一个应用，回调地址设为 `${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/zh-cn/docs/configuration/security/#network-exposure)

默认情况下，PentAGI Web 界面仅监听 `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 分钟）将由所有用户共享。

每个 [flow](https://pentagi.com/zh-cn/docs/glossary/#flow) 的 [sandbox](https://pentagi.com/zh-cn/docs/glossary/#sandbox) 容器还会发布两个端口，用于带外回调（例如反向 shell）。这些端口来自从 `DOCKER_PORTS_BASE` 开始的 2000 个端口（默认 `28000`），并绑定到 `DOCKER_PUBLIC_IP`，即 [agent](https://pentagi.com/zh-cn/docs/glossary/#agent) 提供给目标用于回调的地址。

默认情况下，`DOCKER_PUBLIC_IP` 为 `0.0.0.0`：端口监听 Docker 主机的所有接口，agents 自行查找其公共地址。仅当主机拥有该地址且目标可以访问它时，才将其设置为特定地址；在 NAT 后面时，请保持默认设置。Docker 发布的端口会绕过主机上的 ufw 和 firewalld 规则，因此请使用主机前方的防火墙（例如云安全组）或 Docker 的 `DOCKER-USER` 链中的规则来限制范围。

`PROXY_URL` 通过代理路由后端对模型 provider、嵌入 provider、搜索 API 和更新检查的调用，这有助于将安装与外部网络隔离。自托管端点（如 Ollama、vLLM 或 SearXNG）也通过该代理，因为不存在 `NO_PROXY` 例外，所以代理必须能够访问它们。flow 的 sandbox 容器（agent 在其中运行命令）、为浏览器 [tool](https://pentagi.com/zh-cn/docs/glossary/#tool) 打开网页的 scraper 以及 Graphiti 服务不使用该代理，因此请在网络级别限制它们的出站流量。使用 GitHub 或 Google 登录以及对捆绑栈之外的 Langfuse 或 OpenTelemetry 端点的调用也不使用该代理，Docker 守护进程则使用其自身的代理设置拉取镜像。

## [更新检查](https://pentagi.com/zh-cn/docs/configuration/security/#update-check)

服务器在启动后两分钟内，随后每隔三小时，会向 `update.pentagi.com` 查询是否有更新的构建版本可用。该请求携带安装 ID、许可证密钥（如果已设置）、版本和平台信息，以及安装的摘要：已配置的 provider 和登录类型、若干功能开关、用户、flow、[task](https://pentagi.com/zh-cn/docs/glossary/#task)、容器、提示词、API 令牌和 [tool call](https://pentagi.com/zh-cn/docs/glossary/#tool-call) 的数量，以及按 provider 类型统计的令牌和成本总额——不包含任何名称、地址、提示词或 flow 内容。`UPDATE_CHECK_INTERVAL=0` 可将其关闭。安装程序每次启动时，以及在执行每项操作（如 Apply Changes、Update、Start 或 Stop）之后，都会发送已安装的镜像和每个堆栈的状态；在 PentAGI 运行时，还会发送相同的摘要；`UPDATE_CHECK_INTERVAL` 不会影响它。

> [!WARNING]
> `pentagi` 容器以 root 身份运行，因为它需要通过 Docker 套接字管理容器。为了获得更强的隔离性，请在独立的 [worker node](https://pentagi.com/zh-cn/docs/deployment/worker-node/) 上运行 tools。