# Seguridad

> Credenciales, HTTPS, inicio de sesión y exposición de red de una instalación de PentAGI.

## [Cambiar los valores predeterminados](https://pentagi.com/es/docs/configuration/security/#change-the-defaults)

Una instalación nueva crea el administrador local `admin@pentagi.com` con la contraseña `admin`, que debes cambiar en el primer inicio de sesión. Si pierdes la contraseña, el menú de mantenimiento del instalador la restablece siempre que la cuenta siga usando la dirección `admin@pentagi.com`.

Configura estos valores en `.env` antes del primer inicio; el instalador genera la sal y las contraseñas por ti. PostgreSQL y Neo4j toman sus credenciales solo cuando crean sus volúmenes de datos, así que cambiarlos después rompe la conexión:

| Variable                                             | Propósito                                                                                                            |
| ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `COOKIE_SIGNING_SALT`                                | Firma las cookies de sesión y los tokens de API — establece un valor aleatorio                                       |
| `PENTAGI_POSTGRES_USER`, `PENTAGI_POSTGRES_PASSWORD` | Credenciales de PostgreSQL                                                                                           |
| `NEO4J_PASSWORD`                                     | Contraseña de Neo4j para el [knowledge graph](https://pentagi.com/es/docs/glossary/#knowledge-graph); `NEO4J_USER` debe permanecer `neo4j` |
| `PUBLIC_URL`                                         | La URL que abren los usuarios, por ejemplo `https://pentagi.example.com`                                             |

En una instalación en ejecución, cambia primero la contraseña de la base de datos dentro de PostgreSQL o Neo4j y luego en `.env`.

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

PentAGI sirve HTTPS en el puerto 8443 con un certificado autofirmado. Para usar el tuyo propio, configura `SERVER_SSL_CRT` y `SERVER_SSL_KEY` y monta los archivos en `docker-compose.yml`.

## [Usuarios e inicio de sesión](https://pentagi.com/es/docs/configuration/security/#users-and-sign-in)

No hay formulario de registro. Los administradores gestionan los usuarios locales a través de la API de Usuarios (`/api/v1/users/`) desde una sesión de navegador con sesión iniciada — un token de API obtiene un 403 allí — y los roles restringen lo que cada usuario puede ver y cambiar. Los usuarios locales cambian su propio correo electrónico y contraseña en **Settings → Account**.

Con el inicio de sesión mediante GitHub o Google configurado, un inicio de sesión cuyo correo electrónico verificado por el proveedor coincida con una cuenta existente, incluidas las cuentas locales, inicia sesión en esa cuenta con su rol; cualquier otro inicio de sesión obtiene una nueva cuenta con el rol de usuario predeterminado. Cada instalación comienza con el administrador `admin@pentagi.com`, así que cámbialo a una dirección que controles bajo **Settings → Account** antes de habilitar el inicio de sesión, y habilítalo solo donde las nuevas cuentas sean aceptables, por ejemplo con una aplicación de Google Workspace limitada a tu dominio.

El inicio de sesión mediante GitHub y Google está disponible a través de OAuth. Registra una aplicación con la devolución de llamada `${PUBLIC_URL}/api/v1/auth/login-callback` y añade sus credenciales:

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

## [Exposición de red](https://pentagi.com/es/docs/configuration/security/#network-exposure)

Por defecto, la interfaz web de PentAGI escucha solo en `127.0.0.1`. Para acceder a ella desde otras máquinas:

```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
```

Usa la dirección real en `PUBLIC_URL` y `CORS_ORIGINS`, nunca `0.0.0.0`. Recrea los contenedores con `docker compose up -d --force-recreate` y abre el puerto 8443 en el firewall.

Detrás de un proxy inverso, establece `TRUSTED_PROXIES` con la dirección o CIDR del proxy, separados por comas. De lo contrario, todas las solicitudes parecen provenir del proxy y el límite de inicio de sesión por dirección —30 intentos fallidos en cinco minutos, seguido de un bloqueo de 15 minutos— es compartido por todos los usuarios.

El contenedor [sandbox](https://pentagi.com/es/docs/glossary/#sandbox) de cada [flow](https://pentagi.com/es/docs/glossary/#flow) también publica dos puertos para callbacks fuera de banda, como reverse shells. Proceden de los 2000 puertos que comienzan en `DOCKER_PORTS_BASE` (por defecto `28000`) y están vinculados a `DOCKER_PUBLIC_IP`, la dirección que los [agents](https://pentagi.com/es/docs/glossary/#agent) también indican a los targets para realizar el callback.

Por defecto `DOCKER_PUBLIC_IP` es `0.0.0.0`: los puertos escuchan en todas las interfaces del host de Docker, y los agents buscan su dirección pública por sí mismos. Configúralo con una dirección específica solo si el host posee esa dirección y los targets pueden alcanzarla; detrás de NAT, mantén el valor por defecto. Los puertos que Docker publica omiten las reglas de ufw y firewalld en el host, así que restringe el rango con un firewall delante del host, como un grupo de seguridad en la nube, o con reglas en la cadena `DOCKER-USER` de Docker.

`PROXY_URL` enruta las llamadas del backend a los proveedores de modelos, el proveedor de embeddings, las APIs de búsqueda y la comprobación de actualizaciones a través de un proxy, lo que ayuda a aislar la instalación de las redes externas. Los endpoints autoalojados como Ollama, vLLM o SearXNG también pasan por él, ya que no hay una excepción `NO_PROXY`, así que el proxy debe poder alcanzarlos. Los contenedores sandbox de los flows, donde los agents ejecutan sus comandos, el scraper, que abre páginas web para la herramienta del navegador, y el servicio Graphiti no lo utilizan, así que restringe su tráfico saliente a nivel de red. El inicio de sesión con GitHub o Google y las llamadas a un endpoint de Langfuse u OpenTelemetry fuera de los stacks incluidos tampoco lo usan, y el demonio Docker descarga las imágenes con su propia configuración de proxy.

## [Comprobación de actualizaciones](https://pentagi.com/es/docs/configuration/security/#update-check)

A los dos minutos de arrancar y luego cada tres horas, el servidor pregunta a `update.pentagi.com` si hay una compilación más reciente disponible. La petición lleva el ID de instalación, la clave de licencia si está configurada, la versión y la plataforma, y un resumen de la instalación: el provider configurado y los tipos de inicio de sesión, algunos interruptores de funciones, recuentos de usuarios, flows, [tasks](https://pentagi.com/es/docs/glossary/#task), contenedores, prompts, tokens de API y [tool calls](https://pentagi.com/es/docs/glossary/#tool-call), y totales de tokens y costes por tipo de provider — sin nombres, direcciones, prompts ni contenido de flows. `UPDATE_CHECK_INTERVAL=0` lo desactiva. Cada vez que el instalador se inicia y después de cada acción que ejecuta, como Apply Changes, Update, Start o Stop, envía las imágenes instaladas y el estado de cada stack, además del mismo resumen mientras PentAGI está en ejecución; `UPDATE_CHECK_INTERVAL` no le afecta.

> [!WARNING]
> El contenedor `pentagi` se ejecuta como root porque gestiona contenedores a través del socket de Docker. Para un aislamiento más fuerte, ejecuta las [tools](https://pentagi.com/es/docs/glossary/#tool) en un [worker node](https://pentagi.com/es/docs/deployment/worker-node/) separado.