Dinoer

El directorio de credenciales encriptado

Dónde viven las contraseñas, cómo llegan a un formulario sin pasar nunca por su shell, y el error que las escribe silenciosamente en texto claro.

Sus credenciales se encuentran en un directorio cifrado que monta: un volumen gocryptfs. Se almacenan en un archivo JSON sin formato dentro de él, y ese archivo solo es legible mientras el volumen está montado. Dinoer lo lee dentro del proceso que controla el navegador, en el momento en que se completa un campo. El valor nunca pasa por su shell, su historial de comandos ni los propios registros de Dinoer.

La distinción es importante, y la palabra causa el daño: un archivo JSON no es seguro, y llamarlo así promete una garantía que el archivo no ofrece. Lo que protege las credenciales es el cifrado del directorio que las rodea, y el hecho de que Dinoer nunca extrae el valor del proceso que lo necesita.

Ese es todo el mecanismo. El resto de esta página explica cómo configurarlo y una forma en que se puede configurar incorrectamente.

Créalo una vez

bash /opt/dinoer/scripts/monter-repertoire-chiffre.sh    # mount an existing encrypted directory

Para crear uno, el script de configuración gestiona ambos modos: un directorio simple o uno encriptado con gocryptfs:

bash ~/git/Dinoer/Dinoer/scripts/configurer-repertoire-chiffre.sh

El modo encriptado crea el almacenamiento encriptado y un punto de montaje vacío. Nada es legible en el disco hasta que lo montas.

Incluye las credenciales en él

Un archivo JSON simple dentro del directorio montado:

{
  "username": "operator",
  "password": "…",
  "totp_cle": "BASE32SEED",
  "ntfy_topic": "…",
  "origines_autorisees": ["target.local"]
}

Solo necesitan existir las claves que su escenario realmente referencia, excepto origines_autorisees — obligatoria, sin excepciones. Enumera los nombres de host contra los que este archivo puede usarse; una lectura contra cualquier otro dominio se rechaza antes incluso de que el archivo se abra. totp_cle es la semilla base32 para los códigos de dos factores; ntfy_topic es para códigos que se le envían.

Úsalo en un escenario

{"type": "remplir", "selecteur": "input[name=\"username\"]",
 "valeur": "depuis_secrets", "secret_cle": "username"},
{"type": "remplir", "selecteur": "input[name=\"password\"]",
 "valeur": "depuis_secrets", "secret_cle": "password"}

secret_cle es la clave dentro del archivo descifrado. El escenario sigue siendo válido — nombra una clave, nunca un secreto. Es por eso que un escenario puede existir en un repositorio público sin que se oculte nada.

No haga nunca esto PASS=$(jq -r ‘.password’ ~/Vaults/…/creds.json) — una credencial en una variable de shell está en su entorno de proceso, en /proc, y posiblemente en su historial. El directorio cifrado existe precisamente para evitar esto.

Un directorio por proyecto

Dos formas, dependiendo de si es algo puntual o un hábito.

# One-shot
DINOER_SECRETS_DIR=~/Vaults/MyProject /opt/dinoer/venv/bin/python3 /opt/dinoer/shot.py \
  --url … --guide-version 1.6

# Recurring — a config file at the project root
echo '{"secrets_dir": "../MyProject-secrets"}' > ~/git/MyProject/.dinoer.conf
export DINOER_CONF=~/git/MyProject/.dinoer.conf

Un relativo secrets_dir se resuelve en función de la ubicación del archivo de configuración, por lo que todo se incluye con el proyecto.

--secrets <archivo> designa un archivo de credenciales específico para una ejecución sin tocar ninguna configuración — útil cuando el mismo escenario sirve a varios clientes.

Cuando se cierra el directorio

Dinoer se detiene con un fallo explícito en lugar de simularlo:

SecretsFermesError — exit code 42
SecretsNonConfigureError — exit code 43 (no encrypted directory configured at all)

Si usted es un técnico: no intente montarlo usted mismo. Consulte al operador.

Dinoer también protege sus propias escrituras. Su registro de operaciones detecta un directorio cerrado y redirige a una opción de respaldo local en lugar de escribir en texto plano donde debería estar almacenada la información cifrada.

El error que cuesta más

Un directorio que aún no está montado sigue existiendo. Simplemente está vacío y sin cifrar.

La protección interna de Dinoer cubre únicamente las escrituras realizadas por Dinoer mismo. No protege un archivo de credenciales que usted cree manualmente, utilizando un comando de shell o un editor, mientras el directorio está desmontado. En ese caso, no está escribiendo dentro del directorio: está escribiendo junto a él, en texto plano, en un directorio que parece correcto.

Antes de crear o actualizar un archivo de credenciales, confirme que el directorio está montado — debe estar no vacío. En caso de duda, deténgase y compruebe. Esta acción no se puede deshacer.

En resumen

  • El archivo se lee dentro del proceso del navegador, nunca a través de su shell.
  • Los escenarios nombran una clave, nunca un secreto — para que sigan siendo publicables.
  • DINOER_CONF o --secrets para directorios por proyecto y por tenant.
  • Exit 42 significa cerrado, exit 43 significa nunca configurado — pregunte al operador, no lo monte usted mismo.
  • Un directorio no montado es un directorio vacío sin cifrar. Compruebe antes de escribir.