O9.7 - Inventario de credenciales y accesos UI¶
Fecha de ejecucion: 2026-06-01
Objetivo¶
Determinar como acceder hoy a las UIs publicadas o activas del VPS sin exponer secretos ni imprimir contraseñas.
Safe point inicial¶
git status -sb->## main...origin/maingit rev-parse HEAD->f20c91ef8eff3c405e4620b063927393943c1e51
Alcance auditado¶
GrafanaPortainerOpenClawNginx Proxy Manager
Regla de esta evidencia¶
- no se imprimen contraseñas
- no se copian tokens, hashes ni secretos
- cuando la password existe solo en forma no reversible o no documentada, se
marca como
desconocida - cuando el origen de verdad es un archivo secreto local legible por operador
con
root, se marca comoconocida por secreto local
Resumen ejecutivo¶
| UI | URL actual | Metodo de autenticacion | Usuario configurado | Donde vive la password o equivalente | Estado actual | Recuperacion |
|---|---|---|---|---|---|---|
| Grafana | https://grafana.alpuntodeventa.com.ar/login |
login local usuario + password | obs-admin |
secreto local bind-mounted desde /opt/stacks/observability/secrets/grafana_admin_password |
password conocida por secreto local | si |
| Portainer | https://portainer.alpuntodeventa.com.ar/ |
auth interna de Portainer usuario + password | cuenta admin existente confirmada; nombre exacto no revalidado sin login | hash dentro de portainer.db en volumen portainer_data_new |
password desconocida | si |
| OpenClaw | https://openclaw.alpuntodeventa.com.ar/ |
device auth + pairing aprobado + estado de auth persistido | dispositivo oficial de Gabi aprobado para Control UI; no usa usuario/password humano clasico | pairing y tokens en /opt/stacks/openclaw/config/{devices,identity,agents/...}; gateway token en .env del stack |
password no aplica | si |
| Nginx Proxy Manager | http://46.202.151.32:81/ |
login local usuario + password | Admin / gabrielcanuti@gmail.com |
hash dentro de /docker/nginx-proxy-manager/data/database.sqlite |
password desconocida | si |
Inventario por UI¶
Grafana¶
- URL:
https://grafana.alpuntodeventa.com.ar/login - Evidencia:
HTTP 200en2026-06-01yapi/healthrespondeversion 13.0.1+security-01. - Metodo de autenticacion:
login local de Grafana con
GF_USERS_ALLOW_SIGN_UP=falseyGF_AUTH_ANONYMOUS_ENABLED=false. - Usuario configurado:
obs-admin. - Donde se define la password:
archivo secreto local
/opt/stacks/observability/secrets/grafana_admin_password, montado readonly como/run/secrets/grafana_admin_password. - Password actual:
conocida por secreto local. - Procedimiento de recuperacion:
si se pierde control del secreto, generar nueva password fuera de Git,
reemplazar solo el contenido del archivo
/opt/stacks/observability/secrets/grafana_admin_password, recrearobs-grafanadesde/opt/stacks/observability/docker-compose.ymly validar/login.
Portainer¶
- URL:
https://portainer.alpuntodeventa.com.ar/ - Evidencia:
HTTP 200en2026-06-01;/api/statusresponde2.39.2; el endpoint/api/users/admin/checkdevuelveHTTP 204, confirmando que la cuenta admin ya existe. - Metodo de autenticacion:
auth interna de Portainer por usuario/password
(
AuthenticationMethod=1en/api/settings/public). - Usuario configurado: existe cuenta admin; el nombre exacto del login no se pudo confirmar en modo solo lectura sin autenticarse.
- Donde se define la password:
hash persistido dentro de
portainer.dben el volumen Dockerportainer_data_new(/var/lib/docker/volumes/portainer_data_new/_data). - Password actual:
desconocida. - Procedimiento de recuperacion:
- tomar backup del volumen
portainer_data_newo delportainer-volume.tgzmas reciente; - detener o aislar el acceso administrativo durante la operacion;
- ejecutar el helper oficial sobre el volumen real:
docker run --rm -v portainer_data_new:/data portainer/helper-reset-password -password '<TEMP>' - iniciar sesion con la password temporal;
- rotarla inmediatamente por una definitiva fuera de Git;
- registrar solo la ubicacion del secreto, no su valor.
OpenClaw¶
- URL:
https://openclaw.alpuntodeventa.com.ar/ - Evidencia:
HTTP 200en2026-06-01; el servicio siguehealthy. - Metodo de autenticacion: no usa usuario/password humano clasico para la Control UI. El acceso actual depende de:
pairingydevice auth- estado persistido del agente
- token de gateway definido en el stack
- Usuario configurado: no aplica como usuario/password clasico. La identidad operativa observada es el dispositivo oficial de Gabi aprobado para la Control UI.
- Donde se define la password o equivalente: no hay password unica de UI. Los elementos de acceso viven en:
/opt/stacks/openclaw/.envpara el gateway token/opt/stacks/openclaw/config/devices/paired.json/opt/stacks/openclaw/config/devices/pending.json/opt/stacks/openclaw/config/identity/device-auth.json/opt/stacks/openclaw/config/agents/main/agent/auth-profiles.json/opt/stacks/openclaw/config/agents/main/agent/auth-state.json- Password actual:
no aplica. - Procedimiento de recuperacion:
- preservar backup actual de
/opt/stacks/openclaw/configy.env; - si se perdio el browser o dispositivo aprobado, no borrar
paired.jsona ciegas; - levantar un nuevo pairing controlado desde un cliente confiable y aprobar solo el device esperado;
- si el problema fue corrupcion de estado, restaurar los archivos de
config/desde el ultimoopenclaw-stack.tgzvalido; - revalidar
openclaw health --jsony acceso por la Control UI.
Nginx Proxy Manager¶
- URL:
http://46.202.151.32:81/ - Evidencia:
HTTP 200local en2026-06-01; no se observo FQDN administrativo dedicado. - Metodo de autenticacion: login local de NPM por usuario/password.
- Usuario configurado:
Admincon emailgabrielcanuti@gmail.com. - Donde se define la password:
hash persistido en la base SQLite
/docker/nginx-proxy-manager/data/database.sqlite. - Password actual:
desconocida. - Procedimiento de recuperacion:
- tomar backup de
/docker/nginx-proxy-manager/data/database.sqlitey delnpm-stack.tgzvigente; - detener
nginx-proxy-managero programar una ventana corta; - generar un hash bcrypt nuevo fuera de Git;
- actualizar solo el registro del usuario admin en
database.sqlite; - volver a levantar el contenedor;
- iniciar sesion con password temporal y rotarla inmediatamente.
Ubicacion de los secretos y estados criticos¶
| UI | Tipo | Ubicacion real |
|---|---|---|
| Grafana | secreto local plaintext controlado por host | /opt/stacks/observability/secrets/grafana_admin_password |
| Portainer | hash dentro de DB Bolt persistida | /var/lib/docker/volumes/portainer_data_new/_data/portainer.db |
| OpenClaw | token y estados de device/pairing/auth | /opt/stacks/openclaw/.env y /opt/stacks/openclaw/config/** |
| NPM | hash dentro de DB SQLite | /docker/nginx-proxy-manager/data/database.sqlite |
Riesgos y observaciones¶
NPMsigue exponiendo81/tcpsin FQDN dedicado; eso simplifica acceso pero aumenta visibilidad del panel administrativo.Grafanatiene la password en un secreto local legible porroot; es mejor operativamente que dejarla en Git, pero exige disciplina de host.PortaineryNPMno conservan la password actual en texto claro; hoy la recuperacion real es por reset controlado, no por lectura.OpenClawrequiere pensar el acceso como identidad de dispositivo y estado persistido, no como password unica.
Evidencia usada¶
ssh openclaw-vps/opt/stacks/observability/docker-compose.yml/opt/stacks/observability/secrets//docker/nginx-proxy-manager/data/database.sqlite/var/lib/docker/volumes/portainer_data_new/_data/opt/stacks/openclaw/.env/opt/stacks/openclaw/config/**curl -Iy endpoints publicos deGrafana,PortaineryOpenClaw
Cierre¶
- secretos expuestos en este documento:
no - contraseñas impresas:
no - procedimientos de recuperacion documentados:
si